[lxc-devel] [PATCH] systemd/selinux init scripts fixups

Michael H. Warfield mhw at WittsEnd.com
Thu Oct 2 21:44:07 UTC 2014


On Thu, 2014-10-02 at 16:56 -0400, Dwight Engen wrote:
> - RHEL/OL 7 doesn't have the ifconfig command by default so have the
>   lxc-net script check for its existence before use, and fall back
>   to using the ip command if ifconfig is not available
> 
> - When lxc-net is run from systemd on a system with selinux enabled,
>   the mkdir -p ${varrun} will create /run/lxc as init_var_run_t which
>   dnsmasq can't write its pid into, so we restorecon it
>   after creation (to var_run_t)
> 
> - The lxc-net systemd .service file needs an [Install] section so that
>   "systemctl enable lxc-net" will work

+1

> Signed-off-by: Dwight Engen <dwight.engen at oracle.com>

Acked-by:  Michael H. Warfield <mhw at WittsEnd.com>

> ---
>  config/init/common/lxc-net.in          | 55 +++++++++++++++++++++++++++++++---
>  config/init/systemd/lxc-net.service.in |  3 ++
>  2 files changed, 54 insertions(+), 4 deletions(-)
> 
> diff --git a/config/init/common/lxc-net.in b/config/init/common/lxc-net.in
> index c921ab7..5567fee 100644
> --- a/config/init/common/lxc-net.in
> +++ b/config/init/common/lxc-net.in
> @@ -25,6 +25,42 @@ else
>      lockdir="$localstatedir"/lock
>  fi
>  
> +_netmask2cidr ()
> +{
> +    # Assumes there's no "255." after a non-255 byte in the mask
> +    local x=${1##*255.}
> +    set -- 0^^^128^192^224^240^248^252^254^ $(( (${#1} - ${#x})*2 )) ${x%%.*}
> +    x=${1%%$3*}
> +    echo $(( $2 + (${#x}/4) ))
> +}
> +
> +ifdown() {
> +    which ifconfig >/dev/null 2>&1
> +    if [ $? = 0 ]; then
> +        ifconfig $1 down
> +        return
> +    fi
> +    which ip >/dev/null 2>&1
> +    if [ $? = 0 ]; then
> +        ip link set dev $1 down
> +    fi
> +}
> +
> +ifup() {
> +    which ifconfig >/dev/null 2>&1
> +    if [ $? = 0 ]; then
> +        ifconfig $1 $2 netmask $3 up
> +        return
> +    fi
> +    which ip >/dev/null 2>&1
> +    if [ $? = 0 ]; then
> +        MASK=`_netmask2cidr ${LXC_NETMASK}`
> +        CIDR_ADDR="${LXC_ADDR}/${MASK}"
> +        ip addr add ${CIDR_ADDR} dev $1
> +        ip link set dev $1 up
> +    fi
> +}
> +
>  start() {
>      [ ! -f "${lockdir}"/lxc-net ] || { exit 0; }
>  
> @@ -42,7 +78,7 @@ start() {
>          iptables $use_iptables_lock -D FORWARD -o ${LXC_BRIDGE} -j ACCEPT
>          iptables $use_iptables_lock -t nat -D POSTROUTING -s ${LXC_NETWORK} ! -d ${LXC_NETWORK} -j MASQUERADE || true
>          iptables $use_iptables_lock -t mangle -D POSTROUTING -o ${LXC_BRIDGE} -p udp -m udp --dport 68 -j CHECKSUM --checksum-fill
> -        ifconfig ${LXC_BRIDGE} down || true
> +        ifdown ${LXC_BRIDGE}
>          brctl delbr ${LXC_BRIDGE} || true
>      }
>  
> @@ -53,8 +89,19 @@ start() {
>      # set up the lxc network
>      brctl addbr ${LXC_BRIDGE} || { echo "Missing bridge support in kernel"; stop; exit 0; }
>      echo 1 > /proc/sys/net/ipv4/ip_forward
> -    mkdir -p "${varrun}"
> -    ifconfig ${LXC_BRIDGE} ${LXC_ADDR} netmask ${LXC_NETMASK} up
> +
> +    # if we are run from systemd on a system with selinux enabled,
> +    # the mkdir will create /run/lxc as init_var_run_t which dnsmasq
> +    # can't write its pid into, so we restorecon it (to var_run_t)
> +    if [ ! -d "${varrun}" ]; then
> +        mkdir -p "${varrun}"
> +        which restorecon >/dev/null 2>&1
> +        if [ $? = 0 ]; then
> +            restorecon "${varrun}"
> +        fi
> +    fi
> +
> +    ifup ${LXC_BRIDGE} ${LXC_ADDR} ${LXC_NETMASK}
>      iptables $use_iptables_lock -I INPUT -i ${LXC_BRIDGE} -p udp --dport 67 -j ACCEPT
>      iptables $use_iptables_lock -I INPUT -i ${LXC_BRIDGE} -p tcp --dport 67 -j ACCEPT
>      iptables $use_iptables_lock -I INPUT -i ${LXC_BRIDGE} -p udp --dport 53 -j ACCEPT
> @@ -83,7 +130,7 @@ stop() {
>      if [ -d /sys/class/net/${LXC_BRIDGE} ]; then
>          use_iptables_lock="-w"
>          iptables -w -L -n > /dev/null 2>&1 || use_iptables_lock=""
> -        ifconfig ${LXC_BRIDGE} down
> +        ifdown ${LXC_BRIDGE}
>          iptables $use_iptables_lock -D INPUT -i ${LXC_BRIDGE} -p udp --dport 67 -j ACCEPT
>          iptables $use_iptables_lock -D INPUT -i ${LXC_BRIDGE} -p tcp --dport 67 -j ACCEPT
>          iptables $use_iptables_lock -D INPUT -i ${LXC_BRIDGE} -p udp --dport 53 -j ACCEPT
> diff --git a/config/init/systemd/lxc-net.service.in b/config/init/systemd/lxc-net.service.in
> index c054702..0467c0f 100644
> --- a/config/init/systemd/lxc-net.service.in
> +++ b/config/init/systemd/lxc-net.service.in
> @@ -8,3 +8,6 @@ Type=oneshot
>  RemainAfterExit=yes
>  ExecStart=@LIBEXECDIR@/lxc/lxc-net start
>  ExecStop=@LIBEXECDIR@/lxc/lxc-net stop
> +
> +[Install]
> +WantedBy=multi-user.target

-- 
Michael H. Warfield (AI4NB) | (770) 978-7061 |  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!

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 465 bytes
Desc: This is a digitally signed message part
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20141002/cfaf4dfd/attachment.sig>


More information about the lxc-devel mailing list