I am trying to run my LFS (Linux from scratch) inside a container. I created LFS from its stable version book and using that as a rootfs for my container.
I created the LFS rootfs at /home/manik/toolchain/lfs . I am using this as a rootfs source for my container. I will copy the directories inside my container rootfs from this location. Below is the template that I created from busybox template of lxc package.I named this tempalate as lxc-lfs and copied into the directory /usr/share/lxc/templates #!/bin/bash LXC_MAPPED_UID= LXC_MAPPED_GID= # Make sure the usual locations are in PATH export PATH=$PATH:/usr/sbin:/usr/bin:/sbin:/bin am_in_userns() { [ -e /proc/self/uid_map ] || { echo no; return; } [ "$(wc -l /proc/self/uid_map | awk '{ print $1 }')" -eq 1 ] || { echo yes; return; } line=$(awk '{ print $1 " " $2 " " $3 }' /proc/self/uid_map) [ "$line" = "0 0 4294967295" ] && { echo no; return; } echo yes } configure_lfs() { rootfs=$1 name=$2 lfsroot=$3 res=0 tree=( \ bin \ boot \ dev \ etc \ home \ lib \ media \ mnt \ opt \ proc \ root \ run \ sbin \ srv \ sys \ tmp \ usr \ var ) for d in ${tree[@]} do mkdir -p $rootfs/$d cp -r --preserve $lfsroot/$d/. $rootfs/$d done pushd $rootfs/dev > /dev/null || return 1 mknod -m 666 tty c 5 0 || res=1 mknod -m 666 console c 5 1 || res=1 mknod -m 666 tty0 c 4 0 || res=1 mknod -m 666 tty1 c 4 0 || res=1 mknod -m 666 tty5 c 4 0 || res=1 mknod -m 600 ram0 b 1 0 || res=1 mknod -m 666 null c 1 3 || res=1 mknod -m 666 zero c 1 5 || res=1 mknod -m 666 urandom c 1 9 || res=1 mkdir pts || res=1 popd > /dev/null cat <<EOF >> $rootfs/etc/init.d/rcS #!/bin/sh /bin/syslogd /bin/mount -a EOF # executable chmod 744 $rootfs/etc/init.d/rcS || res=1 # launch rcS first then make a console available # and propose a shell on the tty, the last one is # not needed cat <<EOF >> $rootfs/etc/inittab ::sysinit:/etc/init.d/rcS tty1::respawn:/sbin/agetty -L tty1 115200 vt100 console::askfirst:/bin/sh EOF # writable and readable for other chmod 644 $rootfs/etc/inittab || res=1 # /etc/fstab must exist for "mount -a" touch $rootfs/etc/fstab || res=1 return $res } copy_configuration() { path=$1 rootfs=$2 name=$3 grep -q "^lxc.rootfs" $path/config 2>/dev/null || echo "lxc.rootfs = $rootfs" >> $path/config cat <<EOF >> $path/config lxc.haltsignal = SIGUSR1 lxc.rebootsignal = SIGTERM lxc.utsname = $name lxc.tty = 1 lxc.pts = 1 lxc.cap.drop = sys_module mac_admin mac_override sys_time # When using LXC with apparmor, uncomment the next line to run unconfined: #lxc.aa_profile = unconfined lxc.mount.auto = cgroup:mixed proc:mixed sys:mixed lxc.mount.entry = shm /dev/shm tmpfs defaults 0 0 EOF echo "lxc.mount.entry = /sys/kernel/security sys/kernel/security none ro,bind,optional 0 0" >>$path/config return 0 } in_userns=0 [ $(am_in_userns) = "yes" ] && in_userns=1 usage() { cat <<EOF $1 -h|--help -p|--path=<path> -n|--name=<name> --lfsroot=<lfsroot>[Mandatory option] EOF return 0 } options=$(getopt -o hp:n: -l help,rootfs:,path:,name:,lfsroot: -- "$@") if [ $? -ne 0 ]; then usage $(basename $0) exit 1 fi eval set -- "$options" while true do case "$1" in -h|--help) usage $0 && exit 0;; -p|--path) path=$2; shift 2;; --rootfs) rootfs=$2; shift 2;; --lfsroot) lfsroot=$2; shift 2;; -n|--name) name=$2; shift 2;; --) shift 1; break ;; *) break ;; esac done if [ -z "$lfsroot" ]; then echo "--lfsroot argument is required." exit 1 fi if [ "$(id -u)" != "0" ]; then echo "This script should be run as 'root'" exit 1 fi if [ -z "$path" ]; then echo "'path' parameter is required" exit 1 fi # detect rootfs config="$path/config" rootfs="$path/rootfs" configure_lfs $rootfs $name $lfsroot if [ $? -ne 0 ]; then echo "failed to configure LFS's rootfs" exit 1 fi copy_configuration $path $rootfs $name if [ $? -ne 0 ]; then echo "failed to write lfs-lxc configuration file" exit 1 fi I used the below command to create my container: sudo lxc-create -t lfs -n lfs-lxc-container --lxcpath=/home/manik/toolchain I can successfully use the following command: sudo lxc-attach -n lfs-lxc-container --lxcpath=/home/manik/toolchain I get root bash prompt which is understandable as the man pages for lxc-attach says to run the shell of the user if no specific command is given. However, lxc-console command hangs. I am triggering the command like: sudo lxc-console -n lfs-lxc-container --lxcpath=/home/manik/toolchain Using the above lxc-attach since I get the bash prompt, I executed the command: bash-4.3# ps -efa UID PID PPID C STIME TTY TIME CMD root 1 0 0 22:37 ? 00:00:00 init boot root 29 0 0 23:27 ? 00:00:00 /bin/bash root 30 29 0 23:27 ? 00:00:00 ps -efa Looks like getty is not working/running. Anyone got any idea ? I am not an expert in terminals or its services, so if you know what is wrong please help.
_______________________________________________ lxc-users mailing list lxc-users@lists.linuxcontainers.org http://lists.linuxcontainers.org/listinfo/lxc-users