From 47d1fdcbdceb6ffb96856c00e4b129be3f634823 Mon Sep 17 00:00:00 2001 From: HW42 Date: Fri, 23 Jan 2015 00:41:43 +0100 Subject: [PATCH 01/15] debian: fix for QSB #014 requires up to date qubes-utils --- debian/control | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/debian/control b/debian/control index 749030f..adb6c07 100644 --- a/debian/control +++ b/debian/control @@ -2,14 +2,14 @@ Source: qubes-core-agent Section: admin Priority: extra Maintainer: Davíð Steinn Geirsson -Build-Depends: qubes-utils, libvchan-xen-dev, python, debhelper, quilt, libxen-dev, dh-systemd (>= 1.5) +Build-Depends: qubes-utils (>= 2.0.17), libvchan-xen-dev, python, debhelper, quilt, libxen-dev, dh-systemd (>= 1.5) Standards-Version: 3.9.3 Homepage: http://www.qubes-os.org Vcs-Git: git://git.qubes-os.org/marmarek/core-agent-linux.git Package: qubes-core-agent Architecture: any -Depends: qubes-utils, libvchan-xen, xenstore-utils, iptables-persistent, xserver-xorg-video-dummy, xen-utils-common, ethtool, python2.7, python-gi, init-system-helpers, xdg-user-dirs, iptables, net-tools, initscripts, imagemagick, fakeroot, systemd, locales, sudo, dmsetup, psmisc, ncurses-term, xserver-xorg-core, x11-xserver-utils, xinit, ${shlibs:Depends}, ${misc:Depends} +Depends: qubes-utils (>= 2.0.17), libvchan-xen, xenstore-utils, iptables-persistent, xserver-xorg-video-dummy, xen-utils-common, ethtool, python2.7, python-gi, init-system-helpers, xdg-user-dirs, iptables, net-tools, initscripts, imagemagick, fakeroot, systemd, locales, sudo, dmsetup, psmisc, ncurses-term, xserver-xorg-core, x11-xserver-utils, xinit, ${shlibs:Depends}, ${misc:Depends} Recommends: tinyproxy, gnome-themes-standard, chrony, ntpdate, haveged, network-manager (>= 0.8.1-1), network-manager-gnome, xsettingsd, nautilus-actions, libnotify-bin, notify-osd, gnome-packagekit, gnome-terminal Conflicts: qubes-core-agent-linux, firewalld, qubes-core-vm-sysvinit Description: Qubes core agent From 461a13f88202ec158eebaa707cb3e00593bea9b7 Mon Sep 17 00:00:00 2001 From: HW42 Date: Sat, 24 Jan 2015 22:19:08 +0100 Subject: [PATCH 02/15] debian: postinst: use systemctl mask --- debian/qubes-core-agent.postinst | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/debian/qubes-core-agent.postinst b/debian/qubes-core-agent.postinst index d7dc396..bac2646 100755 --- a/debian/qubes-core-agent.postinst +++ b/debian/qubes-core-agent.postinst @@ -158,9 +158,8 @@ disableSystemdUnits() { if fgrep -q '[Install]' /lib/systemd/system/${unit}; then systemctl disable ${unit} > /dev/null 2>&1 || displayFailedStatus disable ${unit} else - # Forcibly disable - echo "Forcibly disabling: ${unit}" - ln -sf /dev/null /etc/systemd/system/${unit} + echo "Masking service: ${unit}" + systemctl mask ${unit} fi else systemctl disable ${unit} > /dev/null 2>&1 || displayFailedStatus disable ${unit} From 707be87a6fee81b6710bd3af0b4df53cbfc2a304 Mon Sep 17 00:00:00 2001 From: HW42 Date: Sat, 24 Jan 2015 22:41:05 +0100 Subject: [PATCH 03/15] debian: postinst: use dpkg-divert dpkg-divert is not ideal for config files but should work better than direct cp/mv. --- debian/qubes-core-agent.postinst | 8 ++------ debian/qubes-core-agent.prerm | 10 ++++++++++ 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/debian/qubes-core-agent.postinst b/debian/qubes-core-agent.postinst index bac2646..920be66 100755 --- a/debian/qubes-core-agent.postinst +++ b/debian/qubes-core-agent.postinst @@ -208,9 +208,7 @@ case "${1}" in splash-manager \ start-ttys \ tty ; do - if [ -e /etc/init/${init}.conf ]; then - mv -f /etc/init/${init}.conf /etc/init/${init}.conf.disabled - fi + dpkg-divert --divert /etc/init/${init}.conf.qubes-disabled --package qubes-core-agent --rename --add /etc/init/${init}.conf done # Stops Qt form using the MIT-SHM X11 Shared Memory Extension @@ -267,9 +265,7 @@ case "${1}" in # exit 0 #fi - if [ -e /etc/init/serial.conf ] && ! [ -f /var/lib/qubes/serial.orig ] ; then - cp /etc/init/serial.conf /var/lib/qubes/serial.orig - fi + dpkg-divert --divert /etc/init/serial.conf.qubes-orig --package qubes-core-agent --rename --add /etc/init/serial.conf # Remove most of the udev scripts to speed up the VM boot time # Just leave the xen* scripts, that are needed if this VM was diff --git a/debian/qubes-core-agent.prerm b/debian/qubes-core-agent.prerm index dc126e6..502a13a 100755 --- a/debian/qubes-core-agent.prerm +++ b/debian/qubes-core-agent.prerm @@ -42,6 +42,16 @@ if [ "$1" = "remove" ] ; then if [ -e /var/lib/qubes/serial.orig ] ; then mv /var/lib/qubes/serial.orig /etc/init/serial.conf fi + + for init in plymouth-shutdown \ + prefdm \ + splash-manager \ + start-ttys \ + tty ; do + dpkg-divert --divert /etc/init/${init}.conf.qubes-disabled --package qubes-core-agent --remove /etc/init/${init}.conf + done + + dpkg-divert --divert /etc/init/serial.conf.qubes-orig --package qubes-core-agent --remove /etc/init/serial.conf fi # dh_installdeb will replace this with shell code automatically From e73ad96995e887bccd20d3f414e79c624325c94c Mon Sep 17 00:00:00 2001 From: HW42 Date: Mon, 2 Feb 2015 23:33:07 +0100 Subject: [PATCH 04/15] debian: don't generate regular conf files in postinst --- Makefile | 3 +++ debian/qubes-core-agent.postinst | 12 ------------ misc/profile.d_qt_x11_no_mitshm.sh | 2 ++ misc/sudoers.d_qt_x11_no_mitshm | 2 ++ misc/sudoers.d_umask | 3 +++ 5 files changed, 10 insertions(+), 12 deletions(-) create mode 100644 misc/profile.d_qt_x11_no_mitshm.sh create mode 100644 misc/sudoers.d_qt_x11_no_mitshm create mode 100644 misc/sudoers.d_umask diff --git a/Makefile b/Makefile index 125a7a6..8341348 100644 --- a/Makefile +++ b/Makefile @@ -198,5 +198,8 @@ install-deb: install -D -m 644 network/ip6tables $(DESTDIR)/etc/iptables/rules.v6 install -d $(DESTDIR)/etc/sysctl.d install -m 644 network/80-qubes.conf $(DESTDIR)/etc/sysctl.d/ + install -D -m 644 misc/profile.d_qt_x11_no_mitshm.sh $(DESTDIR)/etc/profile.d/qt_x11_no_mitshm.sh + install -D -m 440 misc/sudoers.d_umask $(DESTDIR)/etc/sudoers.d/umask + install -D -m 440 misc/sudoers.d_qt_x11_no_mitshm $(DESTDIR)/etc/sudoers.d/qt_x11_no_mitshm install-vm: install-rh install-common diff --git a/debian/qubes-core-agent.postinst b/debian/qubes-core-agent.postinst index 920be66..e0f7d71 100755 --- a/debian/qubes-core-agent.postinst +++ b/debian/qubes-core-agent.postinst @@ -211,18 +211,6 @@ case "${1}" in dpkg-divert --divert /etc/init/${init}.conf.qubes-disabled --package qubes-core-agent --rename --add /etc/init/${init}.conf done - # Stops Qt form using the MIT-SHM X11 Shared Memory Extension - echo 'export QT_X11_NO_MITSHM=1' > /etc/profile.d/qt_x11_no_mitshm.sh - chmod 0755 /etc/profile.d/qt_x11_no_mitshm.sh - - # Sudo's defualt umask is 077 so set sane default of 022 - # Also don't allow QT to used shared memory to prevent errors - echo 'Defaults umask = 0002' > /etc/sudoers.d/umask - echo 'Defaults umask_override' >> /etc/sudoers.d/umask - chmod 0440 /etc/sudoers.d/umask - echo 'Defaults env_keep += "QT_X11_NO_MITSHM"' > /etc/sudoers.d/qt_x11_no_mitshm - chmod 0440 /etc/sudoers.d/qt_x11_no_mitshm - # Create NetworkManager configuration if we do not have it if ! [ -e /etc/NetworkManager/NetworkManager.conf ]; then echo '[main]' > /etc/NetworkManager/NetworkManager.conf diff --git a/misc/profile.d_qt_x11_no_mitshm.sh b/misc/profile.d_qt_x11_no_mitshm.sh new file mode 100644 index 0000000..1653d48 --- /dev/null +++ b/misc/profile.d_qt_x11_no_mitshm.sh @@ -0,0 +1,2 @@ +# Stops Qt form using the MIT-SHM X11 Shared Memory Extension +export QT_X11_NO_MITSHM=1 diff --git a/misc/sudoers.d_qt_x11_no_mitshm b/misc/sudoers.d_qt_x11_no_mitshm new file mode 100644 index 0000000..c6ddcec --- /dev/null +++ b/misc/sudoers.d_qt_x11_no_mitshm @@ -0,0 +1,2 @@ +# Don't allow QT to used shared memory to prevent errors +Defaults env_keep += "QT_X11_NO_MITSHM" diff --git a/misc/sudoers.d_umask b/misc/sudoers.d_umask new file mode 100644 index 0000000..fea0fab --- /dev/null +++ b/misc/sudoers.d_umask @@ -0,0 +1,3 @@ +# Sudo's defualt umask is 077 so set sane default of 022 +Defaults umask = 0002 +Defaults umask_override From eb18af4cbdaa35bf1bfb7d169c7f85cad6aa767a Mon Sep 17 00:00:00 2001 From: HW42 Date: Mon, 2 Feb 2015 23:37:22 +0100 Subject: [PATCH 05/15] debian: postinst: don't remove /etc/udev/rules.d/* removing /etc/udev/rules.d/* in debian makes no sense since this folder is only for custom udev rules. --- debian/qubes-core-agent.postinst | 22 ---------------------- 1 file changed, 22 deletions(-) diff --git a/debian/qubes-core-agent.postinst b/debian/qubes-core-agent.postinst index e0f7d71..179f667 100755 --- a/debian/qubes-core-agent.postinst +++ b/debian/qubes-core-agent.postinst @@ -255,28 +255,6 @@ case "${1}" in dpkg-divert --divert /etc/init/serial.conf.qubes-orig --package qubes-core-agent --rename --add /etc/init/serial.conf - # Remove most of the udev scripts to speed up the VM boot time - # Just leave the xen* scripts, that are needed if this VM was - # ever used as a net backend (e.g. as a VPN domain in the future) - #echo "--> Removing unnecessary udev scripts..." - mkdir -p /var/lib/qubes/removed-udev-scripts - for f in /etc/udev/rules.d/* - do - if [ $(basename ${f}) == "xen-backend.rules" ] ; then - continue - fi - - if [ $(basename ${f}) == "50-qubes-misc.rules" ] ; then - continue - fi - - if echo ${f} | grep -q qubes; then - continue - fi - - mv ${f} /var/lib/qubes/removed-udev-scripts/ - done - # Create /rw directory mkdir -p /rw From 27208897ae6c175cdce68fc903b3fa36559ce5b2 Mon Sep 17 00:00:00 2001 From: HW42 Date: Mon, 2 Feb 2015 23:41:48 +0100 Subject: [PATCH 06/15] debian: postinst: don't create /rw - it is already part of the package --- debian/qubes-core-agent.postinst | 3 --- 1 file changed, 3 deletions(-) diff --git a/debian/qubes-core-agent.postinst b/debian/qubes-core-agent.postinst index 179f667..e621c36 100755 --- a/debian/qubes-core-agent.postinst +++ b/debian/qubes-core-agent.postinst @@ -255,9 +255,6 @@ case "${1}" in dpkg-divert --divert /etc/init/serial.conf.qubes-orig --package qubes-core-agent --rename --add /etc/init/serial.conf - # Create /rw directory - mkdir -p /rw - # XXX: TODO: Needs to be implemented still #rm -f /etc/mtab #echo "--> Removing HWADDR setting from /etc/sysconfig/network-scripts/ifcfg-eth0" From 91c892fabcf174d8e35a45daf8b6a25e0ec7282f Mon Sep 17 00:00:00 2001 From: HW42 Date: Mon, 2 Feb 2015 23:43:59 +0100 Subject: [PATCH 07/15] debian: postinst: use systemctl to set default target --- debian/qubes-core-agent.postinst | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/debian/qubes-core-agent.postinst b/debian/qubes-core-agent.postinst index e621c36..ecfc599 100755 --- a/debian/qubes-core-agent.postinst +++ b/debian/qubes-core-agent.postinst @@ -273,8 +273,7 @@ case "${1}" in qubes-qrexec-agent.service # Set default "runlevel" - rm -f /etc/systemd/system/default.target - ln -s /lib/systemd/system/multi-user.target /etc/systemd/system/default.target + systemctl set-default multi-user.target # Copy ip(|6)tables into place if they do not already exist in filesystem. # This prevents conflict with iptables-service with fc21 and also put config From ce595bc3d4b1d27e2f799674028d374a50c17854 Mon Sep 17 00:00:00 2001 From: HW42 Date: Mon, 2 Feb 2015 23:45:37 +0100 Subject: [PATCH 08/15] debian: postinst: remove fedora specific code /etc/iptables/rules.* are already part of the packet. The removed code has never done something in debian (since /etc/iptables/rules.* already exists). --- debian/qubes-core-agent.postinst | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/debian/qubes-core-agent.postinst b/debian/qubes-core-agent.postinst index ecfc599..7f9e4c9 100755 --- a/debian/qubes-core-agent.postinst +++ b/debian/qubes-core-agent.postinst @@ -275,17 +275,6 @@ case "${1}" in # Set default "runlevel" systemctl set-default multi-user.target - # Copy ip(|6)tables into place if they do not already exist in filesystem. - # This prevents conflict with iptables-service with fc21 and also put config - # in proper place for debian - mkdir -p '/etc/iptables' - if [ ! -f '/etc/iptables/rules.v4' ]; then - cp -p /usr/lib/qubes/init/iptables /etc/iptables/rules.v4 - fi - if [ ! -f '/etc/iptables/rules.v6' ]; then - cp -p /usr/lib/qubes/init/ip6tables /etc/iptables/rules.v6 - fi - # Process all triggers which will set defaults to wanted values triggerTriggers From 84fb72b3fd6f5c4100808d9735b593db68459d74 Mon Sep 17 00:00:00 2001 From: HW42 Date: Tue, 3 Feb 2015 00:04:12 +0100 Subject: [PATCH 09/15] debian: postinst: enable netfilter-persistent service --- debian/qubes-core-agent.postinst | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/debian/qubes-core-agent.postinst b/debian/qubes-core-agent.postinst index 7f9e4c9..138648c 100755 --- a/debian/qubes-core-agent.postinst +++ b/debian/qubes-core-agent.postinst @@ -317,13 +317,12 @@ case "${1}" in # Enable other systemd units enableSystemdUnits \ - rsyslog.service + rsyslog.service \ + netfilter-persistent.service # XXX: TODO: Needs to be implemented still # These do not exist on debian; maybe a different package name - # iptables.service \ # ntpd.service \ - # ip6tables.service \ ;; abort-upgrade|abort-remove|abort-deconfigure) From 39640e53542777ef0bee79595bd8a025c5a242d8 Mon Sep 17 00:00:00 2001 From: HW42 Date: Tue, 3 Feb 2015 00:08:36 +0100 Subject: [PATCH 10/15] debian: postinst: cleanup --- debian/qubes-core-agent.postinst | 20 -------------------- 1 file changed, 20 deletions(-) diff --git a/debian/qubes-core-agent.postinst b/debian/qubes-core-agent.postinst index 138648c..8c4f7cd 100755 --- a/debian/qubes-core-agent.postinst +++ b/debian/qubes-core-agent.postinst @@ -223,15 +223,6 @@ case "${1}" in rm -f /lib/firmware/updates fi - #if ! grep -q '/etc/yum\.conf\.d/qubes-proxy\.conf' /etc/yum.conf; then - # echo >> /etc/yum.conf - # echo '# Yum does not support inclusion of config dir...' >> /etc/yum.conf - # echo 'include=file:///etc/yum.conf.d/qubes-proxy.conf' >> /etc/yum.conf - #fi - - # Revert 'Prevent unnecessary updates in VMs': - #sed -i -e '/^exclude = kernel/d' /etc/yum.conf - # ensure that hostname resolves to 127.0.1.1 resp. ::1 and that /etc/hosts is # in the form expected by qubes-sysinit.sh for ip in '127\.0\.1\.1' '::1'; do @@ -248,19 +239,8 @@ case "${1}" in chown user:user /home_volatile/user - #if [ "${1}" != 1 ] ; then - # # do the rest of %post thing only when updating for the first time... - # exit 0 - #fi - dpkg-divert --divert /etc/init/serial.conf.qubes-orig --package qubes-core-agent --rename --add /etc/init/serial.conf - # XXX: TODO: Needs to be implemented still - #rm -f /etc/mtab - #echo "--> Removing HWADDR setting from /etc/sysconfig/network-scripts/ifcfg-eth0" - #mv /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-eth0.orig - #grep -v HWADDR /etc/sysconfig/network-scripts/ifcfg-eth0.orig > /etc/sysconfig/network-scripts/ifcfg-eth0 - # Enable Qubes systemd units enableSystemdUnits \ qubes-sysinit.service \ From 9449ac693b64ffe1aa5ca33021be94eb5c489dbb Mon Sep 17 00:00:00 2001 From: HW42 Date: Tue, 3 Feb 2015 03:34:52 +0100 Subject: [PATCH 11/15] debian: postinst: don't start systemd services Starting services in the postinst script doesn't make much sense since the package is normally installed in the template. In addition the start can fail when executed through a trigger. --- debian/qubes-core-agent.postinst | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/debian/qubes-core-agent.postinst b/debian/qubes-core-agent.postinst index 8c4f7cd..2852f29 100755 --- a/debian/qubes-core-agent.postinst +++ b/debian/qubes-core-agent.postinst @@ -179,9 +179,7 @@ enableSystemdUnits() { #displayFailedStatus is-enabled ${unit} } || { echo "Enabling: ${unit}..." - systemctl enable ${unit} > /dev/null 2>&1 && { - systemctl start ${unit} > /dev/null 2>&1 || displayFailedStatus start ${unit} - } || { + systemctl enable ${unit} > /dev/null 2>&1 || { echo "Could not enable: ${unit}" displayFailedStatus enable ${unit} } From f6567eb9b4aad666a55ac85ef2887960a9744a8d Mon Sep 17 00:00:00 2001 From: HW42 Date: Tue, 3 Feb 2015 03:40:21 +0100 Subject: [PATCH 12/15] debian: postinst: enable haveged only if installed --- debian/qubes-core-agent.postinst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/debian/qubes-core-agent.postinst b/debian/qubes-core-agent.postinst index 2852f29..7f00acc 100755 --- a/debian/qubes-core-agent.postinst +++ b/debian/qubes-core-agent.postinst @@ -338,7 +338,7 @@ case "${1}" in # "Enable haveged service" /lib/systemd/system/haveged.service) echo "Enabling haveged service" - enableSystemdUnits haveged.service + [ -e /lib/systemd/system/haveged.service ] && enableSystemdUnits haveged.service ;; # Install overridden serial.conf init script From 92ec06ccf7f3e7f8d49e0cad44e6dabf29169882 Mon Sep 17 00:00:00 2001 From: HW42 Date: Tue, 3 Feb 2015 03:41:10 +0100 Subject: [PATCH 13/15] debian: postinst: remove redundant and misleading trigger output --- debian/qubes-core-agent.postinst | 2 -- 1 file changed, 2 deletions(-) diff --git a/debian/qubes-core-agent.postinst b/debian/qubes-core-agent.postinst index 7f00acc..beeb3f2 100755 --- a/debian/qubes-core-agent.postinst +++ b/debian/qubes-core-agent.postinst @@ -331,13 +331,11 @@ case "${1}" in # Enable cups only when it is real Systemd service /lib/systemd/system/cups.service) - echo "Enabling cups" [ -e /lib/systemd/system/cups.service ] && enableSystemdUnits cups.service ;; # "Enable haveged service" /lib/systemd/system/haveged.service) - echo "Enabling haveged service" [ -e /lib/systemd/system/haveged.service ] && enableSystemdUnits haveged.service ;; From 5660780033c661d8290915d02f312f59dd324caa Mon Sep 17 00:00:00 2001 From: HW42 Date: Tue, 3 Feb 2015 04:36:55 +0100 Subject: [PATCH 14/15] debian: install fstab as normal config file --- Makefile | 4 ++-- debian/qubes-core-agent.preinst | 24 ------------------------ 2 files changed, 2 insertions(+), 26 deletions(-) diff --git a/Makefile b/Makefile index 8341348..f491f9c 100644 --- a/Makefile +++ b/Makefile @@ -74,8 +74,6 @@ install-sysvinit: install-rh: install-systemd install-sysvinit - install -m 0644 -D misc/fstab $(DESTDIR)/etc/fstab - install -D -m 0644 misc/qubes-r2.repo $(DESTDIR)/etc/yum.repos.d/qubes-r2.repo install -d $(DESTDIR)/usr/share/glib-2.0/schemas/ install -m 0644 misc/org.gnome.settings-daemon.plugins.updates.gschema.override $(DESTDIR)/usr/share/glib-2.0/schemas/ @@ -102,6 +100,8 @@ install-rh: install-systemd install-sysvinit install -m 0400 -D network/ip6tables $(DESTDIR)/usr/lib/qubes/init/ip6tables install-common: + install -m 0644 -D misc/fstab $(DESTDIR)/etc/fstab + install -D -m 0440 misc/qubes.sudoers $(DESTDIR)/etc/sudoers.d/qubes install -d $(DESTDIR)/var/lib/qubes diff --git a/debian/qubes-core-agent.preinst b/debian/qubes-core-agent.preinst index a6b96e2..fa05241 100755 --- a/debian/qubes-core-agent.preinst +++ b/debian/qubes-core-agent.preinst @@ -41,10 +41,6 @@ if [ "$1" = "install" ] ; then mkdir -p /lib/modules #mkdir -p -m 0700 /var/log/xen # xen-utils-common should do this - if [ -e /etc/fstab ] ; then - mv /etc/fstab /var/lib/qubes/fstab.orig - fi - # -------------------------------------------------------------------------- # Many Qubes scripts reference /bin/sh expecting the shell to be bash but # in Debian it is dash so some scripts will fail so force an alternate for @@ -62,26 +58,6 @@ if [ "$1" = "install" ] ; then # -------------------------------------------------------------------------- sed -i -e '/^mesg n/d' /root/.profile - # -------------------------------------------------------------------------- - # Update /etc/fstab - # -------------------------------------------------------------------------- - cat > /etc/fstab < Date: Tue, 3 Feb 2015 04:39:50 +0100 Subject: [PATCH 15/15] debian: preinst: remove modification of /etc/modules modules are already handled by systemd and /lib/modules-load/qubes-* --- debian/qubes-core-agent.preinst | 5 ----- 1 file changed, 5 deletions(-) diff --git a/debian/qubes-core-agent.preinst b/debian/qubes-core-agent.preinst index fa05241..0302e29 100755 --- a/debian/qubes-core-agent.preinst +++ b/debian/qubes-core-agent.preinst @@ -48,11 +48,6 @@ if [ "$1" = "install" ] ; then # -------------------------------------------------------------------------- update-alternatives --force --install /bin/sh sh /bin/bash 999 - # -------------------------------------------------------------------------- - # Modules setup - # -------------------------------------------------------------------------- - echo "xen_netfront" >> /etc/modules - # -------------------------------------------------------------------------- # Remove `mesg` from root/.profile? # --------------------------------------------------------------------------