[lxc-devel] [PATCH] templates: initial support for Alpine Linux
Stéphane Graber
stgraber at ubuntu.com
Tue Dec 25 12:01:37 UTC 2012
On 12/24/2012 05:18 PM, Natanael Copa wrote:
> Requires apk-tools (http://git.alpinelinux.org/cgit/apk-tools)
>
> Signed-off-by: Natanael Copa <ncopa at alpinelinux.org>
I didn't look at it too closely but the usual files have been updated
and I assume the template has been properly tested.
Acked and applied.
> ---
> .gitignore | 1 +
> configure.ac | 1 +
> templates/lxc-alpine.in | 190 ++++++++++++++++++++++++++++++++++++++++++++++++
> 3 files changed, 192 insertions(+)
> create mode 100644 templates/lxc-alpine.in
>
> diff --git a/.gitignore b/.gitignore
> index a766716..7401b55 100644
> --- a/.gitignore
> +++ b/.gitignore
> @@ -24,6 +24,7 @@ libtool
> lxc.spec
> lxc.pc
>
> +templates/lxc-alpine
> templates/lxc-altlinux
> templates/lxc-archlinux
> templates/lxc-busybox
> diff --git a/configure.ac b/configure.ac
> index c4f1b2e..2add6a3 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -257,6 +257,7 @@ AC_CONFIG_FILES([
> templates/lxc-altlinux
> templates/lxc-sshd
> templates/lxc-archlinux
> + templates/lxc-alpine
>
> src/Makefile
> src/lxc/Makefile
> diff --git a/templates/lxc-alpine.in b/templates/lxc-alpine.in
> new file mode 100644
> index 0000000..6f7c90d
> --- /dev/null
> +++ b/templates/lxc-alpine.in
> @@ -0,0 +1,190 @@
> +#!/bin/sh
> +
> +install_alpine() {
> + rootfs="$1"
> + mkdir -p "$rootfs"/etc/apk || return 1
> + cp -r ${keys_dir:-/etc/apk/keys} "$rootfs"/etc/apk/
> + if [ -n "$repository" ]; then
> + echo "$repository" > "$rootfs"/etc/apk/repositories
> + else
> + cp /etc/apk/repositories "$rootfs"/etc/apk/repositories || return 1
> + fi
> + ${APK:-apk} add -U --initdb --root $rootfs alpine-base
> +}
> +
> +configure_alpine() {
> + rootfs="$1"
> + echo "Setting up /etc/inittab"
> + cat >"$rootfs"/etc/inittab<<EOF
> +::sysinit:/sbin/rc sysinit
> +::wait:/sbin/rc default
> +tty1:12345:respawn:/sbin/getty 38400 tty1
> +::ctrlaltdel:/sbin/reboot
> +::shutdown:/sbin/rc shutdown
> +EOF
> + # set up nameserver
> + grep nameserver /etc/resolv.conf > "$rootfs/etc/resolv.conf"
> +
> + # configure the network using the dhcp
> + # note that lxc will set up lo interface
> + cat <<EOF > $rootfs/etc/network/interfaces
> +#auto lo
> +iface lo inet loopback
> +
> +auto eth0
> +iface eth0 inet dhcp
> +EOF
> +
> + # set the hostname
> + echo $hostname > $rootfs/etc/hostname
> +
> + # missing device nodes
> + echo "Setting up device nodes"
> + mkdir -p -m 755 "$rootfs/dev/pts"
> + mkdir -p -m 1777 "$rootfs/dev/shm"
> + mknod -m 666 "$rootfs/dev/full" c 1 7
> + mknod -m 666 "$rootfs/dev/random" c 1 8
> + mknod -m 666 "$rootfs/dev/urandom" c 1 9
> + mknod -m 666 "$rootfs/dev/tty0" c 4 0
> + mknod -m 666 "$rootfs/dev/tty1" c 4 1
> + mknod -m 666 "$rootfs/dev/tty2" c 4 2
> + mknod -m 666 "$rootfs/dev/tty3" c 4 3
> + mknod -m 666 "$rootfs/dev/tty4" c 4 4
> +# mknod -m 600 "$rootfs/dev/initctl" p
> + mknod -m 666 "$rootfs/dev/tty" c 5 0
> + mknod -m 666 "$rootfs/dev/console" c 5 1
> + mknod -m 666 "$rootfs/dev/ptmx" c 5 2
> +
> + # start services
> + ln -s /etc/init.d/syslog "$rootfs"/etc/runlevels/default/syslog
> +
> + return 0
> +}
> +
> +copy_configuration() {
> + path=$1
> + rootfs=$2
> + hostname=$3
> +
> + grep -q "^lxc.rootfs" $path/config 2>/dev/null \
> + || echo "lxc.rootfs = $rootfs" >> $path/config
> + cat <<EOF >> $path/config
> +lxc.tty = 4
> +lxc.pts = 1024
> +lxc.utsname = $hostname
> +
> +# When using LXC with apparmor, uncomment the next line to run unconfined:
> +#lxc.aa_profile = unconfined
> +
> +# network interface
> +lxc.network.name = eth0
> +lxc.network.type = veth
> +lxc.network.flags = up
> +# enable for bridging
> +#lxc.network.link = br0
> +#lxc.network.ipv4 = n.n.n.n
> +#lxc.network.ipv4.gateway = auto
> +
> +# devices
> +lxc.cgroup.devices.deny = a
> +# /dev/null and zero
> +lxc.cgroup.devices.allow = c 1:3 rwm
> +lxc.cgroup.devices.allow = c 1:5 rwm
> +# consoles
> +lxc.cgroup.devices.allow = c 5:1 rwm
> +lxc.cgroup.devices.allow = c 5:0 rwm
> +lxc.cgroup.devices.allow = c 4:0 rwm
> +lxc.cgroup.devices.allow = c 4:1 rwm
> +# /dev/{,u}random
> +lxc.cgroup.devices.allow = c 1:9 rwm
> +lxc.cgroup.devices.allow = c 1:8 rwm
> +lxc.cgroup.devices.allow = c 136:* rwm
> +lxc.cgroup.devices.allow = c 5:2 rwm
> +# rtc
> +lxc.cgroup.devices.allow = c 254:0 rwm
> +
> +# mounts point
> +lxc.mount.entry=proc proc proc nodev,noexec,nosuid 0 0
> +lxc.mount.entry=run run tmpfs nodev,noexec,nosuid,relatime,size=1m,mode=0755 0 0
> +lxc.mount.entry=none dev/pts devpts gid=5,mode=620 0 0
> +
> +EOF
> +
> + return 0
> +}
> +
> +die() {
> + echo "$@" >&2
> + exit 1
> +}
> +
> +usage() {
> + echo "Usage: $(basename $0) [-h|--help] -p|--path <path> -n|--name <name>" >&2
> +}
> +
> +usage_err() {
> + usage
> + exit 1
> +}
> +
> +optarg_check() {
> + if [ -z "$2" ]; then
> + usage_err "option '$1' requires an argument"
> + fi
> +}
> +
> +default_path=@LXCPATH@
> +
> +while [ $# -gt 0 ]; do
> + opt="$1"
> + shift
> + case "$opt" in
> + -h|--help)
> + usage
> + exit 0
> + ;;
> + -n|--name)
> + optarg_check $opt "$1"
> + name=$1
> + shift
> + ;;
> + -p|--path)
> + optarg_check $opt "$1"
> + path=$1
> + shift
> + ;;
> + --)
> + break;;
> + --*=*)
> + # split --myopt=foo=bar into --myopt foo=bar
> + set -- ${opt%=*} ${opt#*=} "$@"
> + ;;
> + -?)
> + usage_err "unknown option '$opt'"
> + ;;
> + -*)
> + # split opts -abc into -a -b -c
> + set -- $(echo "${opt#-}" | sed 's/\(.\)/ -\1/g') "$@"
> + ;;
> + *)
> + usage
> + exit 1
> + ;;
> + esac
> +done
> +
> +
> +[ -z "$name" ] && usage_err
> +
> +if [ -z "${path}" ]; then
> + path="${default_path}/${name}"
> +fi
> +
> +rootfs=`awk -F= '$1 ~ /^lxc.rootfs/ { print $2 }' "$path/config" 2>/dev/null`
> +if [ -z "$rootfs" ]; then
> + rootfs="${path}/rootfs"
> +fi
> +
> +install_alpine "$rootfs" || die "Failed to install rootfs for $name"
> +configure_alpine "$rootfs" "$name" || die "Failed to configure $name"
> +copy_configuration "$path" "$rootfs" "$name"
>
--
Stéphane Graber
Ubuntu developer
http://www.ubuntu.com
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 899 bytes
Desc: OpenPGP digital signature
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20121225/eab0f55d/attachment.pgp>
More information about the lxc-devel
mailing list