Skip to contentSkip to conversation

liblxc: lxc-debian expects missing directories

PATCH In review Matt Helsley 2 participants 5 messages Feb 5, 2009 1 message not in the archive

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 liblxc: lxc-debian expects missing directories

lxc-debian fails unless the directories a given rootfs needs already exist. To fix this without relying on any particular function call order we can do: mkdir -p dirname PATH/TO/FILE
before actually making the file.

---
 scripts/lxc-debian.in |    7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)
scripts/lxc-debian.in +6 -1
Index: lxc/scripts/lxc-debian.in
===================================================================
@@ -24,13 +24,14 @@ SSHD_CONFIG="/etc/ssh/sshd_config"
 # custom selinux
 
 write_debian_selinux() {
-    mkdir $ROOTFS/selinux
+    mkdir -p $ROOTFS/selinux
     echo 0 > $ROOTFS/selinux/enforce
 }
 
 # custom fstab
 
 write_debian_fstab() {
+mkdir -p `dirname $ROOTFS/$FSTAB`
 cat <<EOF > $ROOTFS/$FSTAB
 tmpfs  /dev/shm   tmpfs  defaults  0 0
 EOF
@@ -39,6 +40,7 @@ EOF
 # custom inittab
 
 write_debian_inittab() {
+mkdir -p `dirname $ROOTFS/$INITTAB`
 cat <<EOF > $ROOTFS/$INITTAB
 id:3:initdefault:
 si::sysinit:/etc/init.d/rcS
@@ -62,6 +64,7 @@ EOF
 # custom network configuration
 
 write_debian_network() {
+mkdir -p `dirname $ROOTFS/$INTERFACES`
 cat <<EOF > $ROOTFS/$INTERFACES
 auto eth0 lo
 iface eth0 inet static
@@ -76,6 +79,7 @@ EOF
 # custom hostname
 
 write_debian_hostname() {
+mkdir -p `dirname $ROOTFS/$HOSTNAME`
 cat <<EOF > $ROOTFS/$HOSTNAME
 $UTSNAME
 EOF
@@ -84,6 +88,7 @@ EOF
 # custom sshd configuration file
 
 write_debian_sshd_config() {
+mkdir -p `dirname $ROOTFS/$SSHD_CONFIG`
 cat <<EOF > $ROOTFS/$SSHD_CONFIG
 Port 22
 Protocol 2
#1 lore raw
Quoted 8 lines · Matt Helsley

lxc-debian fails unless the directories a given rootfs needs already exist. To fix this without relying on any particular function call order we can do: mkdir -p dirname PATH/TO/FILE
before actually making the file.

---

Do you have an example on how that happens ?
When the script is called for creation, the rootfs is created with debootstrap, making sure the expected directories are there, no ? It is not a big deal to make sure the directories are there, but I would like to understand :)

Quoted 60 lines
 scripts/lxc-debian.in |    7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

Index: lxc/scripts/lxc-debian.in
===================================================================

scripts/lxc-debian.in +6 -1
@@ -24,13 +24,14 @@ SSHD_CONFIG="/etc/ssh/sshd_config"
 # custom selinux
 
 write_debian_selinux() {
-    mkdir $ROOTFS/selinux
+    mkdir -p $ROOTFS/selinux
     echo 0 > $ROOTFS/selinux/enforce
 }
 
 # custom fstab
 
 write_debian_fstab() {
+mkdir -p `dirname $ROOTFS/$FSTAB`
 cat <<EOF > $ROOTFS/$FSTAB
 tmpfs  /dev/shm   tmpfs  defaults  0 0
 EOF
@@ -39,6 +40,7 @@ EOF
 # custom inittab
 
 write_debian_inittab() {
+mkdir -p `dirname $ROOTFS/$INITTAB`
 cat <<EOF > $ROOTFS/$INITTAB
 id:3:initdefault:
 si::sysinit:/etc/init.d/rcS
@@ -62,6 +64,7 @@ EOF
 # custom network configuration
 
 write_debian_network() {
+mkdir -p `dirname $ROOTFS/$INTERFACES`
 cat <<EOF > $ROOTFS/$INTERFACES
 auto eth0 lo
 iface eth0 inet static
@@ -76,6 +79,7 @@ EOF
 # custom hostname
 
 write_debian_hostname() {
+mkdir -p `dirname $ROOTFS/$HOSTNAME`
 cat <<EOF > $ROOTFS/$HOSTNAME
 $UTSNAME
 EOF
@@ -84,6 +88,7 @@ EOF
 # custom sshd configuration file
 
 write_debian_sshd_config() {
+mkdir -p `dirname $ROOTFS/$SSHD_CONFIG`
 cat <<EOF > $ROOTFS/$SSHD_CONFIG
 Port 22
 Protocol 2
#3 lore raw
In reply to a message not in the archive
Quoted 10 lines · Daniel Lezcano
Quoted 8 lines · Matt Helsley

lxc-debian fails unless the directories a given rootfs needs already exist. To fix this without relying on any particular function call order we can do: mkdir -p dirname PATH/TO/FILE
before actually making the file.

---

Do you have an example on how that happens ?

Configure lxc with a non-/ prefix:

./configure --prefix=/usr

Cheers,
-Matt

#4 lore raw
Quoted 7 lines · Matt Helsley
Quoted 6 lines · Daniel Lezcano
Quoted 5 lines · Matt Helsley

lxc-debian fails unless the directories a given rootfs needs already exist. To fix this without relying on any particular function call order we can do: mkdir -p dirname PATH/TO/FILE
before actually making the file.

Quoted 8 lines
Quoted 4 lines
Quoted 3 lines

---

Do you have an example on how that happens ?

Configure lxc with a non-/ prefix:

./configure --prefix=/usr

This explanation is wrong, sorry.

The patch isn't necessary -- take a look at the one that handles debootstrap interruption/failure. Basically debootstrap would fail (apache doesn't exist in lenny I found out) and I'd have to go cleaning up lxc-debian directories by hand before I could retry. If I missed something one time then then lxc behaved oddly. This got me past some of that odd behavior (only to fail later of course).

Cheers,
-Matt

#5 lore raw
Quoted 22 lines · Matt Helsley
Quoted 13 lines · Matt Helsley
Quoted 11 lines · Daniel Lezcano
Quoted 9 lines · Matt Helsley

lxc-debian fails unless the directories a given rootfs needs already exist. To fix this without relying on any particular function call order we can do: mkdir -p dirname PATH/TO/FILE
before actually making the file.

---

Quoted 6 lines
Quoted 2 lines

Do you have an example on how that happens ?

Configure lxc with a non-/ prefix:

./configure --prefix=/usr

Quoted 9 lines

This explanation is wrong, sorry.

The patch isn't necessary -- take a look at the one that handles debootstrap interruption/failure. Basically debootstrap would fail (apache doesn't exist in lenny I found out) and I'd have to go cleaning up lxc-debian directories by hand before I could retry. If I missed something one time then then lxc behaved oddly. This got me past some of that odd behavior (only to fail later of course).

Ok, I understand why you tried to force the directory creation. I will not apply this one, the next patch you sent with the partial debootstrap will fix this.

Thanks Matt.