123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499 |
- #!/bin/bash
- # postinst script for core-agent-linux
- #
- # see: dh_installdeb(1)
- set -e
- # The postint script may be called in the following ways:
- # * <postinst> 'configure' <most-recently-configured-version>
- # * <old-postinst> 'abort-upgrade' <new version>
- # * <conflictor's-postinst> 'abort-remove' 'in-favour' <package>
- # <new-version>
- # * <postinst> 'abort-remove'
- # * <deconfigured's-postinst> 'abort-deconfigure' 'in-favour'
- # <failed-install-package> <version> 'removing'
- # <conflicting-package> <version>
- #
- # For details, see http://www.debian.org/doc/debian-policy/ or
- # https://www.debian.org/doc/debian-policy/ch-maintainerscripts.html or
- # the debian-policy package
- # Directory that modified desktop entry config files are stored in
- XDG_CONFIG_QUBES="/usr/share/qubes/xdg"
- # Install overriden services only when original exists
- installOverridenServices() {
- override_dir="${1}"
- service="${2}"
- retval=1
- for unit in ${service}; do
- unit="${unit%%.*}"
- unit_name="$(basename ${unit})"
- if [ -f ${unit}.service ]; then
- echo "Installing override for ${unit}.service..."
- cp ${override_dir}/${unit_name}.service /etc/systemd/system/
- retval=0
- fi
- if [ -f ${unit}.socket -a -f ${override_dir}/${unit}.socket ]; then
- echo "Installing override for ${unit}.socket..."
- cp ${override_dir}/${unit_name}.socket /etc/systemd/system/
- retval=0
- fi
- if [ -f ${unit}.path -a -f ${override_dir}/${unit}.path ]; then
- echo "Installing override for ${unit}.path..."
- cp ${override_dir}/${unit_name}.path /etc/systemd/system/
- retval=0
- fi
- done
- return ${retval}
- }
- reenableNetworkManager() {
- # Disable original service to enable overriden one
- echo "Disabling original service to enable overriden one..."
- disableSystemdUnits ModemManager.service
- disableSystemdUnits NetworkManager.service
- # Disable D-BUS activation of NetworkManager - in AppVm it causes problems (eg PackageKit timeouts)
- echo "Disable D-BUS activation of NetworkManager - in AppVm it causes problems (eg PackageKit timeouts)"
- systemctl mask dbus-org.freedesktop.NetworkManager.service 2> /dev/null || echo "Could not disable D-BUS activation of NetworkManager"
- echo "Re-enabling original service to enable overriden one..."
- enableSystemdUnits ModemManager.service
- enableSystemdUnits NetworkManager.service
- # Fix for https://bugzilla.redhat.com/show_bug.cgi?id=974811
- echo "Fix for https://bugzilla.redhat.com/show_bug.cgi?id=974811"
- enableSystemdUnits NetworkManager-dispatcher.service
- }
- remove_ShowIn() {
- if [ -e "${1}" ]; then
- sed -i '/^\(Not\|Only\)ShowIn/d' "${1}"
- fi
- }
- showIn() {
- desktop_entry="${1}"
- shown_in="${2}"
- message="${shown_in:-"Shown in All;"}"
- desktop_entry_qubes="${XDG_CONFIG_QUBES}/autostart/${desktop_entry##*/}"
- # Make sure Qubes autostart directory exists
- mkdir -p "${XDG_CONFIG_QUBES}/autostart"
- # Desktop entry exists, so move to Qubes directory and modify it
- if [ -e "${desktop_entry}" ]; then
- echo "Desktop Entry Modification - ${message} ${desktop_entry##*/}..."
- cp -pf "${desktop_entry}" "${desktop_entry_qubes}"
- remove_ShowIn "${desktop_entry_qubes}"
- sed -i '/^X-GNOME-Autostart-enabled.*[fF0]/d' "${desktop_entry_qubes}"
- # Will only be '' if shown in all
- if [ ! "${shown_in}x" == "x" ]; then
- echo "${shown_in}" >> "${desktop_entry_qubes}" || true
- fi
- # Desktop entry must have been removed, so also remove from Qubes directory
- else
- echo "Desktop Entry Modification - Remove: ${desktop_entry##*/}..."
- rm -f "${desktop_entry_qubes}"
- fi
- }
- setArrayAsGlobal() {
- local array="$1"
- local export_as="$2"
- local code=$(declare -p "$array")
- local replaced="${code/$array/$export_as}"
- eval ${replaced/declare -/declare -g}
- }
- systemdInfo() {
- unit=${1}
- return_global_var=${2}
- declare -A INFO
- while read line; do
- INFO[${line%%=*}]="${line##*=}"
- done < <(systemctl show ${unit} 2> /dev/null)
- setArrayAsGlobal INFO $return_global_var
- }
- displayFailedStatus() {
- action=${1}
- unit=${2}
- systemdInfo ${unit} info
- echo
- echo "==================================================="
- echo "FAILED: systemd ${action} ${unit}"
- echo "==================================================="
- echo " LoadState = ${info[LoadState]}"
- echo " LoadError = ${info[LoadError]}"
- echo " ActiveState = ${info[ActiveState]}"
- echo " SubState = ${info[SubState]}"
- echo "UnitFileState = ${info[UnitFileState]}"
- echo
- }
- # Disable systemd units
- disableSystemdUnits() {
- for unit in $*; do
- systemctl is-enabled ${unit} > /dev/null 2>&1 && {
- echo "Disabling ${unit}..."
- systemctl is-active ${unit} > /dev/null 2>&1 && {
- systemctl stop ${unit} > /dev/null 2>&1 || displayFailedStatus stop ${unit}
- }
- if [ -f /lib/systemd/system/${unit} ]; then
- 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}
- fi
- else
- systemctl disable ${unit} > /dev/null 2>&1 || displayFailedStatus disable ${unit}
- fi
- } || {
- echo "It appears ${unit} is already disabled!"
- #displayFailedStatus is-disabled ${unit}
- }
- done
- }
- # Enable systemd units
- enableSystemdUnits() {
- for unit in $*; do
- systemctl is-enabled ${unit} > /dev/null 2>&1 && {
- echo "It appears ${unit} is already enabled!"
- #displayFailedStatus is-enabled ${unit}
- } || {
- echo "Enabling: ${unit}..."
- systemctl enable ${unit} > /dev/null 2>&1 && {
- systemctl start ${unit} > /dev/null 2>&1 || displayFailedStatus start ${unit}
- } || {
- echo "Could not enable: ${unit}"
- displayFailedStatus enable ${unit}
- }
- }
- done
- }
- # Manually trigger all triggers to automaticatly configure
- triggerTriggers() {
- path="$(readlink -m ${0})"
- triggers="${path/postinst/triggers}"
- awk '{sub(/[ \t]*#.*/,"")} NF' ${triggers} | while read line
- do
- /bin/bash -c "${0} triggered ${line##* }" || true
- done
- }
- case "${1}" in
- configure)
- # disable some Upstart services
- for init in plymouth-shutdown \
- prefdm \
- 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
- 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
- echo 'plugins = keyfile' >> /etc/NetworkManager/NetworkManager.conf
- echo '[keyfile]' >> /etc/NetworkManager/NetworkManager.conf
- fi
-
- # XXX: Test to see if this will satisify dispatcher dependancy
- if [ ! -e "/lib/systemd/system/org.freedesktop.nm_dispatcher.service" ]; then
- ln -s org.freedesktop.nm_dispatcher.service NetworkManager-dispatcher.service
- fi
- # Remove old firmware updates link
- if [ -L /lib/firmware/updates ]; then
- 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
- if grep -q "^${ip}\(\s\|$\)" /etc/hosts; then
- sed -i "/^${ip}\s/,+0s/\(\s`hostname`\)\+\(\s\|$\)/\2/g" /etc/hosts
- sed -i "s/^${ip}\(\s\|$\).*$/\0 `hostname`/" /etc/hosts
- else
- echo "${ip//\\/} `hostname`" >> /etc/hosts
- fi
- done
- # remove hostname from 127.0.0.1 line (in debian the hostname is by default
- # resolved to 127.0.1.1)
- sed -i "/^127\.0\.0\.1\s/,+0s/\(\s`hostname`\)\+\(\s\|$\)/\2/g" /etc/hosts
- 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
- if [ -e /etc/init/serial.conf ] && ! [ -f /var/lib/qubes/serial.orig ] ; then
- cp /etc/init/serial.conf /var/lib/qubes/serial.orig
- fi
- # 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
- # 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 \
- qubes-misc-post.service \
- qubes-netwatcher.service \
- qubes-network.service \
- qubes-firewall.service \
- qubes-updates-proxy.service \
- qubes-updates-proxy.timer \
- 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
- # Process all triggers which will set defaults to wanted values
- triggerTriggers
- disableSystemdUnits \
- alsa-store.service \
- alsa-restore.service \
- auditd.service \
- avahi.service \
- avahi-daemon.service \
- backuppc.service \
- cpuspeed.service \
- crond.service \
- fedora-autorelabel.service \
- fedora-autorelabel-mark.service \
- ipmi.service \
- hwclock-load.service \
- hwclock-save.service \
- mdmonitor.service \
- multipathd.service \
- openct.service \
- rpcbind.service \
- mcelog.service \
- fedora-storage-init.service \
- fedora-storage-init-late.service \
- plymouth-start.service \
- plymouth-read-write.service \
- plymouth-quit.service \
- plymouth-quit-wait.service \
- sshd.service \
- tcsd.service \
- sm-client.service \
- sendmail.service \
- mdmonitor-takeover.service \
- rngd smartd.service \
- upower.service \
- irqbalance.service \
- colord.service
- rm -f /etc/systemd/system/getty.target.wants/getty@tty*.service
- # Enable other systemd units
- enableSystemdUnits \
- rsyslog.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)
- exit 0
- ;;
- triggered)
- for trigger in ${2}; do
- case "${trigger}" in
- # Update Qubes App Menus
- /usr/share/applications)
- echo "Updating Qubes App Menus..."
- /usr/lib/qubes/qubes-trigger-sync-appmenus.sh || true
- ;;
- # Install overriden services only when original exists
- /lib/systemd/system/NetworkManager.service | \
- /lib/systemd/system/NetworkManager-wait-online.service | \
- /lib/systemd/system/ModemManager.service)
- UNITDIR=/lib/systemd/system
- OVERRIDEDIR=/usr/lib/qubes/init
- installOverridenServices "${OVERRIDEDIR}" "${trigger}"
- if [ $? -eq 0 ]; then
- reenableNetworkManager
- fi
- ;;
- # 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"
- enableSystemdUnits haveged.service
- ;;
- # Install overridden serial.conf init script
- /etc/init/serial.conf)
- echo "Installing over-ridden serial.conf init script..."
- if [ -e /etc/init/serial.conf ]; then
- cp /usr/share/qubes/serial.conf /etc/init/serial.conf
- fi
- ;;
- # Disable SELinux"
- /etc/selinux/config)
- echo "Disabling SELinux..."
- if [ -e /etc/selinux/config ]; then
- sed -e s/^SELINUX=.*$/SELINUX=disabled/ </etc/selinux/config >/etc/selinux/config.processed
- mv /etc/selinux/config.processed /etc/selinux/config
- setenforce 0 2>/dev/null
- fi
- ;;
- # Desktop Entry Modification - Remove existing rules
- /etc/xdg/autostart/gpk-update-icon.desktop | \
- /etc/xdg/autostart/nm-applet.desktop | \
- /etc/xdg/autostart/abrt-applet.desktop | \
- /etc/xdg/autostart/notify-osd.desktop)
- showIn "${trigger}"
- ;;
- # Desktop Entry Modification - Not shown in Qubes
- /etc/xdg/autostart/pulseaudio.desktop | \
- /etc/xdg/autostart/deja-dup-monitor.desktop | \
- /etc/xdg/autostart/imsettings-start.desktop | \
- /etc/xdg/autostart/krb5-auth-dialog.desktop | \
- /etc/xdg/autostart/pulseaudio.desktop | \
- /etc/xdg/autostart/restorecond.desktop | \
- /etc/xdg/autostart/sealertauto.desktop | \
- /etc/xdg/autostart/gnome-power-manager.desktop | \
- /etc/xdg/autostart/gnome-sound-applet.desktop | \
- /etc/xdg/autostart/gnome-screensaver.desktop | \
- /etc/xdg/autostart/orca-autostart.desktop)
- showIn "${trigger}" 'NotShowIn=QUBES;'
- ;;
- # Desktop Entry Modification - Not shown in in DisposableVM
- /etc/xdg/autostart/gcm-apply.desktop)
- showIn "${trigger}" 'NotShowIn=DisposableVM;'
- ;;
- # Desktop Entry Modification - Only shown in AppVM
- /etc/xdg/autostart/gnome-keyring-gpg.desktop | \
- /etc/xdg/autostart/gnome-keyring-pkcs11.desktop | \
- /etc/xdg/autostart/gnome-keyring-secrets.desktop | \
- /etc/xdg/autostart/gnome-keyring-ssh.desktop | \
- /etc/xdg/autostart/gnome-settings-daemon.desktop | \
- /etc/xdg/autostart/user-dirs-update-gtk.desktop | \
- /etc/xdg/autostart/gsettings-data-convert.desktop)
- showIn "${trigger}" 'OnlyShowIn=GNOME;AppVM;'
- ;;
- # Desktop Entry Modification - Only shown in Gnome & UpdateableVM
- /etc/xdg/autostart/gpk-update-icon.desktop)
- showIn "${trigger}" 'OnlyShowIn=GNOME;UpdateableVM;'
- ;;
- # Desktop Entry Modification - Only shown in Gnome & Qubes
- /etc/xdg/autostart/nm-applet.desktop)
- showIn "${trigger}" 'OnlyShowIn=GNOME;QUBES;'
- ;;
- *)
- echo "postinst called with unknown trigger \`${2}'" >&2
- exit 1
- ;;
- esac
- done
- exit 0
- ;;
- *)
- echo "postinst called with unknown argument \`${1}'" >&2
- exit 1
- ;;
- esac
- # dh_installdeb will replace this with shell code automatically
- # generated by other debhelper scripts.
- #DEBHELPER#
- exit 0
- # vim: set ts=4 sw=4 sts=4 et :
|