Software management: Difference between revisions
Prabuanand (talk | contribs) m (Prabuanand moved page Running glibc programs to Software management: consolidate all the ways to manage software in a single page) |
Prabuanand (talk | contribs) (added headings and introduction paragraph) |
||
Line 1: | Line 1: | ||
This page documents various ways to manage software in Alpine Linux. Even though the official package manager i.e [[Alpine Package Keeper|Alpine Package Keeper(APK)]] is a CLI tool, there are graphical tools like [[#Gnome software|Gnome software]], [[#KDE Discover|KDE Discover]] to manage official software packages and [[#Flatpak|Flatpaks]]. This page also documents ways to [[#Running glibc programs|run software compiled with glibc]]. | |||
== Alpine Package Keeper == | |||
{{Main|Alpine Package Keeper}} | |||
[[Alpine Package Keeper|Alpine Package Keeper(APK)]] is the official package manager in Alpine Linux and is available as cli tool. Refer to [[Comparison_with_other_distros#Comparison_chart/Rosetta_Stone|Rosetta stone]] to see how standard things related to package management are done in CLI in Alpine Linux compared to other popular distributions. | |||
== Graphical software manager == | |||
== | === Gnome software === | ||
[ | [[GNOME#Configuration|Gnome software]] can be used as a GUI front end for Alpine Package Keeper. | ||
=== KDE Discover === | |||
[[KDE]] Discover can be used as a GUI front end for Alpine Package Keeper. | |||
== Flatpak == | == Flatpak == | ||
{{Main|Flatpak}} | {{Main|Flatpak}} | ||
[https://flatpak.org Flatpak] is by far the easiest method for running | [https://flatpak.org Flatpak] is by far the easiest method for running programs not available in the official Alpine Linux [[Repositories|repositories]]. Follow the [[Flatpak#Installing_Flatpak|Flatpak]] wiki page and ensure that [[Flatpak#Installing_Flatpak|Flathub repository]] is enabled for using Flatpaks. | ||
== Running glibc programs == | |||
If you want to run [https://www.gnu.org/software/libc/ glibc] programs in Alpine Linux, there are a few ways of doing so. You can install [[#gcompat|gcompat]] a compatibility layer, or you can install glibc manually alongside [[Musl]], as it isn't packaged, or you could do it the easy way and use [[#Flatpak|Flatpak]] or use [[#Containers|containers]] or do a [[#Chroot|chroot]]. | |||
=== gcompat === | |||
[https://git.adelielinux.org/adelie/gcompat gcompat] is a library which provides glibc-compatible APIs for use on musl libc systems like Alpine Linux. To install issue the command: {{cmd|apk add {{pkg|gcompat}}}} | |||
After that you run your binaries as normal. | |||
== Chroot == | == Chroot == | ||
Line 97: | Line 112: | ||
You can now use <code>apt-get</code> to install needed packages. | You can now use <code>apt-get</code> to install needed packages. | ||
== Chroot + Bubblewrap == | |||
It's also possible to use a Debian system chroot with Bubblewrap. This allows running programs without root. | |||
{{cmd|# apk add bubblewrap debootstrap | |||
# mkdir -p /var/chroots/debian | |||
# debootstrap --arch amd64 stable /var/chroots/debian/ https://deb.debian.org/debian}} | |||
Finally we can make an alias for bwrap. | |||
{{cmd|$ alias glibc{{=}}"LANG{{=}}en_US.UTF-8 bwrap --bind /var/chroots/debian / --dev-bind /dev /dev --proc /proc --bind /sys /sys --bind /run /run --bind /home /home --ro-bind /etc/resolv.conf /etc/resolv.conf --ro-bind /etc/passwd /etc/passwd --ro-bind /etc/group /etc/group"}} | |||
To run programs that use X11/Xorg you can use: | |||
{{cmd|$ alias glibcX11{{=}}"LANG{{=}}en_US.UTF-8 bwrap --bind /var/chroots/debian / --dev-bind /dev /dev --proc /proc --bind /sys /sys --bind /run /run --bind /home /home --ro-bind /etc/resolv.conf /etc/resolv.conf --ro-bind /etc/passwd /etc/passwd --ro-bind /etc/group /etc/group --bind /tmp/.X11-unix/X0 /tmp/.X11-unix/X0 --setenv DISPLAY :0"}} | |||
In this case you might need to use xhost to allow local connections, e.g.: | |||
{{cmd|# xhost + local:}} | |||
Now we can invoke glibc-built binaries like so: | |||
{{cmd|$ glibc ./binary}} or {{cmd|$ glibcX11 ./binary}} | |||
For updating the Chroot or installing dependencies we can mount it and then login as root: | |||
{{cmd|# mount --bind /dev /var/chroots/debian/dev | |||
# mount --bind /proc /var/chroots/debian/proc | |||
# chroot /var/chroots/debian /bin/bash | |||
# apt update && apt upgrade}} | |||
After installing what you might want to umount the binds for dev and proc to avoid issues. | |||
{{cmd|# umount /var/chroots/debian/dev}} | |||
{{cmd|# umount /var/chroots/debian/proc}} | |||
== Containers == | == Containers == | ||
Line 134: | Line 181: | ||
{{cmd|$ xhost +si:localuser:$USER}} | {{cmd|$ xhost +si:localuser:$USER}} | ||
== See also == | == See also == |
Revision as of 08:26, 24 May 2025
This page documents various ways to manage software in Alpine Linux. Even though the official package manager i.e Alpine Package Keeper(APK) is a CLI tool, there are graphical tools like Gnome software, KDE Discover to manage official software packages and Flatpaks. This page also documents ways to run software compiled with glibc.
Alpine Package Keeper
Alpine Package Keeper(APK) is the official package manager in Alpine Linux and is available as cli tool. Refer to Rosetta stone to see how standard things related to package management are done in CLI in Alpine Linux compared to other popular distributions.
Graphical software manager
Gnome software
Gnome software can be used as a GUI front end for Alpine Package Keeper.
KDE Discover
KDE Discover can be used as a GUI front end for Alpine Package Keeper.
Flatpak
Flatpak is by far the easiest method for running programs not available in the official Alpine Linux repositories. Follow the Flatpak wiki page and ensure that Flathub repository is enabled for using Flatpaks.
Running glibc programs
If you want to run glibc programs in Alpine Linux, there are a few ways of doing so. You can install gcompat a compatibility layer, or you can install glibc manually alongside Musl, as it isn't packaged, or you could do it the easy way and use Flatpak or use containers or do a chroot.
gcompat
gcompat is a library which provides glibc-compatible APIs for use on musl libc systems like Alpine Linux. To install issue the command:
apk add gcompat
After that you run your binaries as normal.
Chroot
An option that's easier to generalize to other glibc applications is installing a glibc-based distribution into a chroot. You can then either chroot into it, or use a symlink and some configuration to make its glibc (and associated libraries) usable from Alpine.
After setting up a chroot using any of the methods described below, the loader can be set up in Alpine like so (these instructions are for a Debian chroot in /var/chroots/debian, on x86_64, but can be adapted to other systems by using the appropriate paths):
mkdir -p /lib64 ln -s /var/chroots/debian/lib/x86_64-linux-gnu/ld-2.33.so /lib64 printf '/var/chroots/debian/lib/x86_64-linux-gnu\n/var/chroots/debian/usr/lib/x86_64-linux-gnu\n' > /etc/ld.so.conf /var/chroots/debian/sbin/ldconfig
Gentoo Linux
Select a stage3 from here and portage latest from here at gentoo/snapshots/portage-latest.tar.xz.
First,
doas apk add xz
Enter the chroot:
mkdir ~/chroot cd ~/chroot tar -xvf stage3-*.tar.xz tar -xvf portage-latest.tar.xz mv portage usr doas mount --bind /dev dev doas mount --bind /sys sys doas mount -t proc proc proc cp /etc/resolv.conf etc doas chroot . /bin/bash
And voilà, you have your working Gentoo chroot!
You can now take a look at Gentoo's Handbook to find out how you can configure and install your system, or simply extract/copy the program you need to run in your chroot enviroment and execute it.
Here is a wrapper script that is similar to arch-chroot
when you frequently reuse this chroot:
Also, create an account with the same user name as host current user to the chroot or make changes to the userspec option to chroot line.
Contents of gentoo-chroot.sh
Do at chmod +x gentoo-chroot.sh
to get it to work.
Arch Linux
Either use pacstrap (included with the arch-install-scripts package) or an Arch bootstrap image:
doas apk add arch-install-scripts mkdir ~/chroot && cd ~/chroot curl -O https://mirrors.edge.kernel.org/archlinux/iso/latest/archlinux-bootstrap-x86_64.tar.gz doas tar xzf archlinux-bootstrap-x86_64.tar.gz && rm archlinux-bootstrap-x86_64.tar.gz doas sed -i '/evowise/s/^#//' root.x86_64/etc/pacman.d/mirrorlist doas sed -i '/CheckSpace/s/^/#/' root.x86_64/etc/pacman.conf doas arch-chroot root.x86_64 [chroot]# pacman-key --init [chroot]# pacman-key --populate archlinux
Once that is done, update the system and install the desired package(s) (denoted by "foo" in this example):
[chroot]# pacman -Syu foo
Debian

Use the provided debootstrap package to create the Debian chroot. --arch
is optional, depending of your needs.
On the linux-grsec kernel, you will need to relax chroot limitations:
sudo apk add debootstrap for i in /proc/sys/kernel/grsecurity/chroot_*; do echo 0 | sudo tee $i; done mkdir ~/chroot sudo debootstrap --arch=i386 wheezy ~/chroot https://deb.debian.org/debian/ for i in /proc/sys/kernel/grsecurity/chroot_*; do echo 1 | sudo tee $i; done sudo chroot ~/chroot /bin/bash
You can now use apt-get
to install needed packages.
Chroot + Bubblewrap
It's also possible to use a Debian system chroot with Bubblewrap. This allows running programs without root.
# apk add bubblewrap debootstrap # mkdir -p /var/chroots/debian # debootstrap --arch amd64 stable /var/chroots/debian/ https://deb.debian.org/debian
Finally we can make an alias for bwrap.
$ alias glibc="LANG=en_US.UTF-8 bwrap --bind /var/chroots/debian / --dev-bind /dev /dev --proc /proc --bind /sys /sys --bind /run /run --bind /home /home --ro-bind /etc/resolv.conf /etc/resolv.conf --ro-bind /etc/passwd /etc/passwd --ro-bind /etc/group /etc/group"
To run programs that use X11/Xorg you can use:
$ alias glibcX11="LANG=en_US.UTF-8 bwrap --bind /var/chroots/debian / --dev-bind /dev /dev --proc /proc --bind /sys /sys --bind /run /run --bind /home /home --ro-bind /etc/resolv.conf /etc/resolv.conf --ro-bind /etc/passwd /etc/passwd --ro-bind /etc/group /etc/group --bind /tmp/.X11-unix/X0 /tmp/.X11-unix/X0 --setenv DISPLAY :0"
In this case you might need to use xhost to allow local connections, e.g.:
# xhost + local:
Now we can invoke glibc-built binaries like so:
$ glibc ./binary
or
$ glibcX11 ./binary
For updating the Chroot or installing dependencies we can mount it and then login as root:
# mount --bind /dev /var/chroots/debian/dev # mount --bind /proc /var/chroots/debian/proc # chroot /var/chroots/debian /bin/bash # apt update && apt upgrade
After installing what you might want to umount the binds for dev and proc to avoid issues.
# umount /var/chroots/debian/dev
# umount /var/chroots/debian/proc
Containers
It's also possible to use Docker or Podman containers with a helper like Distrobox. This allows using graphical programs easily and doesn't require root privileges once set up.
# apk add distrobox
Distrobox + Podman
# apk add podman
Then set up rootless Podman, following these steps. You'll need to mount your root as shared for Distrobox to function.
Fill in /etc/local.d/mount-rshared.start like so:
#!/bin/sh mount --make-rshared /
Mark it as executable.
# chmod +x /etc/local.d/mount-rshared.start
Then autostart its service.
# rc-update add local default # rc-service local start
Finally you can create a container using your chosen image.
$ distrobox create --image debian --name debian $ distrobox enter debian
It may also be necessary to allow X authorization for GUI programs to work.
$ xhost +si:localuser:$USER