Better_Software_Header_Mobile Better_Software_Header_Web

Find what you need - explore our website and developer resources

⬢ Distrobox: An In-depth Guide for Developers - Part 1

Motivation and Introduction

distrobox create -n tempalpine -i alpine -H /home/sus/temphome --init
podman create
--hostname "tempalpine.sus"
--name "tempalpine"
--privileged
--security-opt label=disable
--security-opt apparmor=unconfined
--pids-limit=-1
--user root:root
--ipc host
--network host
--label "manager=distrobox"
--label "distrobox.unshare_groups=1"
--env "SHELL=bash"
--env "HOME=/home/sus"
--env "container=podman"
--env "TERMINFO_DIRS=/usr/share/terminfo:/run/host/usr/share/terminfo"
--volume /:/run/host:rslave
--volume /tmp:/tmp:rslave
--volume "/usr/bin/distrobox-init":/usr/bin/entrypoint:ro
--volume "/usr/bin/distrobox-export":/usr/bin/distrobox-export:ro
--volume "/usr/bin/distrobox-host-exec":/usr/bin/distrobox-host-exec:ro
--volume "/home/sus":"/home/sus":rslave
--volume /dev:/dev:rslave
--volume /sys:/sys:rslave
--volume /dev/pts
--volume /dev/null:/dev/ptmx
--volume /var/log/journal
--env "HOME=/home/sus/temphome"
--env "DISTROBOX_HOST_HOME=/home/sus"
--volume "/home/sus/temphome:/home/sus/temphome:rslave"
--volume /etc/hosts:/etc/hosts:ro
--volume /etc/resolv.conf:/etc/resolv.conf:ro
--annotation run.oci.keep_original_groups=1
--ulimit host
--systemd=always
--userns keep-id

--entrypoint /usr/bin/entrypoint
alpine
--verbose
--name "sus"
--user 1000
--group 1000
--home "/home/sus/temphome"
--init "1"
--nvidia "0"
--pre-init-hooks ""
--additional-packages ""
-- ''
~ 
🎄
~/exampledir 
🎄
~ $
~/exampledir $
~ 
🎄 distrobox create --image alpine
~ 
🎄 distrobox create -i docker.io/gentoo/stage3:latest
~ 
🎄 distrobox create -i docker.io/gentoo/stage3:latest -n gentoo
~ 
🎄 distrobox enter alpine
Starting container...                   	 [ OK ]
Installing basic packages...            	 [ OK ]
Setting up devpts mounts...             	 [ OK ]
Setting up read-only mounts...          	 [ OK ]
Setting up read-write mounts...         	 [ OK ]
Setting up host's sockets integration...	 [ OK ]
Integrating host's themes, icons, fonts...	 [ OK ]
Setting up package manager exceptions...	 [ OK ]
Setting up distrobox profile...         	 [ OK ]
Setting up sudo...                      	 [ OK ]
Setting up user groups...               	 [ OK ]
Setting up kerberos integration...      	 [ OK ]
Setting up user's group list...         	 [ OK ]
Setting up existing user...             	 [ OK ]
Setting up user home...                 	 [ OK ]
Ensuring user's access...               	 [ OK ]

Container Setup Complete!
sus@alpine:~$
sus@alpine:~$ ls /lib
apk       ld-linux-x86-64.so.2  libc.musl-x86_64.so.1  libcrypt.so.1    libm.so.6        libresolv.so.2  libutil.so.1  modules-load.d
firmware  ld-musl-x86_64.so.1   libc.so.6              libgcompat.so.0  libpthread.so.0  librt.so.1      mdev          sysctl.d
sus@alpine:~$ vim
bash: vim: command not found
sus@alpine:~$ sudo apk add vim
(1/4) Installing vim-common (9.1.1012-r0)
(2/4) Installing xxd (9.1.1012-r0)
(3/4) Installing vim (9.1.1012-r0)
(4/4) Installing vim-doc (9.1.1012-r0)
Executing busybox-1.37.0-r9.trigger
OK: 546 MiB in 367 packages
sus@alpine:~$ vim
sus@alpine:~$ sudo apk add qutebrowser
...
...
sus@alpine:~$ qutebrowser
sus@alpine:~$ 
logout

~ took 13m1s 
🎄 qutebrowser
Command 'qutebrowser' not found, but can be installed with:
sudo apt install qutebrowser

~ 
🎄
~ 
🎄 distrobox enter alpine -- qutebrowser