vm/init: introduce SystemD startup scripts
This commit is contained in:
parent
5573200c9d
commit
5e0cde15de
@ -84,6 +84,13 @@ install -D misc/fstab $RPM_BUILD_ROOT/etc/fstab
|
|||||||
install -d $RPM_BUILD_ROOT/etc/init.d
|
install -d $RPM_BUILD_ROOT/etc/init.d
|
||||||
install vm-init.d/* $RPM_BUILD_ROOT/etc/init.d/
|
install vm-init.d/* $RPM_BUILD_ROOT/etc/init.d/
|
||||||
|
|
||||||
|
install -d $RPM_BUILD_ROOT/lib/systemd/system $RPM_BUILD_ROOT/usr/lib/qubes/init
|
||||||
|
install -m 0755 vm-systemd/*.sh $RPM_BUILD_ROOT/usr/lib/qubes/init/
|
||||||
|
install -m 0644 vm-systemd/qubes-*.service $RPM_BUILD_ROOT/lib/systemd/system/
|
||||||
|
install -m 0644 vm-systemd/NetworkManager.service $RPM_BUILD_ROOT/usr/lib/qubes/init/
|
||||||
|
install -m 0644 vm-systemd/cups.service $RPM_BUILD_ROOT/usr/lib/qubes/init/
|
||||||
|
install -m 0644 vm-systemd/ntpd.service $RPM_BUILD_ROOT/usr/lib/qubes/init/
|
||||||
|
|
||||||
install -D -m 0440 misc/qubes.sudoers $RPM_BUILD_ROOT/etc/sudoers.d/qubes
|
install -D -m 0440 misc/qubes.sudoers $RPM_BUILD_ROOT/etc/sudoers.d/qubes
|
||||||
install -D misc/qubes.repo $RPM_BUILD_ROOT/etc/yum.repos.d/qubes.repo
|
install -D misc/qubes.repo $RPM_BUILD_ROOT/etc/yum.repos.d/qubes.repo
|
||||||
install -D misc/serial.conf $RPM_BUILD_ROOT/usr/lib/qubes/serial.conf
|
install -D misc/serial.conf $RPM_BUILD_ROOT/usr/lib/qubes/serial.conf
|
||||||
@ -382,6 +389,7 @@ Group: Qubes
|
|||||||
Requires: upstart
|
Requires: upstart
|
||||||
Requires: qubes-core-vm
|
Requires: qubes-core-vm
|
||||||
Provides: qubes-core-vm-init-scripts
|
Provides: qubes-core-vm-init-scripts
|
||||||
|
Conflicts: qubes-core-vm-systemd
|
||||||
|
|
||||||
%description sysvinit
|
%description sysvinit
|
||||||
The Qubes core startup configuration for SysV init (or upstart).
|
The Qubes core startup configuration for SysV init (or upstart).
|
||||||
@ -437,3 +445,100 @@ if [ "$1" = 0 ] ; then
|
|||||||
chkconfig qubes_firewall off
|
chkconfig qubes_firewall off
|
||||||
chkconfig qubes_netwatcher off
|
chkconfig qubes_netwatcher off
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
%package systemd
|
||||||
|
Summary: Qubes unit files for SystemD init style
|
||||||
|
License: GPL v2 only
|
||||||
|
Group: Qubes
|
||||||
|
Requires: systemd
|
||||||
|
Requires: qubes-core-vm
|
||||||
|
Provides: qubes-core-vm-init-scripts
|
||||||
|
Conflicts: qubes-core-vm-sysvinit
|
||||||
|
|
||||||
|
%description systemd
|
||||||
|
The Qubes core startup configuration for SystemD init.
|
||||||
|
|
||||||
|
%files systemd
|
||||||
|
%defattr(-,root,root,-)
|
||||||
|
/lib/systemd/system/qubes-dvm.service
|
||||||
|
/lib/systemd/system/qubes-meminfo-writer.service
|
||||||
|
/lib/systemd/system/qubes-qrexec-agent.service
|
||||||
|
/lib/systemd/system/qubes-misc-post.service
|
||||||
|
/lib/systemd/system/qubes-firewall.service
|
||||||
|
/lib/systemd/system/qubes-netwatcher.service
|
||||||
|
/lib/systemd/system/qubes-network.service
|
||||||
|
/lib/systemd/system/qubes-sysinit.service
|
||||||
|
%dir /usr/lib/qubes/init
|
||||||
|
/usr/lib/qubes/init/prepare-dvm.sh
|
||||||
|
/usr/lib/qubes/init/network-proxy-setup.sh
|
||||||
|
/usr/lib/qubes/init/misc-post.sh
|
||||||
|
/usr/lib/qubes/init/qubes-sysinit.sh
|
||||||
|
/usr/lib/qubes/init/NetworkManager.service
|
||||||
|
/usr/lib/qubes/init/cups.service
|
||||||
|
/usr/lib/qubes/init/ntpd.service
|
||||||
|
%ghost %attr(0644,root,root) /etc/systemd/system/NetworkManager.service
|
||||||
|
%ghost %attr(0644,root,root) /etc/systemd/system/cups.service
|
||||||
|
|
||||||
|
%post systemd
|
||||||
|
|
||||||
|
for srv in qubes-dvm qubes-meminfo-writer qubes-qrexec-agent qubes-sysinit qubes-misc-post qubes-netwatcher qubes-network; do
|
||||||
|
/bin/systemctl enable $srv.service
|
||||||
|
done
|
||||||
|
|
||||||
|
# Install overriden services only when original exists
|
||||||
|
for srv in cups NetworkManager ntpd; do
|
||||||
|
if [ -f /lib/systemd/system/$srv.service ]; then
|
||||||
|
cp /usr/lib/qubes/init/$srv.service /etc/systemd/system/$srv.service
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# Set default "runlevel"
|
||||||
|
rm -f /etc/systemd/system/default.target
|
||||||
|
ln -s /lib/systemd/system/multi-user.target /etc/systemd/system/default.target
|
||||||
|
|
||||||
|
# Services to disable
|
||||||
|
#echo "--> Turning off unnecessary services..."
|
||||||
|
# FIXME: perhaps there is more elegant way to do this?
|
||||||
|
for f in /etc/init.d/*
|
||||||
|
do
|
||||||
|
srv=`basename $f`
|
||||||
|
[ $srv = 'functions' ] && continue
|
||||||
|
[ $srv = 'killall' ] && continue
|
||||||
|
[ $srv = 'halt' ] && continue
|
||||||
|
[ $srv = 'single' ] && continue
|
||||||
|
[ $srv = 'reboot' ] && continue
|
||||||
|
[ $srv = 'qubes_gui' ] && continue
|
||||||
|
chkconfig $srv off
|
||||||
|
done
|
||||||
|
|
||||||
|
DISABLE_SERVICES="alsa-store alsa-restore auditd backuppc cpuspeed crond dbus-org.freedesktop.Avahi"
|
||||||
|
DISABLE_SERVICES="$DISABLE_SERVICES fedora-autorelabel fedora-autorelabel-mark ipmi hwclock-load hwclock-save"
|
||||||
|
DISABLE_SERVICES="$DISABLE_SERVICES mdmonitor multipathd openct rpcbind mcelog fedora-storage-init fedora-storage-init-late"
|
||||||
|
DISABLE_SERVICES="$DISABLE_SERVICES plymouth-start plymouth-read-write plymouth-quit plymouth-quit-wait"
|
||||||
|
for srv in $DISABLE_SERVICES; do
|
||||||
|
if [ -f /lib/systemd/system/$srv.service ]; then
|
||||||
|
if fgrep -q '[Install]' /lib/systemd/system/$srv.service; then
|
||||||
|
/bin/systemctl disable $srv.service
|
||||||
|
else
|
||||||
|
# forcibly disable
|
||||||
|
ln -sf /dev/null /etc/systemd/system/$srv.service
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
rm -f /etc/systemd/system/getty.target.wants/getty@tty*.service
|
||||||
|
|
||||||
|
# Enable some services
|
||||||
|
/bin/systemctl enable iptables.service
|
||||||
|
/bin/systemctl enable rsyslog.service
|
||||||
|
|
||||||
|
%postun systemd
|
||||||
|
|
||||||
|
#Do not run this part on upgrades
|
||||||
|
if [ "$1" != 0 ] ; then
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
for srv in qubes-dvm qubes-meminfo-writer qubes-qrexec-agent qubes-sysinit qubes-misc-post qubes-netwatcher qubes-network; do
|
||||||
|
/bin/systemctl disable $srv.service
|
||||||
|
do
|
||||||
|
3
vm-systemd/NetworkManager.service
Normal file
3
vm-systemd/NetworkManager.service
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
.include /lib/systemd/system/NetworkManager.service
|
||||||
|
[Unit]
|
||||||
|
ConditionPathExists=/var/run/qubes-service/network-manager
|
3
vm-systemd/cups.service
Normal file
3
vm-systemd/cups.service
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
.include /lib/systemd/system/cups.service
|
||||||
|
[Unit]
|
||||||
|
ConditionPathExists=/var/run/qubes-service/cups
|
60
vm-systemd/misc-post.sh
Executable file
60
vm-systemd/misc-post.sh
Executable file
@ -0,0 +1,60 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# Set IP address again (besides action in udev rules); this is needed by
|
||||||
|
# DispVM (to override DispVM-template IP) and in case when qubes_ip was
|
||||||
|
# called by udev before loading evtchn kernel module - in which case
|
||||||
|
# xenstore-read fails
|
||||||
|
INTERFACE=eth0 /usr/lib/qubes/setup_ip
|
||||||
|
|
||||||
|
if [ -e /dev/xvdb ] ; then
|
||||||
|
mount /rw
|
||||||
|
|
||||||
|
if ! [ -d /rw/home ] ; then
|
||||||
|
echo
|
||||||
|
echo "--> Virgin boot of the VM: Linking /home to /rw/home"
|
||||||
|
|
||||||
|
mkdir -p /rw/config
|
||||||
|
touch /rw/config/rc.local
|
||||||
|
|
||||||
|
mkdir -p /rw/home
|
||||||
|
cp -a /home.orig/user /home
|
||||||
|
|
||||||
|
mkdir -p /rw/usrlocal
|
||||||
|
cp -a /usr/local.orig/* /usr/local
|
||||||
|
|
||||||
|
touch /var/lib/qubes/first_boot_completed
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
[ -x /rw/config/rc.local ] && /rw/config/rc.local
|
||||||
|
|
||||||
|
if ! [ -f /home/user/.gnome2/nautilus-scripts/.scripts_created ] ; then
|
||||||
|
echo "Creating symlinks for nautilus actions..."
|
||||||
|
su user -c 'mkdir -p /home/user/.gnome2/nautilus-scripts'
|
||||||
|
su user -c 'ln -s /usr/lib/qubes/qvm-copy-to-vm.gnome /home/user/.gnome2/nautilus-scripts/"Copy to other AppVM"'
|
||||||
|
su user -c 'ln -s /usr/bin/qvm-open-in-dvm /home/user/.gnome2/nautilus-scripts/"Open in DisposableVM"'
|
||||||
|
su user -c 'touch /home/user/.gnome2/nautilus-scripts/.scripts_created'
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! [ -f /home/user/.gnome2/nautilus-scripts/.scripts_created2 ] ; then
|
||||||
|
# as we have recently renamed tools, the symlinks would need to be fixed for older templates
|
||||||
|
su user -c 'ln -sf /usr/lib/qubes/qvm-copy-to-vm.gnome /home/user/.gnome2/nautilus-scripts/"Copy to other AppVM"'
|
||||||
|
su user -c 'ln -sf /usr/bin/qvm-open-in-dvm /home/user/.gnome2/nautilus-scripts/"Open in DisposableVM"'
|
||||||
|
su user -c 'touch /home/user/.gnome2/nautilus-scripts/.scripts_created2'
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Start services which haven't own proper systemd unit:
|
||||||
|
|
||||||
|
# Start AppVM specific services
|
||||||
|
if [ ! -f /etc/systemd/system/cups.service ]; then
|
||||||
|
if [ -f /var/run/qubes-service/cups ]; then
|
||||||
|
/sbin/service cups start
|
||||||
|
# Allow also notification icon
|
||||||
|
sed -i -e '/^NotShowIn=.*QUBES/s/;QUBES//' /etc/xdg/autostart/print-applet.desktop
|
||||||
|
else
|
||||||
|
# Disable notification icon
|
||||||
|
sed -i -e '/QUBES/!s/^NotShowIn=.*/\1QUBES;/' /etc/xdg/autostart/print-applet.desktop
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
exit 0
|
14
vm-systemd/network-proxy-setup.sh
Executable file
14
vm-systemd/network-proxy-setup.sh
Executable file
@ -0,0 +1,14 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# Setup gateway for all the VMs this netVM is serviceing...
|
||||||
|
network=$(/usr/bin/xenstore-read qubes_netvm_network 2>/dev/null)
|
||||||
|
if [ "x$network" != "x" ]; then
|
||||||
|
gateway=$(/usr/bin/xenstore-read qubes_netvm_gateway)
|
||||||
|
netmask=$(/usr/bin/xenstore-read qubes_netvm_netmask)
|
||||||
|
secondary_dns=$(/usr/bin/xenstore-read qubes_netvm_secondary_dns)
|
||||||
|
modprobe netbk 2> /dev/null || modprobe xen-netback
|
||||||
|
echo "NS1=$gateway" > /var/run/qubes/qubes_ns
|
||||||
|
echo "NS2=$secondary_dns" >> /var/run/qubes/qubes_ns
|
||||||
|
/usr/lib/qubes/qubes_setup_dnat_to_ns
|
||||||
|
echo "1" > /proc/sys/net/ipv4/ip_forward
|
||||||
|
fi
|
3
vm-systemd/ntpd.service
Normal file
3
vm-systemd/ntpd.service
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
.include /lib/systemd/system/ntpd.service
|
||||||
|
[Unit]
|
||||||
|
ConditionPathExists=/var/run/qubes-service/ntpd
|
30
vm-systemd/prepare-dvm.sh
Executable file
30
vm-systemd/prepare-dvm.sh
Executable file
@ -0,0 +1,30 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
possibly_run_save_script()
|
||||||
|
{
|
||||||
|
ENCODED_SCRIPT=$(xenstore-read qubes_save_script)
|
||||||
|
if [ -z "$ENCODED_SCRIPT" ] ; then return ; fi
|
||||||
|
echo $ENCODED_SCRIPT|perl -e 'use MIME::Base64 qw(decode_base64); local($/) = undef;print decode_base64(<STDIN>)' >/tmp/qubes_save_script
|
||||||
|
chmod 755 /tmp/qubes_save_script
|
||||||
|
Xorg -config /etc/X11/xorg-preload-apps.conf :0 &
|
||||||
|
sleep 2
|
||||||
|
DISPLAY=:0 su - user -c /tmp/qubes_save_script
|
||||||
|
killall Xorg
|
||||||
|
}
|
||||||
|
|
||||||
|
if xenstore-read qubes_save_request 2>/dev/null ; then
|
||||||
|
ln -sf /home_volatile /home
|
||||||
|
possibly_run_save_script
|
||||||
|
touch /etc/this_is_dvm
|
||||||
|
dmesg -c >/dev/null
|
||||||
|
free | grep Mem: |
|
||||||
|
(read a b c d ; xenstore-write device/qubes_used_mem $c)
|
||||||
|
# we're still running in DispVM template
|
||||||
|
echo "Waiting for save/restore..."
|
||||||
|
# ... wait until qubes_restore.c (in Dom0) recreates VM-specific keys
|
||||||
|
while ! xenstore-read qubes_restore_complete 2>/dev/null ; do
|
||||||
|
usleep 10
|
||||||
|
done
|
||||||
|
echo Back to life.
|
||||||
|
fi
|
||||||
|
|
12
vm-systemd/qubes-dvm.service
Normal file
12
vm-systemd/qubes-dvm.service
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Prepare Qubes DispVM Template
|
||||||
|
ConditionPathExists=/var/run/qubes-service/qubes-dvm
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=oneshot
|
||||||
|
RemainAfterExit=yes
|
||||||
|
ExecStart=/usr/lib/qubes/init/prepare-dvm.sh
|
||||||
|
StandardOutput=syslog
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
10
vm-systemd/qubes-firewall.service
Normal file
10
vm-systemd/qubes-firewall.service
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Qubes firewall updater
|
||||||
|
ConditionPathExists=/var/run/qubes-service/qubes-firewall
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
ExecStart=/usr/sbin/qubes_firewall
|
||||||
|
StandardOutput=syslog
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
12
vm-systemd/qubes-meminfo-writer.service
Normal file
12
vm-systemd/qubes-meminfo-writer.service
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Qubes memory information reporter
|
||||||
|
ConditionPathExists=/var/run/qubes-service/meminfo-writer
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=forking
|
||||||
|
ExecStart=/usr/lib/qubes/meminfo-writer 30000 100000 /var/run/meminfo-writer.pid
|
||||||
|
PIDFile=/var/run/meminfo-writer.pid
|
||||||
|
StandardOutput=syslog
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
11
vm-systemd/qubes-misc-post.service
Normal file
11
vm-systemd/qubes-misc-post.service
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Qubes misc post-boot actions
|
||||||
|
After=qubes-dvm.service
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=oneshot
|
||||||
|
RemainAfterExit=yes
|
||||||
|
ExecStart=/usr/lib/qubes/init/misc-post.sh
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
11
vm-systemd/qubes-netwatcher.service
Normal file
11
vm-systemd/qubes-netwatcher.service
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Qubes network monitor
|
||||||
|
ConditionPathExists=/var/run/qubes-service/qubes-netwatcher
|
||||||
|
After=qubes-firewall.service
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
ExecStart=/usr/sbin/qubes_netwatcher
|
||||||
|
StandardOutput=syslog
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
14
vm-systemd/qubes-network.service
Normal file
14
vm-systemd/qubes-network.service
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
[Unit]
|
||||||
|
Names=qubes_firewall.service
|
||||||
|
Description=Qubes network forwarding setup
|
||||||
|
ConditionPathExists=/var/run/qubes-service/qubes-network
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=oneshot
|
||||||
|
RemainAfterExit=yes
|
||||||
|
ExecStartPre=/sbin/ethtool -K eth0 sg off
|
||||||
|
ExecStart=/usr/lib/qubes/init/network-proxy-setup.sh
|
||||||
|
StandardOutput=syslog
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=network.target
|
10
vm-systemd/qubes-qrexec-agent.service
Normal file
10
vm-systemd/qubes-qrexec-agent.service
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Qubes remote exec agent
|
||||||
|
After=qubes-dvm.service
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
ExecStart=/usr/lib/qubes/qrexec_agent
|
||||||
|
StandardOutput=syslog
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
11
vm-systemd/qubes-sysinit.service
Normal file
11
vm-systemd/qubes-sysinit.service
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Init Qubes Services settings
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=oneshot
|
||||||
|
RemainAfterExit=yes
|
||||||
|
ExecStart=/usr/lib/qubes/init/qubes-sysinit.sh
|
||||||
|
StandardOutput=syslog
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=sysinit.target
|
50
vm-systemd/qubes-sysinit.sh
Executable file
50
vm-systemd/qubes-sysinit.sh
Executable file
@ -0,0 +1,50 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# List of services enabled by default (in case of absence of xenstore entry)
|
||||||
|
DEFAULT_ENABLED_NETVM="network-manager qubes-network"
|
||||||
|
DEFAULT_ENABLED_PROXYVM="meminfo-writer qubes-network qubes-firewall qubes-netwatcher"
|
||||||
|
DEFAULT_ENABLED_APPVM="meminfo-writer"
|
||||||
|
DEFAULT_ENABLED="meminfo-writer"
|
||||||
|
|
||||||
|
XS_READ=/usr/bin/xenstore-read
|
||||||
|
XS_LS=/usr/bin/xenstore-ls
|
||||||
|
|
||||||
|
read_service() {
|
||||||
|
$XS_READ qubes-service/$1 2> /dev/null
|
||||||
|
}
|
||||||
|
|
||||||
|
mkdir -p /var/run/qubes
|
||||||
|
mkdir -p /var/run/qubes-service
|
||||||
|
mkdir -p /var/run/xen-hotplug
|
||||||
|
|
||||||
|
# Set permissions to /proc/xen/xenbus, so normal user can use xenstore-read
|
||||||
|
chmod 666 /proc/xen/xenbus
|
||||||
|
|
||||||
|
# Set default services depending on VM type
|
||||||
|
TYPE=`$XS_READ qubes_vm_type 2> /dev/null`
|
||||||
|
[ "$TYPE" == "AppVM" ] && DEFAULT_ENABLED=$DEFAULT_ENABLED_APPVM
|
||||||
|
[ "$TYPE" == "NetVM" ] && DEFAULT_ENABLED=$DEFAULT_ENABLED_NETVM
|
||||||
|
[ "$TYPE" == "ProxyVM" ] && DEFAULT_ENABLED=$DEFAULT_ENABLED_PROXYVM
|
||||||
|
|
||||||
|
# Enable default services
|
||||||
|
for srv in $DEFAULT_ENABLED; do
|
||||||
|
touch /var/run/qubes-service/$srv
|
||||||
|
done
|
||||||
|
|
||||||
|
# Enable services
|
||||||
|
for srv in `$XS_LS qubes-service 2>/dev/null |grep ' = "1"'|cut -f 1 -d ' '`; do
|
||||||
|
touch /var/run/qubes-service/$srv
|
||||||
|
done
|
||||||
|
|
||||||
|
# Disable services
|
||||||
|
for srv in `$XS_LS qubes-service 2>/dev/null |grep ' = "0"'|cut -f 1 -d ' '`; do
|
||||||
|
rm -f /var/run/qubes-service/$srv
|
||||||
|
done
|
||||||
|
|
||||||
|
# Set the hostname
|
||||||
|
name=`$XS_READ name`
|
||||||
|
if [ -n "$name" ]; then
|
||||||
|
hostname $name
|
||||||
|
(grep -v "\<$name\>" /etc/hosts; echo "127.0.0.1 $name") > /etc/hosts
|
||||||
|
fi
|
||||||
|
|
Loading…
Reference in New Issue
Block a user