将 Linux(测试版)的 Debian 替换为 Arch Linux

0. 已知问题

Linux支持测试版阶段,你的具体硬件配置,Linux(组件)需要有一些测试失败启动。

1.进入终端,安装容器

使用Ctrl ++Alt 可以t 打开打开crosh ,在其中输入vmc start termina 以启动Termina 虚拟机。

crosh> vmc start termina
(termina) chronos@localhost ~ $

lxc list 已经安装的容器:

(termina) chronos@localhost ~ $ lxc list
+---------+---------+-----------------------+------+------------+-----------+
| NAME    | STATE   | IPV4                  | IPV6 | TYPE       | SNAPSHOTS |
+---------+---------+-----------------------+------+------------+-----------+
| penguin | RUNNING | 100.115.92.202 (eth0) |      | PERSISTENT | 0         |
+---------+---------+-----------------------+------+------------+-----------+

由于Fy 使用OSrun_container.sh 可以Arch Linux 在 Chromium OS 这个命令中进行修改,这个脚本启动时可以复制到临时更改目录的命令,将脚本编辑/tmp

cp /usr/bin/run_container.sh /tmp
cd /tmp
vim run_container.sh

找到以下截图:

# lxc init "google:${FLAGS_lxd_image}" "${FLAGS_container_name}" || \
#   die "Unable to create container from image '${FLAGS_lxd_image}'"
local container_root="/usr/share/intergrade_container"
local lxd_info="${container_root}/lxd.tar.xz"
local root_file="${container_root}/rootfs.squashfs"
local container_alias="intergrade_fydemina"
lxc image import $lxd_info $root_file --alias $container_alias || \
    die "Unable to import image from $root_file"
lxc init $container_alias ${FLAGS_container_name} || \
    die "Unable to create container from image $container_alias"

修改为:

lxc init "google:${FLAGS_lxd_image}" "${FLAGS_container_name}" || \
    die "Unable to create container from image '${FLAGS_lxd_image}'"

运行以下命令,请指定名称是设置 应用程序里显示的用户名。您可以自行选择container_name 指定lxd_image 指定的 Linux 镜像名称,或者lxd_remote 指定的镜像源。

bash ./run_container.sh --container_name arch --user 你的用户名 --lxd_image archlinux/current --lxd_remote https://mirrors.tuna.tsinghua.edu.cn/lxc-images/

确保下载成功并且创建用户成功(发射那几个不能加入用户组的错误)。

2.进入容器的属性

执行的范围:
(termina) chronos@localhost /tmp $ lxc exec arch -- bash
[root@arch ~]#
在容器中执行以下命令:
#设置密码。千万不要给 root 设置密码,否则 Chromium OS 集成服务将无法运行
passwd 你的用户名
#把用户加入 wheel 组
usermod -aG wheel 你的用户名
设置源,把 tuna ustc 163 等中国的源剪辑粘贴到前面(vi 中dd 剪切整行,p 粘贴,粘贴/ ):
vi /etc/pacman.d/mirrorlist
设置archlinuxcn源:
vi /etc/pacman.conf
在插入最后:
[archlinuxcn]
Server = https://mirrors.tuna.tsinghua.edu.cn/archlinuxcn/$arch
安装依赖:
pacman -Syu archlinuxcn-keyring base-devel git gtk3 openssh xdg-utils xkeyboard-config

启用 sudo 无密码,执行

visudo
删除以下行前的注释:
%wheel   ALL=(ALL:ALL) NOPASSWD: ALL
退出到终点站:
exit

3.登录到容器

登录 到你创建的用户(在执行 bash 的方法不是登录,无法加载服务之前)。

运行lxc console arch ,然后直接输入用户名:

(termina) chronos@localhost /tmp $ lxc console arch
[<your-username>@arch ~]$

登录成功后 aur 上的cros-container-guest-tools-git 。由于需要从chromium.googlesource.com 下载文件,因此请自行解决 Android 子系统或 Chromium OS 里的代理设置不会应用到安装虚拟机。

git clone https://aur.archlinux.org/cros-container-guest-tools-git.git
cd cros-container-guest-tools-git
makepkg -i
#解决.config不存在导致没有设置默认浏览器的问题
mkdir ~/.config
xdg-settings set default-web-browser garcon_host_browser.desktop

解决 Arch Linux 里xkeyboard-config 更新导致Sommelier 不支持两个键码的打开问题/usr/share/X11/xkb/keycodes/evdev ,注释或删除<i372><i374> 大意的两行。

cros-container-guest-tools-git 支持 Chromium OS 最新版本,FyOS 暂时没有更新到 R71,x-auth 所以不需要文件(更新后就不用改了)

打开/usr/lib/systemd/user/sommelier-x@.service ,找到以下截图:

ExecStart=/opt/google/cros-containers/bin/sommelier \
              -X \
              --x-display=%i \
              --sd-notify="READY=1" \
              --no-exit-with-child \
              --x-auth=${HOME}/.Xauthority \
              /bin/sh -c \
                  "systemctl --user set-environment ${DISPLAY_VAR}=${DISPLAY}; \
                   systemctl --user set-environment ${XCURSOR_SIZE_VAR}=${XCURSOR_SIZE}; \
                   systemctl --user import-environment SOMMELIER_VERSION; \
                   touch ${HOME}/.Xauthority; \
                   xauth -f ${HOME}/.Xauthority add ${HOST}:%i . $(xxd -l 16 -p /dev/urandom); \
                   . /etc/sommelierrc"

改为

ExecStart=/opt/google/cros-containers/bin/sommelier \
              -X \
              --x-display=%i \
              --sd-notify="READY=1" \
              --no-exit-with-child \
              /bin/sh -c \
                  "systemctl --user set-environment ${DISPLAY_VAR}=${DISPLAY}; \
                   systemctl --user set-environment ${XCURSOR_SIZE_VAR}=${XCURSOR_SIZE}; \
                   systemctl --user import-environment SOMMELIER_VERSION; \
                   . /etc/sommelierrc"

启用的所有systemdcros-container-guest-tools-git 服务

sudo systemctl enable cros-sftp
systemctl --user enable sommelier@0.service
systemctl --user enable sommelier@1.service
systemctl --user enable sommelier-x@0.service
systemctl --user enable sommelier-x@1.service
systemctl --user enable cros-garcon.service

4.重命名

一些限制,目前 FydeOS 的 Linux(测试版)可以启用。因此,只需要集成penguin 的重命名容器(不要删除自带的 Debian 容器):

[<your-username>@arch ~]$ exit
#按下ctrl-A Q
(termina) chronos@localhost /tmp $ lxc stop arch
(termina) chronos@localhost /tmp $ lxc stop penguin
(termina) chronos@localhost /tmp $ lxc rename penguin debian
(termina) chronos@localhost /tmp $ lxc rename arch penguin

重启虚拟机:

sudo reboot

5.本地化

打开终端应用程序,几秒钟,Arch Linux 就启动了,做一些本地化:

设置时区:
sudo timedatectl set-timezone Asia/Shanghai
设置中文语言:

编辑/etc/locale.gen ,删除zh_CN.UTF-8 之前的注释。然后执行

sudo locale-gen

修改/etc/locale.conf

LANG="zh_CN.UTF-8"
LANGUAGE="zh_CN.UTF-8"
LC_CTYPE="zh_CN.UTF-8"
LC_NUMERIC="zh_CN.UTF-8"
LC_TIME="zh_CN.UTF-8"
LC_COLLATE="zh_CN.UTF-8"
LC_MONETARY="zh_CN.UTF-8"
LC_MESSAGES="zh_CN.UTF-8"
LC_PAPER="zh_CN.UTF-8"
LC_NAME="zh_CN.UTF-8"
LC_ADDRESS="zh_CN.UTF-8"
LC_TELEPHONE="zh_CN.UTF-8"
LC_MEASUREMENT="zh_CN.UTF-8"
LC_IDENTIFICATION="zh_CN.UTF-8"
安装字体、输入法、这里还安装了搜狗输入法,可能会出现bug,请酌情选择。
sudo pacman -S fcitx-im fcitx-configtool fcitx-sogoupinyin wqy-microhei

打开/usr/lib/systemd/user/cros-garcon.service.d/cros-garcon-override.conf

插件:

Environment="GTK_IM_MODULE=fcitx"
Environment="QT_IM_MODULE=fcitx"
Environment="XMODIFIERS=@im=fcitx"

执行:

echo /usr/bin/fcitx-autostart > $HOME/.sommelierrc

重容器:

sudo reboot

运行fcitx-config-gtk3 配置输入法。

3 个赞

教程中部分代码错误,请改正