]> git.proxmox.com Git - mirror_lxc.git/blobdiff - templates/lxc-busybox.in
start: call lxc_find_gateway_addresses early
[mirror_lxc.git] / templates / lxc-busybox.in
index 3782687a54e65ac4497d438279db9f4e308869af..c9f39872e3a04abacfa720827d8ebe3ac69aecc5 100644 (file)
@@ -23,7 +23,7 @@
 LXC_MAPPED_UID=
 LXC_MAPPED_GID=
 
-BUSYBOX_EXE=
+BUSYBOX_EXE=`which busybox`
 
 # Make sure the usual locations are in PATH
 export PATH=$PATH:/usr/sbin:/usr/bin:/sbin:/bin
@@ -89,16 +89,19 @@ ${rootfs}/usr/lib64"
       echo "lxc.mount.entry = /dev/${dev} dev/${dev} none bind,optional,create=file 0 0" >> "${path}/config"
     done
   else
-    mknod -m 666 "${rootfs}/tty" c 5 0       || res=1
-    mknod -m 666 "${rootfs}/console" c 5 1   || res=1
-    mknod -m 666 "${rootfs}/tty0" c 4 0      || res=1
-    mknod -m 666 "${rootfs}/tty1" c 4 0      || res=1
-    mknod -m 666 "${rootfs}/tty5" c 4 0      || res=1
-    mknod -m 600 "${rootfs}/ram0" b 1 0      || res=1
-    mknod -m 666 "${rootfs}/null" c 1 3      || res=1
-    mknod -m 666 "${rootfs}/zero" c 1 5      || res=1
-    mknod -m 666 "${rootfs}/urandom" c 1 9   || res=1
+    mknod -m 666 "${rootfs}/dev/tty" c 5 0       || res=1
+    mknod -m 666 "${rootfs}/dev/console" c 5 1   || res=1
+    mknod -m 666 "${rootfs}/dev/tty0" c 4 0      || res=1
+    mknod -m 666 "${rootfs}/dev/tty1" c 4 0      || res=1
+    mknod -m 666 "${rootfs}/dev/tty5" c 4 0      || res=1
+    mknod -m 600 "${rootfs}/dev/ram0" b 1 0      || res=1
+    mknod -m 666 "${rootfs}/dev/null" c 1 3      || res=1
+    mknod -m 666 "${rootfs}/dev/zero" c 1 5      || res=1
+    mknod -m 666 "${rootfs}/dev/urandom" c 1 9   || res=1
   fi
+  
+  # make /tmp accessible to any user (with sticky bit)
+  chmod 1777 "${rootfs}/tmp" || return 1
 
   # root user defined
   cat <<EOF >> "${rootfs}/etc/passwd"
@@ -185,7 +188,7 @@ configure_busybox()
 
   # copy busybox in the rootfs
   if ! cp "${BUSYBOX_EXE}" "${rootfs}/bin"; then
-    echo "ERROR: Failed to copy busybox binary"
+    echo "ERROR: Failed to copy busybox binary" 1>&2
     return 1
   fi
 
@@ -266,19 +269,26 @@ usage() {
 LXC busybox image builder
 
 Special arguments:
-[ -h | --help ]: Print this help message and exit.
-
-LXC internal arguments (do not pass manually!):
-[ --name <name> ]: The container name
-[ --path <path> ]: The path to the container
-[ --rootfs <rootfs> ]: The path to the container's rootfs
-[ --mapped-uid <map> ]: A uid map (user namespaces)
-[ --mapped-gid <map> ]: A gid map (user namespaces)
+
+  [ -h | --help ]: Print this help message and exit.
+
+LXC internal arguments:
+
+  [ --name <name> ]: The container name
+  [ --path <path> ]: The path to the container
+  [ --rootfs <rootfs> ]: The path to the container's rootfs (default: config or <path>/rootfs)
+  [ --mapped-uid <map> ]: A uid map (user namespaces)
+  [ --mapped-gid <map> ]: A gid map (user namespaces)
+
+BUSYBOX template specific arguments:
+
+  [ --busybox-path <path> ]: busybox pathname (default: ${BUSYBOX_EXE})
+
 EOF
   return 0
 }
 
-if ! options=$(getopt -o hp:n: -l help,rootfs:,path:,name:,mapped-uid:,mapped-gid: -- "$@"); then
+if ! options=$(getopt -o hp:n: -l help,rootfs:,path:,name:,mapped-uid:,mapped-gid:,busybox-path: -- "$@"); then
   usage
   exit 1
 fi
@@ -287,27 +297,31 @@ eval set -- "$options"
 while true
 do
   case "$1" in
-    -h|--help)    usage && exit 1;;
+    -h|--help)    usage && exit 0;;
     -n|--name)    name=$2; shift 2;;
     -p|--path)    path=$2; shift 2;;
     --rootfs)     rootfs=$2; shift 2;;
     --mapped-uid) LXC_MAPPED_UID=$2; shift 2;;
     --mapped-gid) LXC_MAPPED_GID=$2; shift 2;;
+    --busybox-path) BUSYBOX_EXE=$2; shift 2;;
     --)           shift 1; break ;;
     *)            break ;;
   esac
 done
 
 # Check that we have all variables we need
-if [ -z "${name}" ] || [ -z "${path}" ] || [ -z "${rootfs}" ]; then
-    echo "ERROR: Please pass the name, path, and rootfs for the container" 1>&2
+if [ -z "${name}" ] || [ -z "${path}" ]; then
+    echo "ERROR: Please pass the name and path for the container" 1>&2
     exit 1
 fi
 
 # Make sure busybox is present
-BUSYBOX_EXE=`which busybox`
-if [ $? -ne 0 ]; then
-    echo "ERROR: Failed to find busybox binary"
+if [ -z "${BUSYBOX_EXE}" ]; then
+    echo "ERROR: Please pass a pathname for busybox binary" 1>&2
+    exit 1
+fi
+if [ ! -x "${BUSYBOX_EXE}" ]; then
+    echo "ERROR: Failed to find busybox binary (${BUSYBOX_EXE})" 1>&2
     exit 1
 fi
 
@@ -322,21 +336,21 @@ if [ -z "$rootfs" ]; then
 fi
 
 if ! install_busybox "${rootfs}" "${name}"; then
-  echo "ERROR: Failed to install rootfs"
+  echo "ERROR: Failed to install rootfs" 1>&2
   exit 1
 fi
 
 if ! configure_busybox "${rootfs}"; then
-  echo "ERROR: Failed to configure busybox"
+  echo "ERROR: Failed to configure busybox" 1>&2
   exit 1
 fi
 
 if ! copy_configuration "${path}" "${rootfs}" "${name}"; then
-  echo "ERROR: Failed to write config file"
+  echo "ERROR: Failed to write config file" 1>&2
   exit 1
 fi
 
 if ! remap_userns "${path}"; then
-  echo "ERROR: Failed to change idmappings"
+  echo "ERROR: Failed to change idmappings" 1>&2
   exit 1
 fi