cd ~{,/zhs/}
# su # 切换到 root 用户
# cd /var/lib/machines
# container_name=android-studio
# btrfs subvolume create $container_name
当前最新的长期支持版 Ubuntu 代号为 focal
。
# codename=focal
# repository_url='https://mirrors.bfsu.edu.cn/ubuntu/'
# debootstrap --include=systemd-container \
--components=main,universe $codename $container_name $repository_url
安装完成后,运行 systemd-nspawn --machine=$container_name
即可启动进入崭新的容器。
可能需要加上 --bind-ro=/etc/resolv.conf
参数才能让容器里的 DNS 正常工作。
想要检查网络状态的话,可以使用命令 ping 1.1.1.1
和 ping archlinux.org
:如果前者通后者不通,说明是 DNS 问题。
# dpkg --add-architecture i386
# apt-get update
# apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386 lib32z1 libbz2-1.0:i386
可以在容器中使用 curl
/wget
下载最新版本的包,也可以在主机下载之后挂在到容器:
# 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
在容器中添加一个专门的普通用户,就叫「android」吧,然后把 Android Studio 解压到用户目录:
# useradd --create-home android
# su - android
# tar --extract --verbose --file=/tmp/as.tar.gz
# mv android-studio studio
现在 Android Studio 已经安装到了 /home/android/studio/
,启动脚本在
/home/android/studio/bin/studio.sh
:
# user=android
# startup_script='/home/android/studio/bin/studio.sh'
# systemd-nspawn --machine=$container_name --user=$user $startup_script
哎呀,这启动不了,我忘了 Xorg 相关处理了。命令行参数太多,从这一步开始,想要在图形界面运行 Android Studio 就要着手撰写脚本了。
太长不看:
apt-get install libxext6 libxrender1 libxtst6 libxi6 libfreetype6 fontconfig
这份日志关键是缺少库文件 libXext.so.6
,那我们来试试「反向查询」:
# systemd-nspawn --machine=$container_name --bind-ro=/etc/resolv.conf
# apt-get install apt-file
# apt-file update
# apt-file search libXext.so.6
结果表明库文件对应的软件包应该是 libxext6
。安装之后,同样的四个错误接踵而至,因此所有缺少的库如下:
apt-get install libxext6 libxrender1 libxtst6 libxi6 libfreetype6
Android Studio 终于启动了,然后马上又崩溃了。日志多次提到「字体」,于是尝试安装了 fontconfig
包,这次终于正常启动了。
将主机的图标主题挂载到容器并设置环境变量:
# 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
在容器中安装 X 光标管理库:
# systemd-nspawn --machine=$container_name --bind-ro=/etc/resolv.conf apt-get install libxcursor1