lxc-altlinux.in revision 3d5658d167db8866d5cd3b4b89f0e4becc735719
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher#!/bin/bash
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher#
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher# template script for generating altlinux container for LXC
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher#
a7797068c4deb6ce2bdbcda27c45ff1bbb4a8e78Jakub Hrozek
b20208b80e99abb79c00d5ec526caa9465859c52Jakub Hrozek#
a7797068c4deb6ce2bdbcda27c45ff1bbb4a8e78Jakub Hrozek# lxc: linux Container library
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher# Authors:
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher# Alexey Shabalin <shaba@altlinux.org>
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher
a7797068c4deb6ce2bdbcda27c45ff1bbb4a8e78Jakub Hrozek# This library is free software; you can redistribute it and/or
a7797068c4deb6ce2bdbcda27c45ff1bbb4a8e78Jakub Hrozek# modify it under the terms of the GNU Lesser General Public
a9228ebcce14888b3123bdf46e610e0900bcd2ccJakub Hrozek# License as published by the Free Software Foundation; either
a7797068c4deb6ce2bdbcda27c45ff1bbb4a8e78Jakub Hrozek# version 2.1 of the License, or (at your option) any later version.
a7797068c4deb6ce2bdbcda27c45ff1bbb4a8e78Jakub Hrozek
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher# This library is distributed in the hope that it will be useful,
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher# but WITHOUT ANY WARRANTY; without even the implied warranty of
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher# Lesser General Public License for more details.
7a14e8f66c0e932fe2954d792614a3b61d444bd1Jakub Hrozek
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher# You should have received a copy of the GNU Lesser General Public
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher# License along with this library; if not, write to the Free Software
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher
65a9065538fd85e6ead925d344e6b421900eb8c2Jakub Hrozek# Detect use under userns (unsupported)
65a9065538fd85e6ead925d344e6b421900eb8c2Jakub Hrozekfor arg in "$@"; do
65a9065538fd85e6ead925d344e6b421900eb8c2Jakub Hrozek [ "$arg" = "--" ] && break
65a9065538fd85e6ead925d344e6b421900eb8c2Jakub Hrozek if [ "$arg" = "--mapped-uid" -o "$arg" = "--mapped-gid" ]; then
a23014d69b56cbdf48ad05229c334648b5309d8fJakub Hrozek echo "This template can't be used for unprivileged containers." 1>&2
2ea6196484055397cc4bc011c5960f790431fa9dStephen Gallagher echo "You may want to try the \"download\" template instead." 1>&2
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher exit 1
2ea6196484055397cc4bc011c5960f790431fa9dStephen Gallagher fi
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagherdone
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher# Make sure the usual locations are in PATH
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagherexport PATH=$PATH:/usr/sbin:/usr/bin:/sbin:/bin
2ea6196484055397cc4bc011c5960f790431fa9dStephen Gallagher
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher#Configurations
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagherarch=$(uname -m)
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallaghercache_base=@LOCALSTATEDIR@/cache/lxc/altlinux/$arch
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagherdefault_path=@LXCPATH@
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagherdefault_profile=default
2ea6196484055397cc4bc011c5960f790431fa9dStephen Gallagherprofile_dir=/etc/lxc/profiles
65a9065538fd85e6ead925d344e6b421900eb8c2Jakub Hrozekroot_password=rooter
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagherlxc_network_type=veth
2ea6196484055397cc4bc011c5960f790431fa9dStephen Gallagherlxc_network_link=virbr0
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher# is this altlinux?
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher[ -f /etc/altlinux-release ] && is_altlinux=true
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher
2ea6196484055397cc4bc011c5960f790431fa9dStephen Gallagherconfigure_altlinux()
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher{
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher # disable selinux in altlinux
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher mkdir -p $rootfs_path/selinux
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher echo 0 > $rootfs_path/selinux/enforce
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher mkdir -p ${rootfs_path}/etc/net/ifaces/eth0
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher cat <<EOF > ${rootfs_path}/etc/net/ifaces/eth0/options
2ea6196484055397cc4bc011c5960f790431fa9dStephen GallagherBOOTPROTO=${BOOTPROTO}
2ea6196484055397cc4bc011c5960f790431fa9dStephen GallagherONBOOT=yes
2ea6196484055397cc4bc011c5960f790431fa9dStephen GallagherNM_CONTROLLED=yes
52261fe16203dec6e6f69177c6d0a810b47d073fStephen GallagherTYPE=eth
52261fe16203dec6e6f69177c6d0a810b47d073fStephen GallagherEOF
a7797068c4deb6ce2bdbcda27c45ff1bbb4a8e78Jakub Hrozek
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagherif [ ${BOOTPROTO} != "dhcp" ]; then
65a9065538fd85e6ead925d344e6b421900eb8c2Jakub Hrozek # ip address
65a9065538fd85e6ead925d344e6b421900eb8c2Jakub Hrozek cat <<EOF > ${rootfs_path}/etc/net/ifaces/eth0/ipv4address
65a9065538fd85e6ead925d344e6b421900eb8c2Jakub Hrozek${ipv4}
65a9065538fd85e6ead925d344e6b421900eb8c2Jakub HrozekEOF
a23014d69b56cbdf48ad05229c334648b5309d8fJakub Hrozek
2ea6196484055397cc4bc011c5960f790431fa9dStephen Gallagher cat <<EOF > ${rootfs_path}/etc/net/ifaces/eth0/ipv4route
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher${gw}
2ea6196484055397cc4bc011c5960f790431fa9dStephen GallagherEOF
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher cat <<EOF > ${rootfs_path}/etc/net/ifaces/eth0/resolv.conf
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallaghernameserver ${dns}
52261fe16203dec6e6f69177c6d0a810b47d073fStephen GallagherEOF
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher cat <<EOF > ${rootfs_path}/etc/net/ifaces/eth0/ipv6address
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher${ipv6}
2ea6196484055397cc4bc011c5960f790431fa9dStephen GallagherEOF
2ea6196484055397cc4bc011c5960f790431fa9dStephen Gallagher
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher cat <<EOF > ${rootfs_path}/etc/net/ifaces/eth0/ipv6route
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher${gw6}
a7797068c4deb6ce2bdbcda27c45ff1bbb4a8e78Jakub HrozekEOF
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagherfi
65a9065538fd85e6ead925d344e6b421900eb8c2Jakub Hrozek
ea929f1b022fc2cb77dec89b0e12accef983ec85Jakub Hrozek # set the hostname
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher cat <<EOF > ${rootfs_path}/etc/sysconfig/network
2ea6196484055397cc4bc011c5960f790431fa9dStephen GallagherNETWORKING=yes
52261fe16203dec6e6f69177c6d0a810b47d073fStephen GallagherCONFMETHOD=etcnet
52261fe16203dec6e6f69177c6d0a810b47d073fStephen GallagherHOSTNAME=${UTSNAME}
52261fe16203dec6e6f69177c6d0a810b47d073fStephen GallagherRESOLV_MODS=yes
52261fe16203dec6e6f69177c6d0a810b47d073fStephen GallagherEOF
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher # set minimal hosts
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher cat <<EOF > $rootfs_path/etc/hosts
2ea6196484055397cc4bc011c5960f790431fa9dStephen Gallagher127.0.0.1 localhost.localdomain localhost $name
2ea6196484055397cc4bc011c5960f790431fa9dStephen GallagherEOF
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher # Allow to login at virsh console. loginuid.so doen't work in the absence of auditd.
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher# sed -i 's/^.*loginuid.so.*$/\#&/' ${rootfs_path}/etc/pam.d/common-login
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher # Allow root to login at virsh console
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher echo "pts/0" >> ${rootfs_path}/etc/securetty
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher echo "console" >> ${rootfs_path}/etc/securetty
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher # Enable services
2ea6196484055397cc4bc011c5960f790431fa9dStephen Gallagher for service in network syslogd random NetworkManager
2ea6196484055397cc4bc011c5960f790431fa9dStephen Gallagher do
2ea6196484055397cc4bc011c5960f790431fa9dStephen Gallagher chroot ${rootfs_path} chkconfig $service --list &>/dev/null && chroot ${rootfs_path} chkconfig $service on || true
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher # For systemd
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher chroot ${rootfs_path} systemctl -q enable $service &>/dev/null|| true
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher done
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher # Disable services
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher for service in rawdevices fbsetfont
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher do
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher chroot ${rootfs_path} chkconfig $service --list &>/dev/null && chroot ${rootfs_path} chkconfig $service off || true
2ea6196484055397cc4bc011c5960f790431fa9dStephen Gallagher chroot ${rootfs_path} systemctl -q disable $service &>/dev/null || true
2ea6196484055397cc4bc011c5960f790431fa9dStephen Gallagher done
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher subst 's/^\([3-9]\+:[0-9]\+:respawn:\/sbin\/mingetty.*\)/#\1/' ${rootfs_path}/etc/inittab
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher echo "c1:2345:respawn:/sbin/mingetty --noclear console" >> ${rootfs_path}/etc/inittab
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher [ -f "${rootfs_path}/etc/syslog.conf" ] && \
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher subst 's,\/dev\/tty12,/var/log/syslog/console,' ${rootfs_path}/etc/syslog.conf
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher
2ea6196484055397cc4bc011c5960f790431fa9dStephen Gallagher dev_path="${rootfs_path}/dev"
2ea6196484055397cc4bc011c5960f790431fa9dStephen Gallagher rm -rf ${dev_path}
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher mkdir -p ${dev_path}
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher mknod -m 666 ${dev_path}/null c 1 3
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher mknod -m 666 ${dev_path}/zero c 1 5
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher mknod -m 644 ${dev_path}/random c 1 8
2ea6196484055397cc4bc011c5960f790431fa9dStephen Gallagher mknod -m 644 ${dev_path}/urandom c 1 9
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher mkdir -m 755 ${dev_path}/pts
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher mkdir -m 1777 ${dev_path}/shm
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher mknod -m 666 ${dev_path}/tty c 5 0
65a9065538fd85e6ead925d344e6b421900eb8c2Jakub Hrozek chown root:tty ${dev_path}/tty
a23014d69b56cbdf48ad05229c334648b5309d8fJakub Hrozek mknod -m 600 ${dev_path}/tty0 c 4 0
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher mknod -m 600 ${dev_path}/tty1 c 4 1
2ea6196484055397cc4bc011c5960f790431fa9dStephen Gallagher mknod -m 600 ${dev_path}/tty2 c 4 2
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher mknod -m 600 ${dev_path}/tty3 c 4 3
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher mknod -m 600 ${dev_path}/tty4 c 4 4
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher mknod -m 600 ${dev_path}/console c 5 1
65a9065538fd85e6ead925d344e6b421900eb8c2Jakub Hrozek mknod -m 666 ${dev_path}/full c 1 7
a23014d69b56cbdf48ad05229c334648b5309d8fJakub Hrozek mknod -m 600 ${dev_path}/initctl p
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher mknod -m 666 ${dev_path}/ptmx c 5 2
2ea6196484055397cc4bc011c5960f790431fa9dStephen Gallagher chown root:tty ${dev_path}/ptmx
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher ln -s /proc/self/fd ${dev_path}/fd
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher ln -s /proc/kcore ${dev_path}/core
a23014d69b56cbdf48ad05229c334648b5309d8fJakub Hrozek mkdir -m 755 ${dev_path}/mapper
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher mknod -m 600 ${dev_path}/mapper/control c 10 236
2ea6196484055397cc4bc011c5960f790431fa9dStephen Gallagher mkdir -m 755 ${dev_path}/net
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher mknod -m 666 ${dev_path}/net/tun c 10 200
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher echo "setting root passwd to $root_password"
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher echo "root:$root_password" | chroot $rootfs_path chpasswd
2ea6196484055397cc4bc011c5960f790431fa9dStephen Gallagher
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher return 0
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher}
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagherdownload_altlinux()
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher{
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher # check the mini altlinux was not already downloaded
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher INSTALL_ROOT=$cache/partial
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher mkdir -p $INSTALL_ROOT
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher if [ $? -ne 0 ]; then
2ea6196484055397cc4bc011c5960f790431fa9dStephen Gallagher echo "Failed to create '$INSTALL_ROOT' directory"
2ea6196484055397cc4bc011c5960f790431fa9dStephen Gallagher return 1
2ea6196484055397cc4bc011c5960f790431fa9dStephen Gallagher fi
2ea6196484055397cc4bc011c5960f790431fa9dStephen Gallagher
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher # download a mini altlinux into a cache
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher echo "Downloading altlinux minimal ..."
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher APT_GET="apt-get -o RPM::RootDir=$INSTALL_ROOT -y"
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher PKG_LIST="$(grep -hs '^[^#]' "$profile_dir/$profile")"
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher # if no configuration file $profile -- fall back to default list of packages
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher [ -z "$PKG_LIST" ] && PKG_LIST="interactivesystem apt apt-conf etcnet-full openssh-server systemd-sysvinit systemd-units systemd NetworkManager-daemon"
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher mkdir -p $INSTALL_ROOT/var/lib/rpm
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher rpm --root $INSTALL_ROOT --initdb
2ea6196484055397cc4bc011c5960f790431fa9dStephen Gallagher
2ea6196484055397cc4bc011c5960f790431fa9dStephen Gallagher # some scripts want to have /dev/null at least
2ea6196484055397cc4bc011c5960f790431fa9dStephen Gallagher dev_path="$INSTALL_ROOT/dev"
2ea6196484055397cc4bc011c5960f790431fa9dStephen Gallagher if [ ! -c "${dev_path}/null" ]; then
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher mkdir -p "${dev_path}"
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher mknod -m 666 "${dev_path}/null" c 1 3
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher fi
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher $APT_GET install $PKG_LIST
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher if [ $? -ne 0 ]; then
2ea6196484055397cc4bc011c5960f790431fa9dStephen Gallagher echo "Failed to download the rootfs, aborting."
2ea6196484055397cc4bc011c5960f790431fa9dStephen Gallagher return 1
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher fi
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher mv "$INSTALL_ROOT" "$cache/rootfs"
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher echo "Download complete."
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher
dd3ba5c5b7d2a9d109963ae9e6c94fff34872221Stephen Gallagher return 0
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher}
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallaghercopy_altlinux()
dd3ba5c5b7d2a9d109963ae9e6c94fff34872221Stephen Gallagher{
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher # make a local copy of the minialtlinux
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher echo -n "Copying rootfs to $rootfs_path ..."
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher #cp -a $cache/rootfs-$arch $rootfs_path || return 1
2ea6196484055397cc4bc011c5960f790431fa9dStephen Gallagher # i prefer rsync (no reason really)
2ea6196484055397cc4bc011c5960f790431fa9dStephen Gallagher mkdir -p $rootfs_path
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher rsync -Ha $cache/rootfs/ $rootfs_path/
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher return 0
dd3ba5c5b7d2a9d109963ae9e6c94fff34872221Stephen Gallagher}
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagherupdate_altlinux()
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher{
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher chroot $cache/rootfs apt-get update
2ea6196484055397cc4bc011c5960f790431fa9dStephen Gallagher chroot $cache/rootfs apt-get -y dist-upgrade
2ea6196484055397cc4bc011c5960f790431fa9dStephen Gallagher}
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagherinstall_altlinux()
dd3ba5c5b7d2a9d109963ae9e6c94fff34872221Stephen Gallagher{
a23014d69b56cbdf48ad05229c334648b5309d8fJakub Hrozek mkdir -p @LOCALSTATEDIR@/lock/subsys/
a7797068c4deb6ce2bdbcda27c45ff1bbb4a8e78Jakub Hrozek (
a23014d69b56cbdf48ad05229c334648b5309d8fJakub Hrozek flock -x 9
a23014d69b56cbdf48ad05229c334648b5309d8fJakub Hrozek if [ $? -ne 0 ]; then
a23014d69b56cbdf48ad05229c334648b5309d8fJakub Hrozek echo "Cache repository is busy."
a23014d69b56cbdf48ad05229c334648b5309d8fJakub Hrozek return 1
a23014d69b56cbdf48ad05229c334648b5309d8fJakub Hrozek fi
a23014d69b56cbdf48ad05229c334648b5309d8fJakub Hrozek
a23014d69b56cbdf48ad05229c334648b5309d8fJakub Hrozek echo "Checking cache download in $cache/rootfs ... "
a23014d69b56cbdf48ad05229c334648b5309d8fJakub Hrozek if [ ! -e "$cache/rootfs" ]; then
a23014d69b56cbdf48ad05229c334648b5309d8fJakub Hrozek download_altlinux
a23014d69b56cbdf48ad05229c334648b5309d8fJakub Hrozek if [ $? -ne 0 ]; then
a23014d69b56cbdf48ad05229c334648b5309d8fJakub Hrozek echo "Failed to download 'altlinux base'"
a23014d69b56cbdf48ad05229c334648b5309d8fJakub Hrozek return 1
a23014d69b56cbdf48ad05229c334648b5309d8fJakub Hrozek fi
a23014d69b56cbdf48ad05229c334648b5309d8fJakub Hrozek else
a23014d69b56cbdf48ad05229c334648b5309d8fJakub Hrozek echo "Cache found. Updating..."
a23014d69b56cbdf48ad05229c334648b5309d8fJakub Hrozek update_altlinux
a23014d69b56cbdf48ad05229c334648b5309d8fJakub Hrozek if [ $? -ne 0 ]; then
a23014d69b56cbdf48ad05229c334648b5309d8fJakub Hrozek echo "Failed to update 'altlinux base', continuing with last known good cache"
a23014d69b56cbdf48ad05229c334648b5309d8fJakub Hrozek else
a23014d69b56cbdf48ad05229c334648b5309d8fJakub Hrozek echo "Update finished"
a23014d69b56cbdf48ad05229c334648b5309d8fJakub Hrozek fi
a23014d69b56cbdf48ad05229c334648b5309d8fJakub Hrozek fi
a23014d69b56cbdf48ad05229c334648b5309d8fJakub Hrozek
a23014d69b56cbdf48ad05229c334648b5309d8fJakub Hrozek echo "Copy $cache/rootfs to $rootfs_path ... "
a23014d69b56cbdf48ad05229c334648b5309d8fJakub Hrozek copy_altlinux
a23014d69b56cbdf48ad05229c334648b5309d8fJakub Hrozek if [ $? -ne 0 ]; then
a23014d69b56cbdf48ad05229c334648b5309d8fJakub Hrozek echo "Failed to copy rootfs"
a7797068c4deb6ce2bdbcda27c45ff1bbb4a8e78Jakub Hrozek return 1
a7797068c4deb6ce2bdbcda27c45ff1bbb4a8e78Jakub Hrozek fi
a7797068c4deb6ce2bdbcda27c45ff1bbb4a8e78Jakub Hrozek return 0
a23014d69b56cbdf48ad05229c334648b5309d8fJakub Hrozek ) 9>@LOCALSTATEDIR@/lock/subsys/lxc-altlinux
a7797068c4deb6ce2bdbcda27c45ff1bbb4a8e78Jakub Hrozek
a23014d69b56cbdf48ad05229c334648b5309d8fJakub Hrozek return $?
a23014d69b56cbdf48ad05229c334648b5309d8fJakub Hrozek}
a23014d69b56cbdf48ad05229c334648b5309d8fJakub Hrozek
a23014d69b56cbdf48ad05229c334648b5309d8fJakub Hrozekcopy_configuration()
a23014d69b56cbdf48ad05229c334648b5309d8fJakub Hrozek{
a23014d69b56cbdf48ad05229c334648b5309d8fJakub Hrozek
a23014d69b56cbdf48ad05229c334648b5309d8fJakub Hrozek mkdir -p $config_path
a23014d69b56cbdf48ad05229c334648b5309d8fJakub Hrozek grep -q "^lxc.rootfs" $config_path/config 2>/dev/null || echo "lxc.rootfs = $rootfs_path" >> $config_path/config
a23014d69b56cbdf48ad05229c334648b5309d8fJakub Hrozek cat <<EOF >> $config_path/config
a23014d69b56cbdf48ad05229c334648b5309d8fJakub Hrozeklxc.utsname = $name
a23014d69b56cbdf48ad05229c334648b5309d8fJakub Hrozeklxc.tty = 4
a23014d69b56cbdf48ad05229c334648b5309d8fJakub Hrozeklxc.pts = 1024
a23014d69b56cbdf48ad05229c334648b5309d8fJakub Hrozeklxc.cap.drop = sys_module mac_admin mac_override sys_time
a23014d69b56cbdf48ad05229c334648b5309d8fJakub Hrozek
a7797068c4deb6ce2bdbcda27c45ff1bbb4a8e78Jakub Hrozek# When using LXC with apparmor, uncomment the next line to run unconfined:
a7797068c4deb6ce2bdbcda27c45ff1bbb4a8e78Jakub Hrozek#lxc.aa_profile = unconfined
a7797068c4deb6ce2bdbcda27c45ff1bbb4a8e78Jakub Hrozek
a23014d69b56cbdf48ad05229c334648b5309d8fJakub Hrozek#networking
a23014d69b56cbdf48ad05229c334648b5309d8fJakub Hrozek#lxc.network.type = $lxc_network_type
a23014d69b56cbdf48ad05229c334648b5309d8fJakub Hrozek#lxc.network.flags = up
a23014d69b56cbdf48ad05229c334648b5309d8fJakub Hrozek#lxc.network.link = $lxc_network_link
a23014d69b56cbdf48ad05229c334648b5309d8fJakub Hrozek#lxc.network.name = veth0
a23014d69b56cbdf48ad05229c334648b5309d8fJakub Hrozek#lxc.network.mtu = 1500
a7797068c4deb6ce2bdbcda27c45ff1bbb4a8e78Jakub HrozekEOF
a23014d69b56cbdf48ad05229c334648b5309d8fJakub Hrozekif [ ! -z ${ipv4} ]; then
a23014d69b56cbdf48ad05229c334648b5309d8fJakub Hrozek cat <<EOF >> $config_path/config
a23014d69b56cbdf48ad05229c334648b5309d8fJakub Hrozeklxc.network.ipv4 = $ipv4
a23014d69b56cbdf48ad05229c334648b5309d8fJakub HrozekEOF
a23014d69b56cbdf48ad05229c334648b5309d8fJakub Hrozekfi
a23014d69b56cbdf48ad05229c334648b5309d8fJakub Hrozekif [ ! -z ${gw} ]; then
a23014d69b56cbdf48ad05229c334648b5309d8fJakub Hrozek cat <<EOF >> $config_path/config
a23014d69b56cbdf48ad05229c334648b5309d8fJakub Hrozeklxc.network.ipv4.gateway = $gw
a23014d69b56cbdf48ad05229c334648b5309d8fJakub HrozekEOF
a23014d69b56cbdf48ad05229c334648b5309d8fJakub Hrozekfi
a23014d69b56cbdf48ad05229c334648b5309d8fJakub Hrozekif [ ! -z ${ipv6} ]; then
a23014d69b56cbdf48ad05229c334648b5309d8fJakub Hrozek cat <<EOF >> $config_path/config
a23014d69b56cbdf48ad05229c334648b5309d8fJakub Hrozeklxc.network.ipv6 = $ipv6
a23014d69b56cbdf48ad05229c334648b5309d8fJakub HrozekEOF
a23014d69b56cbdf48ad05229c334648b5309d8fJakub Hrozekfi
a23014d69b56cbdf48ad05229c334648b5309d8fJakub Hrozekif [ ! -z ${gw6} ]; then
a23014d69b56cbdf48ad05229c334648b5309d8fJakub Hrozek cat <<EOF >> $config_path/config
a23014d69b56cbdf48ad05229c334648b5309d8fJakub Hrozeklxc.network.ipv6.gateway = $gw6
a23014d69b56cbdf48ad05229c334648b5309d8fJakub HrozekEOF
a23014d69b56cbdf48ad05229c334648b5309d8fJakub Hrozekfi
a23014d69b56cbdf48ad05229c334648b5309d8fJakub Hrozek cat <<EOF >> $config_path/config
a7797068c4deb6ce2bdbcda27c45ff1bbb4a8e78Jakub Hrozek#cgroups
a23014d69b56cbdf48ad05229c334648b5309d8fJakub Hrozeklxc.cgroup.devices.deny = a
a23014d69b56cbdf48ad05229c334648b5309d8fJakub Hrozek# /dev/null and zero
a23014d69b56cbdf48ad05229c334648b5309d8fJakub Hrozeklxc.cgroup.devices.allow = c 1:3 rwm
a23014d69b56cbdf48ad05229c334648b5309d8fJakub Hrozeklxc.cgroup.devices.allow = c 1:5 rwm
a23014d69b56cbdf48ad05229c334648b5309d8fJakub Hrozek# consoles
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagherlxc.cgroup.devices.allow = c 5:1 rwm
2ea6196484055397cc4bc011c5960f790431fa9dStephen Gallagherlxc.cgroup.devices.allow = c 5:0 rwm
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagherlxc.cgroup.devices.allow = c 4:0 rwm
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagherlxc.cgroup.devices.allow = c 4:1 rwm
a23014d69b56cbdf48ad05229c334648b5309d8fJakub Hrozek# /dev/{,u}random
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagherlxc.cgroup.devices.allow = c 1:9 rwm
2ea6196484055397cc4bc011c5960f790431fa9dStephen Gallagherlxc.cgroup.devices.allow = c 1:8 rwm
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagherlxc.cgroup.devices.allow = c 136:* rwm
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagherlxc.cgroup.devices.allow = c 5:2 rwm
a7797068c4deb6ce2bdbcda27c45ff1bbb4a8e78Jakub Hrozek# rtc
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagherlxc.cgroup.devices.allow = c 10:135 rwm
2ea6196484055397cc4bc011c5960f790431fa9dStephen Gallagher
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagherlxc.mount.auto = cgroup:mixed proc:mixed sys:mixed
52261fe16203dec6e6f69177c6d0a810b47d073fStephen GallagherEOF
a23014d69b56cbdf48ad05229c334648b5309d8fJakub Hrozek
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher if [ $? -ne 0 ]; then
2ea6196484055397cc4bc011c5960f790431fa9dStephen Gallagher echo "Failed to add configuration"
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher return 1
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher fi
a23014d69b56cbdf48ad05229c334648b5309d8fJakub Hrozek
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher return 0
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher}
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagherclean()
2ea6196484055397cc4bc011c5960f790431fa9dStephen Gallagher{
2ea6196484055397cc4bc011c5960f790431fa9dStephen Gallagher
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher if [ ! -e $cache ]; then
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher exit 0
a23014d69b56cbdf48ad05229c334648b5309d8fJakub Hrozek fi
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher
2ea6196484055397cc4bc011c5960f790431fa9dStephen Gallagher # lock, so we won't purge while someone is creating a repository
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher (
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher flock -x 9
a23014d69b56cbdf48ad05229c334648b5309d8fJakub Hrozek if [ $? != 0 ]; then
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher echo "Cache repository is busy."
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher exit 1
2ea6196484055397cc4bc011c5960f790431fa9dStephen Gallagher fi
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher echo -n "Purging the download cache for ALTLinux-$release..."
a23014d69b56cbdf48ad05229c334648b5309d8fJakub Hrozek rm --preserve-root --one-file-system -rf $cache && echo "Done." || exit 1
056302a92862fda16351d7192600746746f38e5dStephen Gallagher exit 0
e59e09b5010f262228bbdeb92a79b733bf5854b3Stephen Gallagher ) 9>@LOCALSTATEDIR@/lock/subsys/lxc-altlinux
e59e09b5010f262228bbdeb92a79b733bf5854b3Stephen Gallagher}
dd3ba5c5b7d2a9d109963ae9e6c94fff34872221Stephen Gallagher
a23014d69b56cbdf48ad05229c334648b5309d8fJakub Hrozekusage()
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher{
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher cat <<EOF
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagherusage:
a23014d69b56cbdf48ad05229c334648b5309d8fJakub Hrozek $1 -n|--name=<container_name>
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher [-p|--path=<path>] [-c|--clean] [-R|--release=<ALTLinux_release>]
2ea6196484055397cc4bc011c5960f790431fa9dStephen Gallagher [-4|--ipv4=<ipv4 address>] [-6|--ipv6=<ipv6 address>]
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher [-g|--gw=<gw address>] [-d|--dns=<dns address>]
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher [-P|--profile=<name of the profile>] [--rootfs=<path>]
a23014d69b56cbdf48ad05229c334648b5309d8fJakub Hrozek [-A|--arch=<arch of the container>]
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher [-h|--help]
52261fe16203dec6e6f69177c6d0a810b47d073fStephen GallagherMandatory args:
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher -n,--name container name, used to as an identifier for that container from now on
52261fe16203dec6e6f69177c6d0a810b47d073fStephen GallagherOptional args:
2ea6196484055397cc4bc011c5960f790431fa9dStephen Gallagher -p,--path path to where the container rootfs will be created, defaults to @LXCPATH@. The container config will go under @LXCPATH@ in that case
2ea6196484055397cc4bc011c5960f790431fa9dStephen Gallagher -c,--clean clean the cache
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher -R,--release ALTLinux release for the new container. if the host is ALTLinux, then it will defaultto the host's release.
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher -4,--ipv4 specify the ipv4 address to assign to the virtualized interface, eg. 192.168.1.123/24
a23014d69b56cbdf48ad05229c334648b5309d8fJakub Hrozek -6,--ipv6 specify the ipv6 address to assign to the virtualized interface, eg. 2003:db8:1:0:214:1234:fe0b:3596/64
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher -g,--gw specify the default gw, eg. 192.168.1.1
2ea6196484055397cc4bc011c5960f790431fa9dStephen Gallagher -G,--gw6 specify the default gw, eg. 2003:db8:1:0:214:1234:fe0b:3596
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher -d,--dns specify the DNS server, eg. 192.168.1.2
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher -P,--profile Profile name is the file name in /etc/lxc/profiles contained packages name for install to cache.
a23014d69b56cbdf48ad05229c334648b5309d8fJakub Hrozek -A,--arch NOT USED YET. Define what arch the container will be [i686,x86_64]
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher ---rootfs rootfs path
2ea6196484055397cc4bc011c5960f790431fa9dStephen Gallagher -h,--help print this help
52261fe16203dec6e6f69177c6d0a810b47d073fStephen GallagherEOF
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher return 0
a23014d69b56cbdf48ad05229c334648b5309d8fJakub Hrozek}
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagheroptions=$(getopt -o hp:n:P:cR:4:6:g:d: -l help,rootfs:,path:,name:,profile:,clean,release:,ipv4:,ipv6:,gw:,dns: -- "$@")
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagherif [ $? -ne 0 ]; then
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher usage $(basename $0)
2cb6f28b3a12bb714bf14494d31eb6b6fff64b8bJakub Hrozek exit 1
2cb6f28b3a12bb714bf14494d31eb6b6fff64b8bJakub Hrozekfi
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallaghereval set -- "$options"
a7797068c4deb6ce2bdbcda27c45ff1bbb4a8e78Jakub Hrozek
a7797068c4deb6ce2bdbcda27c45ff1bbb4a8e78Jakub Hrozekwhile true
a7797068c4deb6ce2bdbcda27c45ff1bbb4a8e78Jakub Hrozekdo
a7797068c4deb6ce2bdbcda27c45ff1bbb4a8e78Jakub Hrozek case "$1" in
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher -h|--help) usage $0 && exit 0;;
dd3ba5c5b7d2a9d109963ae9e6c94fff34872221Stephen Gallagher -p|--path) path=$2; shift 2;;
a7797068c4deb6ce2bdbcda27c45ff1bbb4a8e78Jakub Hrozek --rootfs) rootfs_path=$2; shift 2;;
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher -n|--name) name=$2; shift 2;;
2ea6196484055397cc4bc011c5960f790431fa9dStephen Gallagher -P|--profile) profile=$2; shift 2;;
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher -c|--clean) clean=1; shift 1;;
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher -R|--release) release=$2; shift 2;;
a23014d69b56cbdf48ad05229c334648b5309d8fJakub Hrozek -4|--ipv4) ipv4=$2; shift 2;;
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher -6|--ipv6) ipv6=$2; shift 2;;
dd3ba5c5b7d2a9d109963ae9e6c94fff34872221Stephen Gallagher -g|--gw) gw=$2; shift 2;;
dd3ba5c5b7d2a9d109963ae9e6c94fff34872221Stephen Gallagher -d|--dns) dns=$2; shift 2;;
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher --) shift 1; break ;;
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher *) break ;;
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher esac
a23014d69b56cbdf48ad05229c334648b5309d8fJakub Hrozekdone
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher
524ceecc11f3d458eb3c1cf1489c3ff6ccb22226Jakub Hrozekif [ ! -z "$clean" -a -z "$path" ]; then
524ceecc11f3d458eb3c1cf1489c3ff6ccb22226Jakub Hrozek clean || exit 1
524ceecc11f3d458eb3c1cf1489c3ff6ccb22226Jakub Hrozek exit 0
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagherfi
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher
dd3ba5c5b7d2a9d109963ae9e6c94fff34872221Stephen Gallaghertype apt-get >/dev/null 2>&1
a7797068c4deb6ce2bdbcda27c45ff1bbb4a8e78Jakub Hrozekif [ $? -ne 0 ]; then
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher echo "'apt-get' command is missing"
2ea6196484055397cc4bc011c5960f790431fa9dStephen Gallagher exit 1
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagherfi
b20208b80e99abb79c00d5ec526caa9465859c52Jakub Hrozek
a7797068c4deb6ce2bdbcda27c45ff1bbb4a8e78Jakub Hrozekif [ -z "$path" ]; then
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher path=$default_path
b20208b80e99abb79c00d5ec526caa9465859c52Jakub Hrozekfi
b20208b80e99abb79c00d5ec526caa9465859c52Jakub Hrozek
b20208b80e99abb79c00d5ec526caa9465859c52Jakub Hrozekif [ -z "$profile" ]; then
b20208b80e99abb79c00d5ec526caa9465859c52Jakub Hrozek profile=$default_profile
a7797068c4deb6ce2bdbcda27c45ff1bbb4a8e78Jakub Hrozekfi
a7797068c4deb6ce2bdbcda27c45ff1bbb4a8e78Jakub Hrozek
a7797068c4deb6ce2bdbcda27c45ff1bbb4a8e78Jakub Hrozekif [ -z "$release" ]; then
b20208b80e99abb79c00d5ec526caa9465859c52Jakub Hrozek if [ "$is_altlinux" ]; then
b20208b80e99abb79c00d5ec526caa9465859c52Jakub Hrozek release=$(cat /etc/altlinux-release |awk '/^ALT/ {print $3}')
a7797068c4deb6ce2bdbcda27c45ff1bbb4a8e78Jakub Hrozek else
b20208b80e99abb79c00d5ec526caa9465859c52Jakub Hrozek echo "This is not a ALTLinux host and release missing, use -R|--release to specify release"
a7797068c4deb6ce2bdbcda27c45ff1bbb4a8e78Jakub Hrozek exit 1
b20208b80e99abb79c00d5ec526caa9465859c52Jakub Hrozek fi
b20208b80e99abb79c00d5ec526caa9465859c52Jakub Hrozekfi
a7797068c4deb6ce2bdbcda27c45ff1bbb4a8e78Jakub Hrozek
b20208b80e99abb79c00d5ec526caa9465859c52Jakub Hrozekif [ -z "$ipv4" -a -z "$ipv6" ]; then
a7797068c4deb6ce2bdbcda27c45ff1bbb4a8e78Jakub Hrozek BOOTPROTO="dhcp"
b20208b80e99abb79c00d5ec526caa9465859c52Jakub Hrozekelse
b20208b80e99abb79c00d5ec526caa9465859c52Jakub Hrozek BOOTPROTO="static"
a7797068c4deb6ce2bdbcda27c45ff1bbb4a8e78Jakub Hrozekfi
b20208b80e99abb79c00d5ec526caa9465859c52Jakub Hrozek
a7797068c4deb6ce2bdbcda27c45ff1bbb4a8e78Jakub Hrozekif [ "$(id -u)" != "0" ]; then
b20208b80e99abb79c00d5ec526caa9465859c52Jakub Hrozek echo "This script should be run as 'root'"
b20208b80e99abb79c00d5ec526caa9465859c52Jakub Hrozek exit 1
a7797068c4deb6ce2bdbcda27c45ff1bbb4a8e78Jakub Hrozekfi
b20208b80e99abb79c00d5ec526caa9465859c52Jakub Hrozek
a7797068c4deb6ce2bdbcda27c45ff1bbb4a8e78Jakub Hrozek# check for 'lxc.rootfs' passed in through default config by lxc-create
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagherif [ -z "$rootfs_path" ]; then
b20208b80e99abb79c00d5ec526caa9465859c52Jakub Hrozek if grep -q '^lxc.rootfs' $path/config 2>/dev/null ; then
a7797068c4deb6ce2bdbcda27c45ff1bbb4a8e78Jakub Hrozek rootfs_path=$(awk -F= '/^lxc.rootfs =/{ print $2 }' $path/config)
b20208b80e99abb79c00d5ec526caa9465859c52Jakub Hrozek else
a7797068c4deb6ce2bdbcda27c45ff1bbb4a8e78Jakub Hrozek rootfs_path=$path/rootfs
b20208b80e99abb79c00d5ec526caa9465859c52Jakub Hrozek fi
b20208b80e99abb79c00d5ec526caa9465859c52Jakub Hrozekfi
a7797068c4deb6ce2bdbcda27c45ff1bbb4a8e78Jakub Hrozek
b20208b80e99abb79c00d5ec526caa9465859c52Jakub Hrozekconfig_path=$default_path/$name
b20208b80e99abb79c00d5ec526caa9465859c52Jakub Hrozekcache=$cache_base/$release/$profile
0172959f117b545c8a6b1893f5f56818d82dd624Jakub Hrozek
b20208b80e99abb79c00d5ec526caa9465859c52Jakub Hrozekinstall_altlinux
b20208b80e99abb79c00d5ec526caa9465859c52Jakub Hrozekif [ $? -ne 0 ]; then
b20208b80e99abb79c00d5ec526caa9465859c52Jakub Hrozek echo "failed to install altlinux"
a7797068c4deb6ce2bdbcda27c45ff1bbb4a8e78Jakub Hrozek exit 1
b20208b80e99abb79c00d5ec526caa9465859c52Jakub Hrozekfi
b20208b80e99abb79c00d5ec526caa9465859c52Jakub Hrozek
b20208b80e99abb79c00d5ec526caa9465859c52Jakub Hrozekconfigure_altlinux
b20208b80e99abb79c00d5ec526caa9465859c52Jakub Hrozekif [ $? -ne 0 ]; then
a7797068c4deb6ce2bdbcda27c45ff1bbb4a8e78Jakub Hrozek echo "failed to configure altlinux for a container"
a7797068c4deb6ce2bdbcda27c45ff1bbb4a8e78Jakub Hrozek exit 1
b20208b80e99abb79c00d5ec526caa9465859c52Jakub Hrozekfi
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher
a23014d69b56cbdf48ad05229c334648b5309d8fJakub Hrozekcopy_configuration
dd3ba5c5b7d2a9d109963ae9e6c94fff34872221Stephen Gallagherif [ $? -ne 0 ]; then
dd3ba5c5b7d2a9d109963ae9e6c94fff34872221Stephen Gallagher echo "failed write configuration file"
dd3ba5c5b7d2a9d109963ae9e6c94fff34872221Stephen Gallagher exit 1
dd3ba5c5b7d2a9d109963ae9e6c94fff34872221Stephen Gallagherfi
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagherif [ ! -z "$clean" ]; then
a23014d69b56cbdf48ad05229c334648b5309d8fJakub Hrozek clean || exit 1
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagher exit 0
2ea6196484055397cc4bc011c5960f790431fa9dStephen Gallagherfi
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagherecho "container rootfs and config created"
52261fe16203dec6e6f69177c6d0a810b47d073fStephen Gallagherecho "network configured as $lxc_network_type in the $lxc_network_link"
a23014d69b56cbdf48ad05229c334648b5309d8fJakub Hrozek