phusion / passenger_apt_automation

Tools for automatically building a Debian APT repository for Phusion Passenger
MIT License
20 stars 20 forks source link

Multi-architecture support (arm64) #39

Closed samip5 closed 1 year ago

samip5 commented 3 years ago

Related to: https://github.com/phusion/passenger-docker/issues/286#issuecomment-623208333

thbar commented 2 years ago

Similarly to https://github.com/phusion/passenger-docker/issues/286, not having arm support for APT has an "interesting" consequence. If you use Vagrant on a Mac M1, through for instance Parallels (see https://github.com/chef/bento/issues/1344#issuecomment-1087158889), and your Ansible (or similar) setup includes Passenger, then Passenger becomes (in my case) a blocking point, making it impossible to prepare my dev-ops work on Mac M1.

Is ARM support considered at this point? Thanks!

FooBarWidget commented 2 years ago

One complication is the lack of ARM-based CI services or cloud servers. That doesn't make it easy to release ARM packages.

samip5 commented 2 years ago

One complication is the lack of ARM-based CI services or cloud servers. That doesn't make it easy to release ARM packages.

Not entirely true, ARM64 instances can be requested from Fosshost (non-commercial use), and one can use Oracle's Cloud offering that includes those.

badaldavda8 commented 2 years ago

One complication is the lack of ARM-based CI services or cloud servers. That doesn't make it easy to release ARM packages.

You can make use of Graviton instances from AWS; t4g.micro instance which is free tier. Let me know if you need help with it.

Thanks for maintaining this. Much appreciated.

badaldavda8 commented 2 years ago

Any update on this?

badaldavda8 commented 2 years ago

Any update on this?

Any update on this?

sjf-control commented 2 years ago

I am also waiting for updates...

richseviora commented 1 year ago

+1 looking for this as well

CamJN commented 1 year ago

I'm doing a bit of a beta test of the arm64 packages here: https://github.com/phusion/passenger-docker/issues/286 the packages I made for this test are here:

libapache2-mod-passenger_6.0.15-1~focal1_arm64.deb.zip libnginx-mod-http-passenger_6.0.15-1~focal1_arm64.deb.zip passenger_6.0.15-1~focal1_arm64.deb.zip passenger-dbg_6.0.15-1~focal1_arm64.deb.zip passenger-dev_6.0.15-1~focal1_arm64.deb.zip passenger-doc_6.0.15-1~focal1_all.deb.zip

There are only focal packages because that's what our docker image is based on, and i had to create these manually in an emulated vm so it was very slow. If the test goes well then i'll add this to the CI so that arm images get built as part of the release for all of our supported debian/ubuntu versions.

thbar commented 1 year ago

@CamJN in order to provide you a bit of feedback, I took the plunge and tried to use the test arm64 packages you provided to solve my issue (https://github.com/phusion/passenger_apt_automation/issues/39#issuecomment-1098051125).

It apparently worked out fine! I'm able to run simple tests on my app.

To install them, roughly I've used this Ansible setup below.

I will be able to test also once the packages are officially published via the apt repo, if that's doable!

Thanks for your work on this, appreciated.

# https://github.com/phusion/passenger_apt_automation/issues/39#issuecomment-1272615588
beta_passenger_arm_packages:
  - https://github.com/phusion/passenger_apt_automation/files/9742436/passenger_6.0.15-1.focal1_arm64.deb.zip
#  - https://github.com/phusion/passenger_apt_automation/files/9742434/libapache2-mod-passenger_6.0.15-1.focal1_arm64.deb.zip
  - https://github.com/phusion/passenger_apt_automation/files/9742435/libnginx-mod-http-passenger_6.0.15-1.focal1_arm64.deb.zip

- name: Evaluate architecture
  shell: dpkg --print-architecture
  register: detected_architecture
  changed_when: false

- name: "Download beta deb packages"
  ansible.builtin.get_url:
    url: "{{ item }}"
    dest: /tmp
    mode: '0440'
  with_items: "{{ beta_passenger_arm_packages }}"
  when: detected_architecture.stdout == 'arm64'

- name: "Install unzip"
  ansible.builtin.apt:
    name: unzip
    state: present
  when: detected_architecture.stdout == 'arm64'

- name: "Unzip deb packages"
  ansible.builtin.unarchive:
    src: "/tmp/{{ item | basename }}"
    dest: /tmp
    remote_src: yes
  with_items: "{{ beta_passenger_arm_packages }}"
  when: detected_architecture.stdout == 'arm64'

- name: "Install Passenger packages"
  # NOTE: use "force: yes" if you need to downgrade (see https://github.com/ansible/ansible/issues/29451)
  apt:
    name: "{{ distribution_passenger_packages }}"
    state: present
  ignore_errors: "{{ ansible_check_mode }}"
  when: detected_architecture.stdout != 'arm64'

- name: "Install Passenger packages"
  apt:
    deb: "/tmp/{{ item | basename | replace('.zip', '') | replace('.focal1', '~focal1') }}"
  with_items: "{{ beta_passenger_arm_packages }}"
  when: detected_architecture.stdout == 'arm64'
CamJN commented 1 year ago

@thbar You can try out arm packages quite easily atm using our testing repo.

Just put deb https://oss-binaries.phusionpassenger.com/apt/passenger-testing DISTRO_CODENAME_HERE main in the passenger apt sources list file.

For example for focal: sudo sh -c 'echo deb https://oss-binaries.phusionpassenger.com/apt/passenger-testing focal main > /etc/apt/sources.list.d/passenger.list'

bionic, focal, jammy, kinetic, stretch, buster, and bullseye should work.

thbar commented 1 year ago

@CamJN thanks, I have tried that and it worked out fine. Will the ARM package be published in the main repo directly for 6.0.16 later?

CamJN commented 1 year ago

The plan is for 6.0.16 to have the arm packages published in the main repo. I've been testing the CI to try and make this as smooth as possible and I think I've got all the kinks worked out.

CamJN commented 1 year ago

6.0.16 is out now.