[lxc-devel] [RFC] [PATCH] lxc-fedora template - Add --fqdn option for utsname.
Serge Hallyn
serge.hallyn at ubuntu.com
Thu May 23 15:41:57 UTC 2013
Quoting Michael H. Warfield (mhw at WittsEnd.com):
> All,
>
> After comments from Serge, attached is a suggested patch to the Fedora
> template to incorporate the FQDN (Fully Qualified Domain Name) of the
> container as the utsname in the container configuration and in the host
> name of the system. It adds a "--fqdn" long option to explicitly
> specify the value for utsname and hostname.
>
> The logic contains one default behavior change. If an FQDN is not
> specified or is a host simple name, the logic will use the domain name
> of the host appended to either the container name or the simple name to
> generate an FQDN.
>
> There were some comments on the -users list about determining the name
> of a container based on it's host name. That's never a good idea
> anyways because they can be independently changed but this would also
> change the default case. Please looks that over and comment. Other
> container owners might consider a similar modification.
>
> Regards,
> Mike
> --
> Michael H. Warfield (AI4NB) | (770) 985-6132 | mhw at WittsEnd.com
> /\/\|=mhw=|\/\/ | (678) 463-0932 | http://www.wittsend.com/mhw/
> NIC whois: MHW9 | An optimist believes we live in the best of all
> PGP Key: 0x674627FF | possible worlds. A pessimist is sure of it!
> --
>
> Signed-off-by: Michael H. Warfield <mhw at WittsEnd.com>
>
> ---
> diff --git a/templates/lxc-fedora.in b/templates/lxc-fedora.in
> index 481f718..8cc1699 100644
> --- a/templates/lxc-fedora.in
> +++ b/templates/lxc-fedora.in
> @@ -66,7 +66,7 @@ configure_fedora()
> DEVICE=eth0
> BOOTPROTO=dhcp
> ONBOOT=yes
> -HOSTNAME=${name}
> +HOSTNAME=${utsname}
> NM_CONTROLLED=no
> TYPE=Ethernet
> MTU=${MTU}
> @@ -75,17 +75,17 @@ EOF
> # set the hostname
> cat <<EOF > ${rootfs_path}/etc/sysconfig/network
> NETWORKING=yes
> -HOSTNAME=${name}
> +HOSTNAME=${utsname}
> EOF
>
> # set hostname on systemd Fedora systems
> if [ $release -gt 14 ]; then
> - echo "${name}" > ${rootfs_path}/etc/hostname
> + echo "${utsname}" > ${rootfs_path}/etc/hostname
> fi
>
> # set minimal hosts
> cat <<EOF > $rootfs_path/etc/hosts
> -127.0.0.1 localhost $name
> +127.0.0.1 localhost.localdomain localhost $utsname
> ::1 localhost6.localdomain6 localhost6
> EOF
>
> @@ -287,7 +287,7 @@ copy_configuration()
> mkdir -p $config_path
> grep -q "^lxc.rootfs" $config_path/config 2>/dev/null || echo "lxc.rootfs = $rootfs_path" >> $config_path/config
> cat <<EOF >> $config_path/config
> -lxc.utsname = $name
> +lxc.utsname = $utsname
> lxc.tty = 4
> lxc.pts = 1024
> lxc.mount = $config_path/fstab
> @@ -355,7 +355,7 @@ usage()
> cat <<EOF
> usage:
> $1 -n|--name=<container_name>
> - [-p|--path=<path>] [-c|--clean] [-R|--release=<Fedora_release>] [-A|--arch=<arch of the container>]
> + [-p|--path=<path>] [-c|--clean] [-R|--release=<Fedora_release>] [--fqdn=<network name of container>] [-A|--arch=<arch of the container>]
> [-h|--help]
> Mandatory args:
> -n,--name container name, used to as an identifier for that container from now on
> @@ -363,13 +363,14 @@ Optional args:
> -p,--path path to where the container rootfs will be created, defaults to @LXCPATH at . The container config will go under @LXCPATH@ in that case
> -c,--clean clean the cache
> -R,--release Fedora release for the new container. if the host is Fedora, then it will default to the host's release.
> + --fqdn fully qualified domain name (FQDN) for DNS and system naming
> -A,--arch NOT USED YET. Define what arch the container will be [i686,x86_64]
> -h,--help print this help
> EOF
> return 0
> }
>
> -options=$(getopt -o hp:n:cR: -l help,path:,name:,clean,release: -- "$@")
> +options=$(getopt -o hp:n:cR: -l help,path:,name:,clean,release:,fqdn: -- "$@")
> if [ $? -ne 0 ]; then
> usage $(basename $0)
> exit 1
> @@ -384,6 +385,7 @@ do
> -n|--name) name=$2; shift 2;;
> -c|--clean) clean=$2; shift 2;;
> -R|--release) release=$2; shift 2;;
> + --fqdn) utsname=$2; shift 2;;
> --) shift 1; break ;;
> *) break ;;
> esac
> @@ -394,6 +396,29 @@ if [ ! -z "$clean" -a -z "$path" ]; then
> exit 0
> fi
>
> +if [ -z "${utsname}" ]; then
> + utsname=${name}
> +fi
> +
> +# This follows a standard "resolver" convention that an FQDN must have
> +# at least two dots or it is considered a local relative host name.
> +# If it doesn't, append the dns domain name of the host system.
> +#
> +# This changes one significant behavior when running
> +# "lxc_create -n Container_Name" without using the
> +# --fqdn option.
> +#
> +# Old behavior:
> +# utsname and hostname = Container_Name
> +# New behavior:
> +# utsname and hostname = Container_Name.Domain_Name
> +
> +if [ $(expr "$utsname" : '.*\..*\.') = 0 ]; then
Is this definately what you want? I realize 'fqdn' probably really
means legit, but I coudl see people saying
lxc-create ... --fqdn n1.lxc --domainname lxc
and now they'll end up with n1.lxc.lxc as utsname, right?
> + if [ -n "$(dnsdomainname)" ]; then
> + utsname=${utsname}.$(dnsdomainname)
> + fi
> +fi
> +
> needed_pkgs=""
> type yum >/dev/null 2>&1
> if [ $? -ne 0 ]; then
>
> ------------------------------------------------------------------------------
> Try New Relic Now & We'll Send You this Cool Shirt
> New Relic is the only SaaS-based application performance monitoring service
> that delivers powerful full stack analytics. Optimize and monitor your
> browser, app, & servers with just a few lines of code. Try New Relic
> and get this awesome Nerd Life shirt! http://p.sf.net/sfu/newrelic_d2d_may
> _______________________________________________
> Lxc-devel mailing list
> Lxc-devel at lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/lxc-devel
More information about the lxc-devel
mailing list