summaryrefslogtreecommitdiff
path: root/core/systemd/systemd.install
blob: a075a28eef3bcc38934f82104fa456fd18b97341 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
#!/bin/bash

sd_booted() {
  [[ -d run/systemd/system ]]
}

add_privs() {
  if ! setcap "$2" "$1" 2>/dev/null; then
    echo "==> Warning: setcap failed, falling back to setuid root on /$1"
    chmod u+s "$1"
  fi
}

add_journal_acls() {
  # ignore errors, since the filesystem might not support ACLs
  setfacl -Rnm g:wheel:rx,d:g:wheel:rx,g:adm:rx,d:g:adm:rx var/log/journal/ 2>/dev/null
  :
}

maybe_reexec() {
  # don't reexec on 209-1 upgrade due to large infrastructural changes.
  if [[ $(vercmp 209-1 "$2") -eq 1 ]]; then
    echo ':: systemd has not been reexecuted. It is recommended that you'
    echo '   reboot at your earliest convenience.'
    return
  fi

  if sd_booted; then
    systemctl --system daemon-reexec
  fi
}

_dir_empty() {
  set -- "$1"/*
  [[ ! -e $1  && ! -L $1 ]]
}

post_common() {
  systemd-machine-id-setup

  udevadm hwdb --update
  journalctl --update-catalog
}

_204_1_changes() {
  printf '==> The /bin/systemd symlink has been removed. Any references in your\n'
  printf '    bootloader (or elsewhere) must be updated to /usr/lib/systemd/systemd.\n'
}

_205_1_changes() {
  printf '==> systemd 205 restructures the cgroup hierarchy and changes internal\n'
  printf '    protocols. You should reboot at your earliest convenience.\n'
}

_206_1_changes() {
  printf '==> The "timestamp" hook for mkinitcpio no longer exists. If you used\n'
  printf '    this hook, you must remove it from /etc/mkinitcpio.conf. A "systemd"\n'
  printf '    hook has been added which provides this functionality, and more.\n'
}

_208_1_changes() {
  if [[ -e var/lib/backlight && ! -e var/lib/systemd/backlight ]]; then
    mv -T var/lib/backlight var/lib/systemd/backlight
  fi

  if [[ -e var/lib/random-seed && ! -e var/lib/systemd/random-seed ]]; then
    mv -T var/lib/random-seed var/lib/systemd/random-seed
  fi
}

_208_8_changes() {
  add_journal_acls
}

_209_1_changes() {
  # attempt to preserve existing behavior

  local old_rule=etc/udev/rules.d/80-net-name-slot.rules
  local new_rule=etc/udev/rules.d/80-net-setup-link.rules

  echo ":: Network device naming is now controlled by udev's net_setup_link"
  echo "   builtin. Refer to the systemd.link manpage for a full description."

  # not clear what action we can take here, so don't do anything
  [[ -e $new_rule ]] && return 0

  # rename the old rule to the new one so that we preserve the user's
  # existing option.
  if [[ -e $old_rule ]]; then
    printf ':: Renaming %s to %s in order\n' "${old_rule##*/}" "${new_rule##*/}"
    printf '   to preserve existing network naming behavior.\n'
    mv -v "$old_rule" "$new_rule"
  else
    echo ':: No changes have been made to your network naming configuration.'
    echo '   Interfaces should continue to maintain the same names.'
  fi
}

_210_1_changes() {
  if sd_booted; then
    # If /etc/systemd/network is non-empty, then this is a 209 user who used
    # networkd. Re-enable it for them.
    if ! _dir_empty etc/systemd/network; then
      systemctl enable systemd-networkd
    fi
  fi
}

_213_4_changes() {
  if sd_booted; then
    # if /etc/resolv.conf is a symlink, just assume that it was being managed
    # by systemd-networkd, and re-enable systemd-resolved.
    if [[ -L etc/resolv.conf ]]; then
      systemctl enable systemd-resolved
    fi
  fi
}

_214_2_changes() {
  # /run/systemd/network/resolv.conf -> /run/systemd/resolve/resolv.conf
  if [[ etc/resolv.conf -ef run/systemd/network/resolv.conf ]]; then
    ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf

    if sd_booted; then
      if [[ ! -d run/systemd/resolve ]]; then
        mkdir run/systemd/resolve
      fi

      if [[ -f run/systemd/network/resolv.conf ]]; then
        mv run/systemd/{network,resolve}/resolv.conf
      fi
    fi
  fi

  echo ':: coredumps are no longer sent to the journal by default. To re-enable:'
  echo '   echo >/etc/sysctl.d/50-coredump.conf \'
  echo '       "kernel.core_pattern=|/usr/lib/systemd/systemd-coredump %p %u %g %s %t %e"'
}

_215_2_changes() {
  # create at least the symlink from /etc/os-release to /usr/lib/os-release
  systemd-tmpfiles --create etc.conf
}

post_install() {
  post_common "$@"

  add_journal_acls

  # enable getty@tty1 by default, but don't track the file
  systemctl enable getty@tty1.service

  echo ":: Append 'init=/usr/lib/systemd/systemd' to your kernel command line in your"
  echo "   bootloader to replace sysvinit with systemd, or install systemd-sysvcompat"
}

post_upgrade() {
  post_common "$@"

  maybe_reexec "$@"

  local v upgrades=(204-1
                    205-1
                    206-1
                    208-1
                    208-8
                    209-1
                    210-1
                    213-4
                    214-2
                    215-2)

  for v in "${upgrades[@]}"; do
    if [[ $(vercmp "$v" "$2") -eq 1 ]]; then
      "_${v//-/_}_changes"
    fi
  done
}

# vim:set ts=2 sw=2 et: