如何在 Ubuntu18.04 上作为 LXC 容器运行 android_x86 系统不是应用程序? 不要用Anbox、VM工具,直接用LCX

问题描述

我尝试在 Ubuntu18.04 上创建一个 android_x86 系统。我知道 VM 工具(VirtualBox)和 AnBox 可以做到,但我想直接使用 LXC。我参考 https://stgraber.org/2013/12/23/lxc-1-0-some-more-advanced-container-usage/ 创建并启动一个 android_x86 LXC 容器,但在日志文件中发现了一些错误

步骤如下 1、sudo apt install -y lxc-utils 2、mkdir -p /var/lib/lxc/android_x86 3、cd /var/lib/lxc/android_x86 3、创建配置文件内容如下:

# Template used to create this container: /usr/share/lxc/templates/lxc-busyBox
# Parameters passed to the template:
# Template script checksum (SHA-1): 21abc1440b73cdb95d96d5459b27c3a87df9976f
# For additional config options,please look at lxc.container.conf(5)

# Uncomment the following line to support nesting containers:
#lxc.include = /usr/share/lxc/config/nesting.conf
# (Be aware this has security implications)

lxc.net.0.type = veth
lxc.net.0.link = lxcbr0
lxc.net.0.flags = up
lxc.net.0.hwaddr = 00:16:3e:a8:2a:e7
lxc.arch = armhf
lxc.rootfs.path = dir:/var/lib/lxc/android_x86/rootfs
lxc.hook.pre-start = /var/lib/lxc/android_x86/pre_start.sh
lxc.uts.name = "android_x86"

4、创建pre_start.sh脚本,内容如下:

#!/bin/bash
LXC_ROOTFS_PATH=/var/lib/lxc/android_x86/rootfs
mkdir -p $LXC_ROOTFS_PATH
mount -n -t tmpfs tmpfs $LXC_ROOTFS_PATH

cd $LXC_ROOTFS_PATH
cat /var/lib/lxc/android_x86/initrd.gz | gzip -d | cpio -i

# Create /dev/pts if missing
mkdir -p $LXC_ROOTFS_PATH/dev/pts

5、initrd.gz是从https://build.anbox.io/android-images/2018/07/19/android_amd64.img下载的 6、lxc-ls会显示一个android_x86容器 7、启动android_x86容器:lxc-start -F -n android_x86 -o ./log -l DEBUG /init 将创建一个 rootfs 目录。 8、登录如下:

lxc-start android_x86 20210514095449.533 INFO     lsm - lsm/lsm.c:lsm_init:50 - LSM security driver AppArmor
lxc-start android_x86 20210514095449.533 INFO     conf - conf.c:run_script_argv:356 - Executing script "/var/lib/lxc/android_x86/pre_start.sh" for container "android_x86",config section "lxc"
lxc-start android_x86 20210514095449.570 DEBUG    conf - conf.c:run_buffer:326 - Script exec /var/lib/lxc/android_x86/pre_start.sh android_x86 lxc pre-start with output: 5418 blocks

lxc-start android_x86 20210514095449.571 DEBUG    terminal - terminal.c:lxc_terminal_peer_default:714 - Using terminal "/dev/tty" as proxy
lxc-start android_x86 20210514095449.571 DEBUG    terminal - terminal.c:lxc_terminal_signal_init:192 - Created signal fd 9
lxc-start android_x86 20210514095449.571 DEBUG    terminal - terminal.c:lxc_terminal_winsz:90 - Set window size to 236 columns and 39 rows
lxc-start android_x86 20210514095449.572 INFO     start - start.c:lxc_init:897 - Container "android_x86" is initialized
lxc-start android_x86 20210514095449.577 INFO     network - network.c:instantiate_veth:147 - Retrieved mtu 1500 from lxcbr0
lxc-start android_x86 20210514095449.590 INFO     network - network.c:instantiate_veth:175 - Attached "vethJKQDJ0" to bridge "lxcbr0"
lxc-start android_x86 20210514095449.590 DEBUG    network - network.c:instantiate_veth:201 - Instantiated veth "vethJKQDJ0/vethFUCPKJ",index is "6"
lxc-start android_x86 20210514095449.591 DEBUG    cgfsng - cgroups/cgfsng.c:cg_legacy_handle_cpuset_hierarchy:620 - "cgroup.clone_children" was already set to "1"
lxc-start android_x86 20210514095449.591 INFO     start - start.c:lxc_spawn:1688 - Cloned CLONE_NEWNS
lxc-start android_x86 20210514095449.591 INFO     start - start.c:lxc_spawn:1688 - Cloned CLONE_NEWPID
lxc-start android_x86 20210514095449.591 INFO     start - start.c:lxc_spawn:1688 - Cloned CLONE_NEWUTS
lxc-start android_x86 20210514095449.591 INFO     start - start.c:lxc_spawn:1688 - Cloned CLONE_NEWIPC
lxc-start android_x86 20210514095449.591 INFO     start - start.c:lxc_spawn:1688 - Cloned CLONE_NEWNET
lxc-start android_x86 20210514095449.591 DEBUG    start - start.c:lxc_try_preserve_namespaces:196 - Preserved mnt namespace via fd 15
lxc-start android_x86 20210514095449.591 DEBUG    start - start.c:lxc_try_preserve_namespaces:196 - Preserved pid namespace via fd 16
lxc-start android_x86 20210514095449.591 DEBUG    start - start.c:lxc_try_preserve_namespaces:196 - Preserved uts namespace via fd 17
lxc-start android_x86 20210514095449.591 DEBUG    start - start.c:lxc_try_preserve_namespaces:196 - Preserved ipc namespace via fd 18
lxc-start android_x86 20210514095449.591 DEBUG    start - start.c:lxc_try_preserve_namespaces:196 - Preserved net namespace via fd 19
lxc-start android_x86 20210514095449.592 DEBUG    start - start.c:lxc_spawn:1742 - Preserved net namespace via fd 10
lxc-start android_x86 20210514095449.614 DEBUG    network - network.c:lxc_network_move_created_netdev_priv:2500 - Moved network device "vethFUCPKJ"/"(null)" to network namespace of 2408
lxc-start android_x86 20210514095449.614 INFO     start - start.c:do_start:1242 - Unshared CLONE_NEWCGROUP
lxc-start android_x86 20210514095449.614 DEBUG    storage - storage/storage.c:get_storage_by_name:231 - Detected rootfs type "dir"
lxc-start android_x86 20210514095449.614 DEBUG    conf - conf.c:lxc_mount_rootfs:1332 - Mounted rootfs "/var/lib/lxc/android_x86/rootfs" onto "/usr/lib/x86_64-linux-gnu/lxc" with options "(null)"
lxc-start android_x86 20210514095449.614 INFO     conf - conf.c:setup_utsname:791 - Set hostname to "android_x86"
lxc-start android_x86 20210514095449.615 DEBUG    network - network.c:setup_hw_addr:2767 - Mac address "00:16:3e:a8:2a:e7" on "eth0" has been setup
lxc-start android_x86 20210514095449.615 DEBUG    network - network.c:lxc_setup_netdev_in_child_namespaces:3032 - Network device "eth0" has been setup
lxc-start android_x86 20210514095449.615 INFO     network - network.c:lxc_setup_network_in_child_namespaces:3053 - network has been setup
lxc-start android_x86 20210514095449.615 INFO     conf - conf.c:mount_autodev:1118 - Preparing "/dev"
lxc-start android_x86 20210514095449.615 INFO     conf - conf.c:mount_autodev:1165 - Prepared "/dev"
lxc-start android_x86 20210514095449.615 INFO     conf - conf.c:lxc_fill_autodev:1209 - Populating "/dev"
lxc-start android_x86 20210514095449.615 DEBUG    conf - conf.c:lxc_fill_autodev:1224 - Created device node "/usr/lib/x86_64-linux-gnu/lxc/dev/full"
lxc-start android_x86 20210514095449.615 DEBUG    conf - conf.c:lxc_fill_autodev:1224 - Created device node "/usr/lib/x86_64-linux-gnu/lxc/dev/null"
lxc-start android_x86 20210514095449.615 DEBUG    conf - conf.c:lxc_fill_autodev:1224 - Created device node "/usr/lib/x86_64-linux-gnu/lxc/dev/random"
lxc-start android_x86 20210514095449.615 DEBUG    conf - conf.c:lxc_fill_autodev:1224 - Created device node "/usr/lib/x86_64-linux-gnu/lxc/dev/tty"
lxc-start android_x86 20210514095449.615 DEBUG    conf - conf.c:lxc_fill_autodev:1224 - Created device node "/usr/lib/x86_64-linux-gnu/lxc/dev/urandom"
lxc-start android_x86 20210514095449.615 DEBUG    conf - conf.c:lxc_fill_autodev:1224 - Created device node "/usr/lib/x86_64-linux-gnu/lxc/dev/zero"
lxc-start android_x86 20210514095449.615 INFO     conf - conf.c:lxc_fill_autodev:1286 - Populated "/dev"
lxc-start android_x86 20210514095449.615 DEBUG    conf - conf.c:lxc_setup_dev_console:1771 - Mounted pts device "/dev/pts/2" onto "/usr/lib/x86_64-linux-gnu/lxc/dev/console"
lxc-start android_x86 20210514095449.615 INFO     utils - utils.c:lxc_mount_proc_if_needed:1253 - Mounted /proc in container for security transition
lxc-start android_x86 20210514095449.615 DEBUG    conf - conf.c:lxc_setup_devpts:1605 - No new devpts instance will be mounted since no pts devices are requested
lxc-start android_x86 20210514095449.615 INFO     conf - conf.c:lxc_setup_ttys:949 - Finished setting up 0 /dev/tty<N> device(s)
lxc-start android_x86 20210514095449.615 INFO     conf - conf.c:setup_personality:1716 - Set personality to "0x8"
lxc-start android_x86 20210514095449.615 DEBUG    conf - conf.c:setup_caps:2506 - Capabilities have been setup
lxc-start android_x86 20210514095449.615 NOTICE   conf - conf.c:lxc_setup:3692 - The container "android_x86" is set up
lxc-start android_x86 20210514095449.615 INFO     lsm - lsm/lsm.c:lsm_process_label_set_at:178 - Set AppArmor label to "lxc-container-default-cgns"
lxc-start android_x86 20210514095449.615 INFO     apparmor - lsm/apparmor.c:apparmor_process_label_set:249 - Changed apparmor profile to lxc-container-default-cgns
lxc-start android_x86 20210514095449.615 DEBUG    start - start.c:lxc_spawn:1817 - Preserved cgroup namespace via fd 20
lxc-start android_x86 20210514095449.615 NOTICE   utils - utils.c:lxc_setgroups:1400 - Dropped additional groups
lxc-start android_x86 20210514095449.615 NOTICE   start - start.c:start:2025 - Exec'ing "/init"
lxc-start android_x86 20210514095449.620 NOTICE   start - start.c:post_start:2036 - Started "/init" with pid "2408"
lxc-start android_x86 20210514095449.646 DEBUG    start - start.c:signal_handler:447 - Container init process 2408 exited
lxc-start android_x86 20210514095449.659 WARN     network - network.c:lxc_delete_network_priv:2589 - Operation not permitted - Failed to remove interface "eth0" with index 6
lxc-start android_x86 20210514095449.659 DEBUG    network - network.c:lxc_delete_network:3180 - Deleted network devices

似乎 init 进程执行失败。我对android不熟悉,难道我只需要initrd.gz就可以调出android系统吗?我会感谢任何人的建议!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)