Skip to content
This repository has been archived by the owner on Nov 1, 2023. It is now read-only.

Latest commit

 

History

History
107 lines (89 loc) · 3.3 KB

LXC.org

File metadata and controls

107 lines (89 loc) · 3.3 KB

LXC

安装

CentOS 7

在 RHEL 7下用 LXC 会被 SELinux 干很惨。真的很惨。当然可以关、可以 allow2audit 大 法。但是按照默认的标签它要访问 device_t 和 sys_t,太恐怖了。我自己维护标签又不知 道哪天又出错。官方支持 Docker,无论我对它有多少意见我也没办法了。如果它还不行我 就 干它娘的RHEL netns 洗洗睡搞你妹

sudo yum -y install lxc lxc-templates libcap-devel libcgroup wget bridge-utils
sudo lxc-checkconfig
sudo systemctl enable lxc

SELinux

mkdir -p /tmp/src
cd /tmp/src
cp -r /usr/share/lxc/selinux/ lxc-selinux
cd lxc-selinux
make -f /usr/share/selinux/devel/Makefile lxc.pp
sudo semodule -i lxc.pp
sudo semanage fcontext -a -t lxc_file_t '/var/lib/lxc/[^/]*/rootfs'
sudo semanage fcontext -a -t lxc_file_t '/var/lib/lxc/[^/]*/rootfs/.*'
# 之前出现的玄学错误:/dev/null不可写,是因为rootfs.dev被标记为错误类型
# 之前只有一条
# sudo semanage fcontext -a -t lxc_file_t '/var/lib/lxc/[^/]*/rootfs(/.*)?'
# regex博大精深,我只是过路的,于是干脆拆两条

Debian

sudo apt-get install -y lxc

(Debian相关)AppArmor配置

并不想装AppArmor和SELinux。他们是好东西,但是我还不会,而且每个人学起来都费力。 而且Debian上的默认AppArmor配置似乎有点问题。

总之对于Debian上的LXC而言,无论用不用AppArmor,都需要

grep -q 'lxc.aa_allow_incomplete' /etc/lxc/default.conf || \
  (echo "lxc.aa_allow_incomplete = 1" | sudo tee /etc/lxc/default.conf)

CentOS 7 container on CentOS 7

name=
sudo lxc-create -n $name -t -t download -- -d centos -r 7 -a amd64
sudo lxc-start -d -n $name
sudo lxc-attach -n $name

Debian on Debian

NAME=容器名
PINF=enp4s0
STORAGE_OPTS="-B lvm --lvname $NAME --vgname base-vg --fssize 1G --fstype ext4"
OTHER_OPTS=""
TMPL=debian
TMPL_OPTS="--enable-non-free --mirror=https://mirrors.tuna.tsinghua.edu.cn/debian/ --security-mirror=https://mirrors.tuna.tsinghua.edu.cn/debian-security/ --packages=iputils-ping,vim-tiny,bash-completion,sudo"

IP4=IPv4地址/前缀
GW4=IPv4网关
IP6=IPv6地址/前缀
GW6=IPv6网关
cat <<EOF >/tmp/lxc-$NAME.conf
lxc.network.0.type=macvlan
lxc.network.0.macvlan.mode=bridge
lxc.network.0.flags=up
lxc.network.0.link=$PINF
lxc.network.0.ipv4=$IP4
lxc.network.0.ipv4.gateway=$GW4
lxc.network.0.ipv6=$IP6
lxc.network.0.ipv6.gateway=$GW6
lxc.start.auto=1
EOF
sudo lxc-create -n $NAME -f /tmp/lxc-$NAME.conf\
  $STORAGE_OPTS $OTHER_OPTS\
  -t $TMPL -- $TMPL_OPTS
sudo lxc-start -n $NAME # 如果出问题,加-F前台启动看一下。不过没有密码所以没法登录
sudo lxc-attach -n $NAME -- sed -i 's/dhcp/manual/g' /etc/network/interfaces
sudo lxc-attach -n $NAME -- mkdir -p /root/.ssh
cat ~/.ssh/authorized_keys | sudo lxc-attach -n $NAME -- bash -c 'cat >/root/.ssh/authorized_keys'
sudo lxc-attach -n $NAME -- chmod -R go-rwx /root/.ssh
cat <<EOF | sudo sudo lxc-attach -n $NAME -- tee /etc/sysctl.d/100-no-ra.conf
net.ipv6.conf.eth0.accept_ra=0
EOF

sudo lxc-stop -n $NAME
sudo lxc-start -n $NAME
sudo lxc-attach -n $NAME