Git Repositories

Fix some specific packages. master
authorCyrille Pontvieux <jrd@enialis.net>
Mon, 1 Jun 2015 23:17:59 +0000 (01:17 +0200)
committerCyrille Pontvieux <jrd@enialis.net>
Mon, 1 Jun 2015 23:17:59 +0000 (01:17 +0200)
Some packages installation does not run correctly when the host is not a Slackware derivate.

lxc-salix

index 3d93efd..0955486 100755 (executable)
--- a/lxc-salix
+++ b/lxc-salix
@@ -182,7 +182,7 @@ installpkg() {
     ipkg_shortname=$(basename "$ipkg_pkg" $(echo "$ipkg_pkg" | sed 's/.*\(\.t[glbx]z\)$/\1/'))
     ipkg_basename=$(echo "$ipkg_shortname" | sed 's/\(.*\)-[^-]\+-[^-]\+-[^-]\+/\1/')
     ipkg_compressed="$(du -sh "$(readlink -f $ipkg_pkg)" | cut -f 1)"
-    tar xvif $ipkg_pkg > $tmp
+    tar -x -v -i --numeric-owner -f $ipkg_pkg > $tmp
     ipkg_log="$ipkg_root/var/log"
     for PKGDBDIR in packages removed_packages removed_scripts scripts setup ; do
       if [ ! -d $ipkg_log/$PKGDBDIR ]; then
@@ -209,6 +209,36 @@ installpkg() {
     rm -f $tmp
     [ -x /sbin/ldconfig ] && /sbin/ldconfig
     if [ -f install/doinst.sh ]; then
+      if echo $ipkg_shortname | grep -q '^glibc-[0-9]'; then
+        # glibc needs some tricks
+        sed -r -i '
+s,\[ -x /sbin/ldconfig,[ false,;
+s,\[ ! -x /sbin/ldconfig,[ false,;
+s,\[ -x /sbin/telinit,[ false,;' install/doinst.sh
+        ( cd lib64/incoming
+          for file in * ; do
+            cp -a $file ..
+          done
+        )
+      elif echo $ipkg_shortname | grep -q '^etc-[0-9]'; then
+        # etc package has some etc/passwd and etc/group name reference that
+        # cannot be right without a chroot and it's not possible at this
+        # stage yet. So hardcode replace names with numbers (this will not
+        # change in Slackware, this has beend fixed for good).
+        sed -i 's/chown root[.:]utmp/chown 0:22/; s/chown root[.:]shadow/chown 0:43/;' install/doinst.sh
+      elif echo $ipkg_shortname | grep -q '^at-[0-9]'; then
+        # same thing as etc package
+        sed -i 's/chown daemon[.:]daemon/chown 2:2/;' install/doinst.sh
+      elif echo $ipkg_shortname | grep -q '^nfs-utils-[0-9]'; then
+        # same thing as etc package
+        sed -i 's/chown -R rpc[.:]rpc/chown -R 32:32/;' install/doinst.sh
+      elif echo $ipkg_shortname | grep -q '^slocate-[0-9]'; then
+        # same thing as etc package
+        sed -i 's/chown root[.:]slocate/chown 0:21/;' install/doinst.sh
+      elif echo $ipkg_shortname | grep -q '^utempter-[0-9]'; then
+        # same thing as etc package
+        sed -i 's/chown root[.:]utmp/chown 0:22/;' install/doinst.sh
+      fi
       sh install/doinst.sh -install || true
       cp install/doinst.sh $ipkg_log/scripts/$ipkg_shortname
       chmod 755 $ipkg_log/scripts/$ipkg_shortname
@@ -248,40 +278,31 @@ install_salix() {
 
 configure_salix() {
   echo "Configuring..." ; echo
-  # the next part contains excerpts taken from SeTconfig (written by
+  # the next part contains extract taken from SeTconfig (written by
   # Patrick Volkerding) from the slackware setup disk.
-  # but before pasting them just set a variable to use them as they are
-  T_PX=$rootfs_path
-  ( cd $T_PX ; chmod 755 ./ )
-  ( cd $T_PX ; chmod 755 ./var )
-  if [ -d $T_PX/usr/src/linux ]; then
-    chmod 755 $T_PX/usr/src/linux
-  fi
-  if [ ! -d $T_PX/proc ]; then
-    mkdir $T_PX/proc
-    chown root.root $T_PX/proc
-  fi
-  if [ ! -d $T_PX/sys ]; then
-    mkdir $T_PX/sys
-    chown root.root $T_PX/sys
-  fi
-  chmod 1777 $T_PX/tmp
-  if [ ! -d $T_PX/var/spool/mail ]; then
-    mkdir -p $T_PX/var/spool/mail
-    chmod 755 $T_PX/var/spool
-    chown root.mail $T_PX/var/spool/mail
-    chmod 1777 $T_PX/var/spool/mail
+  T_PX=
+  ( cd $rootfs_path ; chmod 755 ./ )
+  ( cd $rootfs_path ; chmod 755 ./var )
+  [ -d $rootfs_path/usr/src/linux ] && chmod 755 $rootfs_path/usr/src/linux
+  [ -d $rootfs_path/proc ] || mkdir $rootfs_path/proc
+  [ -d $rootfs_path/sys ] || mkdir $rootfs_path/sys
+  chmod 1777 $rootfs_path/tmp
+  if [ ! -d $rootfs_path/var/spool/mail ]; then
+    mkdir -p $rootfs_path/var/spool/mail
+    chmod 755 $rootfs_path/var/spool
+    chown 0:12 $rootfs_path/var/spool/mail
+    chmod 1777 $rootfs_path/var/spool/mail
   fi
-  echo "#!/bin/sh" > $T_PX/etc/rc.d/rc.keymap
-  echo "# Load the keyboard map.  More maps are in /usr/share/kbd/keymaps." >> $T_PX/etc/rc.d/rc.keymap
-  echo "if [ -x /usr/bin/loadkeys ]; then" >> $T_PX/etc/rc.d/rc.keymap
-  echo "  /usr/bin/loadkeys us" >> $T_PX/etc/rc.d/rc.keymap
-  echo "fi" >> $T_PX/etc/rc.d/rc.keymap
-  chmod 755 $T_PX/etc/rc.d/rc.keymap
+  echo "#!/bin/sh" > $rootfs_path/etc/rc.d/rc.keymap
+  echo "# Load the keyboard map.  More maps are in /usr/share/kbd/keymaps." >> $rootfs_path/etc/rc.d/rc.keymap
+  echo "if [ -x /usr/bin/loadkeys ]; then" >> $rootfs_path/etc/rc.d/rc.keymap
+  echo "  /usr/bin/loadkeys us" >> $rootfs_path/etc/rc.d/rc.keymap
+  echo "fi" >> $rootfs_path/etc/rc.d/rc.keymap
+  chmod 755 $rootfs_path/etc/rc.d/rc.keymap
   # network configuration is left to the user
   # editing /etc/rc.d/rc.inet1.conf and /etc/resolv.conf of the container
   # just set the hostname
-  echo "${UTSNAME}" > $rootfs_path/etc/HOSTNAME
+  echo "${name}" > $rootfs_path/etc/HOSTNAME
   cp $rootfs_path/etc/HOSTNAME $rootfs_path/etc/hostname
   # make needed devices, from Chris Willing's MAKEDEV.sh
   # http://www.vislab.uq.edu.au/howto/lxc/MAKEDEV.sh
@@ -383,7 +404,7 @@ fi # end container check
 fi
 EOF
   chmod +x $rootfs_path/.rc.d-lxcify
-  (cd $rootfs_path ./.rc.d-lxcify)
+  (cd $rootfs_path && ./.rc.d-lxcify)
   echo "lxc container" >>  $rootfs_path/etc/motd
   # reduce the number of local consoles: two should be enough
   sed -i '/^c3\|^c4\|^c5\|^c6/s/^/# /' $rootfs_path/etc/inittab
@@ -422,8 +443,8 @@ EOF
   # add a message to rc.local that confirms successful container startup
   echo "if [ -e /.container ]; then echo; echo \"* container $name started. *\"; echo; fi" >> $rootfs_path/etc/rc.d/rc.local
   # set a default combination for the luggage
-  echo "root:$root_password" | chroot $rootfs_path chpasswd
-  echo "Root password is '$root_password', please change it!"
+  echo "root:$root_password" | chroot $rootfs_path /usr/sbin/chpasswd
+  echo "Root password is '$root_password', change it or disable it!"
   return 0
 }
 
@@ -529,7 +550,7 @@ trap revert SIGHUP SIGINT SIGTERM
 
 copy_configuration
 if [ $? -ne 0 ]; then
-  echo "failed write configuration file" >&2
+  echo "failed to write the configuration file" >&2
   exit 1
 fi
 
@@ -541,7 +562,7 @@ fi
 
 configure_salix
 if [ $? -ne 0 ]; then
-  echo "Failed to configure Salix for a container" >&2
+  echo "Failed to configure Salix as a container" >&2
   exit 1
 fi