[lxc-devel] [PATCH 4/5] lxc-alpine: add support for setting arch from command line

Stéphane Graber stgraber at ubuntu.com
Wed Jan 2 18:11:15 UTC 2013


On 12/31/2012 02:49 PM, Natanael Copa wrote:
> This allows us to lxc-create 32 bit guests on x86_64 hosts.
> 
> Signed-off-by: Natanael Copa <ncopa at alpinelinux.org>

Comment below, though good enough. Pushed.

Acked-by: Stéphane Graber <stgraber at ubuntu.com>

> ---
>  templates/lxc-alpine.in | 28 ++++++++++++++++++++++++++--
>  1 file changed, 26 insertions(+), 2 deletions(-)
> 
> diff --git a/templates/lxc-alpine.in b/templates/lxc-alpine.in
> index 87886f5..5b685b1 100644
> --- a/templates/lxc-alpine.in
> +++ b/templates/lxc-alpine.in
> @@ -9,7 +9,11 @@ install_alpine() {
>      else
>          cp /etc/apk/repositories "$rootfs"/etc/apk/repositories || return 1
>      fi
> -    ${APK:-apk} add -U --initdb --root $rootfs alpine-base
> +    opt_arch=
> +    if [ -n "$apk_arch" ]; then
> +        opt_arch="--arch $apk_arch"
> +    fi
> +    ${APK:-apk} add -U --initdb --root $rootfs $opt_arch alpine-base
>  }
>  
>  configure_alpine() {
> @@ -68,6 +72,9 @@ copy_configuration() {
>  
>      grep -q "^lxc.rootfs" $path/config 2>/dev/null \
>          || echo "lxc.rootfs = $rootfs" >> $path/config
> +    if [ -n "$lxc_arch" ]; then
> +        echo "lxc.arch = $lxc_arch" >> $path/config
> +    fi

That bit is actually a bit wrong, although consistent with other
templates and not actually a problem as lxc won't fail on invalid value.

lxc.arch is meant to be the arch personality, as such only four values
are valid:
{ "x86", PER_LINUX32 },
{ "i686", PER_LINUX32 },
{ "x86_64", PER_LINUX },
{ "amd64", PER_LINUX },

It's likely that the introduction of arm64 will require the addition of
a pair for that architecture too, but at the moment, allowing lxc.arch
to be set to anything but one of those 4 values will cause lxc to ignore
the option completely.

>      cat <<EOF >> $path/config
>  lxc.tty = 4
>  lxc.pts = 1024
> @@ -120,7 +127,7 @@ die() {
>  
>  usage() {
>      cat >&2 <<EOF
> -Usage: $(basename $0) [-h|--help] [-r|--repository <url>]
> +Usage: $(basename $0) [-h|--help] [-r|--repository <url>] [-a|--arch <arch>]
>                     -p|--path <path> -n|--name <name>
>  EOF
>  }
> @@ -161,6 +168,11 @@ while [ $# -gt 0 ]; do
>          repository=$1
>          shift
>  	;;
> +    -a|--arch)
> +        optarg_check $opt "$1"
> +        arch=$1
> +        shift
> +	;;
>      --)
>          break;;
>      --*=*)
> @@ -193,6 +205,18 @@ if [ -z "$rootfs" ]; then
>      rootfs="${path}/rootfs"
>  fi
>  
> +lxc_arch=$arch
> +apk_arch=$arch
> +
> +case "$arch" in
> +	i[3-6]86)
> +		apk_arch=x86;;
> +	x86)
> +		lxc_arch=i686;;
> +	x86_64|"") ;;
> +	*)	die "unsupported architecture: $arch";;
> +esac
> +
>  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/20130102/1ba1eb0d/attachment.pgp>


More information about the lxc-devel mailing list