[lxc-devel] [PATCH] Create busybox commands as symlinks instead of hardlinks

Stéphane Graber stgraber at ubuntu.com
Fri Nov 30 22:10:55 UTC 2012


On 11/30/2012 11:49 AM, Dwight Engen wrote:
> I was getting a "Too many links" error when creating a busybox container on
> a btrfs file system. This change has the template create the links as
> symlinks instead. It also generates the list of commands to be symlinked from
> busybox itself instead of a hardcoded list in the template.
> 
> Also set the root password to root, to match what other templates do.
> 
> Signed-off-by: Dwight Engen <dwight.engen at oracle.com>

Looks good, thanks.

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

> ---
>  templates/lxc-busybox.in |   49 +++++++++------------------------------------
>  1 files changed, 10 insertions(+), 39 deletions(-)
> 
> diff --git a/templates/lxc-busybox.in b/templates/lxc-busybox.in
> index f38d77e..91095a3 100644
> --- a/templates/lxc-busybox.in
> +++ b/templates/lxc-busybox.in
> @@ -151,40 +151,6 @@ configure_busybox()
>  {
>      rootfs=$1
>  
> -    functions="\
> -	[ [[ addgroup adduser adjtimex ar arp arping ash awk basename \
> -	brctl bunzip2 bzcat bzip2 cal cat catv chattr chgrp chmod \
> -	chown chpasswd chpst chroot chrt chvt cksum clear cmp comm \
> -	cp cpio crond crontab cryptpw cut date dc dd deallocvt \
> -	delgroup deluser df dhcprelay diff dirname dmesg dnsd dos2unix \
> -	du dumpkmap dumpleases echo ed egrep eject env envdir envuidgid \
> -	ether-wake expand expr fakeidentd false fbset fdformat fdisk \
> -	fetchmail fgrep find findfs fold free freeramdisk fsck \
> -	fsck.minix ftpget ftpput fuser getopt getty grep gunzip gzip \
> -	halt hdparm head hexdump hostid hostname httpd hwclock id \
> -	ifconfig ifdown ifenslave ifup inetd init insmod install ip \
> -	ipaddr ipcalc ipcrm ipcs iplink iproute iprule iptunnel \
> -	kbd_mode kill killall killall5 klogd last length less linux32 \
> -	linux64 linuxrc ln loadfont loadkmap logger login logname \
> -	logread losetup lpd lpq lpr ls lsattr lsmod lzmacat makedevs \
> -	md5sum mdev mesg microcom mkdir mkfifo mkfs.minix mknod mkswap \
> -	mktemp modprobe more mount mountpoint msh mt mv nameif nc \
> -	netstat nice nmeter nohup nslookup od openvt passwd patch \
> -	pgrep pidof ping ping6 pipe_progress pivot_root pkill poweroff \
> -	printenv printf ps pscan pwd raidautorun rdate readahead \
> -	readlink readprofile realpath reboot renice reset resize rm \
> -	rmdir rmmod route rpm rpm2cpio run-parts runlevel runsv \
> -	runsvdir rx script sed sendmail seq setarch setconsole \
> -	setkeycodes setlogcons setsid setuidgid sh sha1sum slattach \
> -	sleep softlimit sort split start-stop-daemon stat strings \
> -	stty su sulogin sum sv svlogd swapoff swapon switch_root \
> -	sync sysctl syslogd tac tail tar taskset tcpsvd tee telnet \
> -	telnetd test tftp tftpd time top touch tr traceroute \
> -	true tty ttysize udhcpc udhcpd udpsvd umount uname uncompress \
> -	unexpand uniq unix2dos unlzma unzip uptime usleep uudecode \
> -	uuencode vconfig vi vlock watch watchdog wc wget which \
> -	who whoami xargs yes zcat zcip"
> -
>      type busybox >/dev/null
>  
>      if [ $? -ne 0 ]; then
> @@ -206,8 +172,14 @@ configure_busybox()
>  	return 1
>      fi
>  
> -    # do hardlink to busybox for the different commands
> -    for i in $functions; do ln $rootfs/bin/busybox $rootfs/bin/$i; done
> +    # symlink busybox for the commands it supports
> +    # it would be nice to just use "chroot $rootfs busybox --install -s /bin"
> +    # but that only works right in a chroot with busybox >= 1.19.0
> +    pushd $rootfs/bin > /dev/null || return 1
> +    ./busybox --help | grep 'Currently defined functions:' -A300 | \
> +      grep -v 'Currently defined functions:' | tr , '\n' | \
> +      xargs -n1 ln -s busybox
> +    popd > /dev/null
>  
>      # relink /sbin/init
>      ln $rootfs/bin/busybox $rootfs/sbin/init
> @@ -215,9 +187,8 @@ configure_busybox()
>      # passwd exec must be setuid
>      chmod +s $rootfs/bin/passwd
>      touch $rootfs/etc/shadow
> -    chroot $rootfs /bin/passwd -d root
> -
> -    echo "No password for 'root', please change !"
> +    echo "setting root passwd to root"
> +    echo "root:root" | chroot $rootfs chpasswd
>  
>      return 0
>  }
> 


-- 
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/20121130/4fed4ccf/attachment.pgp>


More information about the lxc-devel mailing list