-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlxc-create-new
138 lines (107 loc) · 3.72 KB
/
lxc-create-new
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
#!/bin/bash
eth0ipv4="1.2.3.4";
eth0prefix=32;
eth0gateway=`ip a |grep "scope global" | awk '{print$2}'|grep-ip |grep -v "255" |grep -v "^10."`
debian_version=bullseye
name=node01
memory=4G
disk=20G
# optional configuration (defaults used)
LVM=SPEED
cpus=0-1
br=br0
gpg_keyserver=keyserver.ubuntu.com
####################################################################
[ -d "/var/lib/lxc/${name}" ] && echo "/var/lib/lxc/${name} exists, exiting..." && exit 1
[ "${gpg_keyserver}" == "" ] && gpg_keyserver=keyserver.ubuntu.com
export DOWNLOAD_KEYSERVER=${gpg_keyserver}
lxcstart=`which lxc-start`
[ "${lxcstart}" == "" ] && apt-get update && apt-get -y install lxc
brctl=`which brctl`
[ "$brctl" == "" ] && apt-get update && apt-get -y install bridge-utils xfsprogs iproute2 lvm2
#echo 'USE_LXC_BRIDGE="true"' > /etc/default/lxc-net
#systemctl start lxc-net
lvm_vg=`pvs |grep -v 'PFree' |grep -vi 'slow' |awk '{print$2}'`
[ "${LVM}" == "" ] && LVM=${lvm_vg}
cpu_cores=`cat /proc/cpuinfo |grep 'processor' | tail -n +2 |wc -l`
[ "${cpus}" == "" ] && cpus="0-${cpu_cores}"
br_if=`brctl show | grep -v 'bridge name' |awk '{print$1}'`
[ "${br}" == "" ] && br=$br_if
lvcreate -n ${name} -L${disk} ${LVM}
mkfs.xfs /dev/${LVM}/${name}
mkdir -p /var/lib/lxc/${name}
echo "/dev/${LVM}/${name} /var/lib/lxc/${name} xfs auto,nofail,noatime,rw 0 0" >> /etc/fstab
mount /dev/${LVM}/${name}
df -h
echo "lxc-start --name ${name}" >> /etc/rc.local
lxc-create -n ${name} -t download -- -d debian -r ${debian_version} -a amd64
if [ -z ${eth0ipv4+x} ]
then
echo "no eth0"
else
if [ "${eth0prefix}" -eq "32" ]
then
#cat >> /etc/network/interfaces <<EOF
#up ip route add ${eth0ipv4}/${eth0prefix} dev ${br}
#EOF
cat >> /etc/rc.local <<EOF
ip route add ${eth0ipv4}/${eth0prefix} dev ${br}
EOF
else
echo "prefix is: ${eth0prefix}";
fi
fi
mkdir -p /backup/lxc/${name}
cat > /var/lib/lxc/${name}/config <<EOF
lxc.start.auto = 1
lxc.uts.name = ${name}
lxc.cgroup.memory.limit_in_bytes = ${memory}
lxc.cgroup.cpuset.cpus = ${cpus}
lxc.rootfs.path = /var/lib/lxc/${name}/rootfs
EOF
if [ "${debian_version}" == "bullseye" ] || [ "${debian_version}" == "bookworm" ]
then
cat >> /var/lib/lxc/${name}/config <<EOF
lxc.include = /usr/share/lxc/config/common.conf
EOF
else
cat >> /var/lib/lxc/${name}/config <<EOF
lxc.include = /usr/share/lxc/config/debian.common.conf
EOF
fi
cat >> /var/lib/lxc/${name}/config <<EOF
#lxc.mount.fstab = /var/lib/lxc/${name}/fstab
lxc.arch = amd64
lxc.autodev = 1
lxc.apparmor.profile = unconfined
lxc.cgroup.devices.allow = a
lxc.cap.drop=
lxc.mount.auto=proc:rw sys:rw
linux.kernel_modules = ip_tables,ip6_tables,br_netfilter,netlink_diag,nf_nat,overlay
security.privileged = 1
security.nesting = 1
lxc.mount.entry = /backup/lxc/${name} backup none bind,create=dir 0 0
lxc.net.0.type = veth
lxc.net.0.flags = up
lxc.net.0.name = eth0
lxc.net.0.link = ${br}
lxc.net.0.ipv4.address = ${eth0ipv4}/${eth0prefix}
lxc.net.0.ipv4.gateway = ${eth0gateway}
EOF
rm -f /var/lib/lxc/${name}/rootfs/etc/network/interfaces
ip route add ${eth0ipv4}/${eth0prefix} dev ${br}
#copy ssh keys
rsync -avP /root/.ssh /var/lib/lxc/${name}/rootfs/root/
rsync -avP /etc/resolv.conf /var/lib/lxc/${name}/rootfs/etc/
mkdir /var/lib/lxc/${name}/rootfs/etc/docker
cat > /var/lib/lxc/${name}/rootfs/etc/docker/daemon.json <<EOF
{
"storage-driver": "overlay2"
}
EOF
chroot /var/lib/lxc/${name}/rootfs/ /bin/bash -c "rm -f /etc/resolv.conf; echo 'nameserver 8.8.8.8' > /etc/resolv.conf; apt-get update; apt-get -y install ssh gpg curl vim wget screen git; systemctl disable systemd-networkd systemd-networkd-wait-online systemd-resolved.service; "
echo "DONE:"
df -h |grep ${name}
lxc-ls -f |grep ${name}
echo "check config: /var/lib/lxc/${name}/config"
echo "start server: lxc-start ${name}"