Installing ArchLinux inside an Alpine chroot: Difference between revisions

From Alpine Linux
m (Marked some dead links.)
(added [chroot]# prompt)
 
(4 intermediate revisions by 3 users not shown)
Line 1: Line 1:
It's sometimes useful to have another Linux system installed inside a chroot on an Alpine system. This page explains how to install a recent version of [https://www.archlinux.org/ ArchLinux] (either x86 or x86_64) inside an existing Alpine system (assumed to have the same architecture).
It's sometimes useful to have another Linux system installed inside a chroot on an Alpine system. This page explains how to install a recent version of [https://www.archlinux.org/ ArchLinux] (either x86 or x86_64) inside an existing Alpine system (assumed to have the same architecture).


Some useful links:
# Inside your Alpine system install the following packages as [[BusyBox]] wget is inadequate: {{Cmd|<nowiki># apk add bash zstd curl wget  
* https://wiki.archlinux.org/index.php/Remote_Arch_Linux_Install{{dead link}}
$ wget --no-check-certificate https://raw.github.com/tokland/arch-bootstrap/master/arch-bootstrap.sh
* https://wiki.archlinux.org/index.php/Install_from_Existing_Linux{{dead link}}
# mkdir chroot64
* https://wiki.archlinux.org/index.php/Installation_Guide{{dead link}}
# bash arch-bootstrap.sh -a x86_64 chroot64 </nowiki>}}
* [http://superuser.com/questions/111152 What's the proper way to prepare chroot to recover a broken Linux installation?]
# Then chroot into the newly-created Arch system. I use the following script to do this: {{Cat|/usr/local/bin/start-chroot|<nowiki>
 
 
<OL>
<LI><div>
Inside your Alpine system:
{{Cmd|<nowiki>sudo apk add bash wget # BusyBox wget is inadequate
wget --no-check-certificate https://raw.github.com/tokland/arch-bootstrap/master/arch-bootstrap.sh
mkdir chroot64
sudo bash arch-bootstrap.sh -a x86_64 chroot64
</nowiki>}}
 
</div>
<LI><div>
Then chroot into the newly-created Arch system. I use the following script to do this:
 
{{Cat|/usr/local/bin/start-chroot|<nowiki>
#!/bin/sh -e
#!/bin/sh -e
user=`whoami`
user=`whoami`
Line 58: Line 42:
chroot . /bin/sh -l "$@"
chroot . /bin/sh -l "$@"
umount ./dev/pts
umount ./dev/pts
umount ./dev ./sys ./proc
umount ./dev ./sys ./proc</nowiki>}}
</nowiki>}}
# At least when setting the Arch system up, you'll want to disable Alpine's grsecurity prohibition against suid/sgid: {{Cmd|# sysctl -w kernel.grsecurity.chroot_deny_chmod{{=}}0}}
 
# Inside the Arch chroot, do the following. (The first step may take a long time, especially if you're connected to the system in question by ssh. See [https://wiki.archlinux.org/title/Pacman-key#Initializing_the_keyring this link] for more info, and tips about how to speed the process up.){{Cmd|<nowiki>[chroot]#  pacman-key --init
At least when setting the Arch system up, you'll want to disable Alpine's grsecurity prohibition against suid/sgid:
[chroot]#  pacman-key --populate archlinux
 
[chroot]#  pacman -Syyu
{{Cmd|sysctl -w kernel.grsecurity.chroot_deny_chmod{{=}}0}}
[chroot]#  pacman -Rs systemd # inside a chroot, we don't need an init system (nor a kernel)
 
[chroot]#  pacman -S sudo </nowiki>}}
For more info, see:
# You can also install any other packages you want. I use: {{Cmd|[chroot]# pacman -S less licenses man-db man-pages procps-ng psmisc sysfsutils base-devel openssh cpio elfutils rsync unzip vim wget zip}}
 
# Still inside the Arch chroot, assign a root password and create a non-root user: {{Cmd|<nowiki>[chroot]#  passwd
* http://en.wikibooks.org/wiki/Grsecurity
[chroot]#  useradd -m -g users -G wheel -s /usr/bin/bash myuser
* http://www.gentoo.org/proj/en/hardened/grsecurity.xml
[chroot]#  passwd myuser
 
[chroot]#  export VISUAL=/usr/bin/vim
</div>
[chroot]#  visudo</nowiki>}}
<LI><div>
# Uncomment this line in {{Path|/etc/sudoers}}, then save the file:{{Cat|/etc/sudoers|<nowiki>...
Inside the Arch chroot, do the following. (The first step may take a long time, especially if you're connected to the system in question by ssh. See [https://wiki.archlinux.org/index.php/Pacman-key#Initializing_the_keyring this link] for more info, and tips about how to speed the process up.)
## Uncomment to allow members of group wheel to execute any command
 
%wheel ALL=(ALL) ALL
{{Cmd|<nowiki>pacman-key --init
...</nowiki>}}
pacman-key --populate archlinux
# Now you're done. You can switch to the non-root user with: {{Cmd|[chroot]#  su - myuser}}  
pacman -Syyu
# Alternately, to exit the chroot hit {{Key|Ctrl}}+{{Key|D}}.  
pacman -Rs systemd # inside a chroot, we don't need an init system (nor a kernel)
If you'll want to install any packages from the [https://aur.archlinux.org/ Arch User Repository], you may want to install a richer package manager, such as [https://wiki.archlinux.org/index.php/Yaourt Yaourt]. Do this as the non-root user: {{Cmd|<nowiki>$ curl -O https://aur.archlinux.org/packages/pa/package-query/package-query.tar.gz
pacman -S sudo
$ tar -xzf package-query.tar.gz && cd package-query && makepkg -si
</nowiki>}}
$ cd ..
 
$ curl -O https://aur.archlinux.org/packages/ya/yaourt/yaourt.tar.gz
You can also install any other packages you want. I use:
$ tar -xzf yaourt.tar.gz && cd yaourt  
 
[chroot]#  makepkg -si</nowiki>}}
{{Cmd|pacman -S less licenses man-db man-pages procps-ng psmisc sysfsutils \
  base-devel openssh cpio elfutils rsync unzip vim wget zip
}}
 
</div>
<LI><div>
Still inside the Arch chroot, assign a root password and create a non-root user:
 
{{Cmd|<nowiki>passwd
useradd -m -g users -G wheel -s /usr/bin/bash myuser
passwd myuser
export VISUAL=/usr/bin/vim
visudo
</nowiki>}}
 
Uncomment this line in {{Path|/etc/sudoers}}, then save the file:
 
## Uncomment to allow members of group wheel to execute any command
%wheel ALL=(ALL) ALL
 
</div>
</OL>
 
Now you're done. You can switch to the non-root user with:
 
{{Cmd|su - myuser}}
 
or hit {{Key|Ctrl}}+{{Key|D}} to exit the chroot.
 
If you'll want to install any packages from the [https://aur.archlinux.org/ Arch User Repository], you may want to install a richer package manager, such as [https://wiki.archlinux.org/index.php/Yaourt Yaourt]. Do this as the non-root user:
 
{{Cmd|<nowiki>curl -O https://aur.archlinux.org/packages/pa/package-query/package-query.tar.gz
tar -xzf package-query.tar.gz && cd package-query && makepkg -si
cd ..
curl -O https://aur.archlinux.org/packages/ya/yaourt/yaourt.tar.gz
tar -xzf yaourt.tar.gz && cd yaourt && makepkg -si
</nowiki>}}


== See also ==
* https://wiki.archlinux.org/title/Remote_Arch_Linux_Install
* https://wiki.archlinux.org/title/Install_from_Existing_Linux
* https://wiki.archlinux.org/title/Installation_Guide
* [https://superuser.com/questions/111152 What's the proper way to prepare chroot to recover a broken Linux installation?]
* https://en.wikibooks.org/wiki/Grsecurity
* https://www.gentoo.org/proj/en/hardened/grsecurity.xml


[[Category:Development]]
[[Category:Development]]
[[Category:Installation]]
[[Category:Installation]]

Latest revision as of 09:13, 26 April 2025

It's sometimes useful to have another Linux system installed inside a chroot on an Alpine system. This page explains how to install a recent version of ArchLinux (either x86 or x86_64) inside an existing Alpine system (assumed to have the same architecture).

  1. Inside your Alpine system install the following packages as BusyBox wget is inadequate:

    # apk add bash zstd curl wget $ wget --no-check-certificate https://raw.github.com/tokland/arch-bootstrap/master/arch-bootstrap.sh # mkdir chroot64 # bash arch-bootstrap.sh -a x86_64 chroot64

  2. Then chroot into the newly-created Arch system. I use the following script to do this:

    Contents of /usr/local/bin/start-chroot

    #!/bin/sh -e user=`whoami` if [ "$user" != "root" ]; then echo "This script needs root access" >&2 exit 1 fi if ! [ -d "$1" ]; then echo "Usage: $0 <chroot directory>" >&2 exit 1 fi if [ x1 = x`sysctl -ne kernel.grsecurity.chroot_deny_chmod` ]; then echo "Warning: can't suid/sgid inside chroot" >&2 fi if [ x1 = x`sysctl -ne kernel.grsecurity.chroot_deny_chroot` ]; then echo "Warning: can't chroot inside chroot" >&2 fi if [ x1 = x`sysctl -ne kernel.grsecurity.chroot_deny_mknod` ]; then echo "Warning: can't mknod inside chroot" >&2 fi if [ x1 = x`sysctl -ne kernel.grsecurity.chroot_deny_mount` ]; then echo "Warning: can't mount inside chroot" >&2 fi cd "$1" shift cp -L /etc/resolv.conf ./etc/ || true mount -t proc proc ./proc mount -t sysfs sys ./sys mount -o bind /dev ./dev # next line is said to be important for pacman's signature check mount -o bind /dev/pts ./dev/pts case $1 in -l) shift;; -l*) one=${1#-l}; shift; set -- -$one "$@";; esac chroot . /bin/sh -l "$@" umount ./dev/pts umount ./dev ./sys ./proc
  3. At least when setting the Arch system up, you'll want to disable Alpine's grsecurity prohibition against suid/sgid:

    # sysctl -w kernel.grsecurity.chroot_deny_chmod=0

  4. Inside the Arch chroot, do the following. (The first step may take a long time, especially if you're connected to the system in question by ssh. See this link for more info, and tips about how to speed the process up.)

    [chroot]# pacman-key --init [chroot]# pacman-key --populate archlinux [chroot]# pacman -Syyu [chroot]# pacman -Rs systemd # inside a chroot, we don't need an init system (nor a kernel) [chroot]# pacman -S sudo

  5. You can also install any other packages you want. I use:

    [chroot]# pacman -S less licenses man-db man-pages procps-ng psmisc sysfsutils base-devel openssh cpio elfutils rsync unzip vim wget zip

  6. Still inside the Arch chroot, assign a root password and create a non-root user:

    [chroot]# passwd [chroot]# useradd -m -g users -G wheel -s /usr/bin/bash myuser [chroot]# passwd myuser [chroot]# export VISUAL=/usr/bin/vim [chroot]# visudo

  7. Uncomment this line in /etc/sudoers, then save the file:

    Contents of /etc/sudoers

    ... ## Uncomment to allow members of group wheel to execute any command %wheel ALL=(ALL) ALL ...
  8. Now you're done. You can switch to the non-root user with:

    [chroot]# su - myuser

  9. Alternately, to exit the chroot hit Ctrl+D.
  10. If you'll want to install any packages from the Arch User Repository, you may want to install a richer package manager, such as Yaourt. Do this as the non-root user:

    $ curl -O https://aur.archlinux.org/packages/pa/package-query/package-query.tar.gz $ tar -xzf package-query.tar.gz && cd package-query && makepkg -si $ cd .. $ curl -O https://aur.archlinux.org/packages/ya/yaourt/yaourt.tar.gz $ tar -xzf yaourt.tar.gz && cd yaourt [chroot]# makepkg -si

See also