cd ~{,/zhs/}
# su # switch to root user
# cd /var/lib/machines
# container_name=android-studio
# btrfs subvolume create $container_name
Then it will be easy to snapshot and migrate the container.
Reference: systemd-nspawn - ArchWiki
Codename of current latest LTS version of Ubuntu is focal
.
# codename=focal
# repository_url='https://mirrors.bfsu.edu.cn/ubuntu/'
# debootstrap --include=systemd-container \
--components=main,universe $codename $container_name $repository_url
After installation, run systemd-nspawn --machine=$container_name
to boot into brand new container.
You may need to add --bind-ro=/etc/resolv.conf
option to make DNS work in container.
To check network status, consider commands ping 1.1.1.1
and ping archlinux.org
: if former works and latter doesn’t, it would be DNS problem.
Inside container, enable i386 architecture and install the libraries.
# dpkg --add-architecture i386
# apt-get update
# apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386 lib32z1 libbz2-1.0:i386
You could either curl
/wget
the latest version package inside container,
or download it on host and mount it to container:
# host_as_archive='/data/Downloads/android-studio-ide-202.7486908-linux.tar.gz'
# systemd-nspawn --machine=$container_name --bind-ro=$host_as_archive:/tmp/as.tar.gz
Inside container, add a dedicated normal user named “android” and extract Android Studio to user home:
# useradd --create-home android
# su - android
# tar --extract --verbose --file=/tmp/as.tar.gz
# mv android-studio studio
After this, Android Studio is installed under /home/android/studio/
,
run /home/android/studio/bin/studio.sh
to start up:
# user=android
# startup_script='/home/android/studio/bin/studio.sh'
# systemd-nspawn --machine=$container_name --user=$user $startup_script
Oh no, this won’t work because I forget to mention Xorg stuff. Command options become just too many, from this step we need start to actually write up a shell script to run Android Studio in GUI.
TL;DR: Run
apt-get install libxext6 libxrender1 libxtst6 libxi6 libfreetype6 fontconfig
to start up.
This log complains about missing library file libXext.so.6
,
so let’s try a “reverse query”:
# systemd-nspawn --machine=$container_name --bind-ro=/etc/resolv.conf
# apt-get install apt-file
# apt-file update
# apt-file search libXext.so.6
It turned out the package name should be libxext6
. After installing it, another four same errors
came along, so all the missing libraries would be:
apt-get install libxext6 libxrender1 libxtst6 libxi6 libfreetype6
Android Studio finally starts up… but crashes right away. The log mentions “font”
a lot, so I tried installing fontconfig
package then it finally starts up.
Mount host icon theme to container and set environment variable:
# host_data=/usr/share
# data=/home/$user/.local/share
# systemd-nspawn --machine=$container_name \
--bind-ro=$host_data/icons:$data/icons --setenv=XCURSOR_PATH=$data/icons
Install X cursor management library in container:
# systemd-nspawn --machine=$container_name --bind-ro=/etc/resolv.conf apt-get install libxcursor1
I wrote a fish-shell script, and a desktop entry according to AUR.