Utoljára aktív 6 months ago

Revízió 97da2e06ac13142abc5f27c60b3dcdd49ffa5a46

stretch2buster.sh Eredeti
1Please also refer to http://www.debian.org/releases/buster/releasenotes and use your brain! If you can’t figure out what one of the commands below does, this is not for you. Expert mode only :)
2
3# Crossgrading ?!?
4[ "$(dpkg --print-architecture)" == "i386" ] && echo "How about crossgrading to amd64 as described in https://stbuehler.de/blog/article/2017/06/28/debian_stretch__upgrade_32-bit_to_64-bit.html?"
5
6# Since running buster with older kernels may not work well (eg jessie kernels) lets see if we have a domU without own kernel
7if [ -d /sys/module/xen_netfront -a $(dpkg -l | grep grub-xen-bin | wc -l) = 0 -a $(dpkg -l | grep linux-image | wc -l) = 0 ]; then echo "Please run 'apt install grub-xen-bin grub-xen linux-image-amd64 && update-grub' to install a recent kernel and boot your domU with it next time"; fi
8
9# upgrade to UTF-8 locales (http://www.debian.org/releases/buster/amd64/release-notes/ap-old-stuff.en.html#switch-utf8)
10dpkg-reconfigure locales
11
12# remove unused config file
13rm -rf /etc/network/options /etc/environment
14
15# are there 3rd party packages installed? (https://www.debian.org/releases/buster/amd64/release-notes/ch-upgrading.de.html#system-status)
16aptitude search '~i(!~ODebian)'
17
18# check for ftp protocol in sources lists (https://www.debian.org/releases/buster/amd64/release-notes/ch-information.en.html#deprecation-of-ftp-apt-mirrors)
19rgrep --color "deb ftp" /etc/apt/sources.list*
20
21# Transition and remove entries from older releases
22sed -i /lenny/d /etc/apt/sources.list*
23sed -i /sarge/d /etc/apt/sources.list*
24sed -i /squeeze/d /etc/apt/sources.list*
25sed -i /wheezy/d /etc/apt/sources.list*
26sed -i /jessie/d /etc/apt/sources.list*
27sed -i /volatile/d /etc/apt/sources.list*
28sed -i /proposed-updates/d /etc/apt/sources.list*
29# change distro (please move 3rd party sources to /etc/apt/sources.list.d/), maybe look into http://ftp.cyconet.org/debian/sources.list.d/
30sed -i s/stretch/buster/g /etc/apt/sources.list*
31sed -i "s/ stable/ buster/g" /etc/apt/sources.list*
32sed -i s/stretch/buster/g /etc/apt/preferences*
33sed -i s/stretch/buster/g /etc/apt/sources.list.d/*stretch*
34rename s/stretch/buster/g /etc/apt/sources.list.d/*stretch*
35rgrep --color stretch /etc/apt/sources.list*
36apt-get update
37
38# check package status
39dpkg --audit
40aptitude search "~ahold" | grep "^.h"
41dpkg --get-selections | grep hold
42
43# unmark packages auto
44aptitude unmarkauto vim net-tools && \
45aptitude unmarkauto libapache2-mpm-itk && \
46aptitude unmarkauto $(dpkg-query -W 'linux-image-4.9.0*' | cut -f1)
47
48# have a look into required and free disk space
49apt-get -o APT::Get::Trivial-Only=true dist-upgrade || df -h
50
51# purge already remove packages
52apt purge $(dpkg -l | awk '/^rc/ { print $2 }')
53
54# check for a linux-image meta package
55dpkg -l "linux-image*" | grep ^ii | grep -i meta || echo "Please have a look into https://www.debian.org/releases/stretch/amd64/release-notes/ch-upgrading.en.html#kernel-metapackage!"
56
57# record session
58script -t 2>~/upgrade-buster.time -a ~/upgrade-buster.script
59
60# install our preseed so libc doesn't whine
61cat > /tmp/stretch.preseed <<EOF
62libc6 glibc/upgrade boolean true
63libc6 glibc/restart-services string
64libc6 libraries/restart-without-asking boolean true
65EOF
66/usr/bin/debconf-set-selections /tmp/stretch.preseed
67
68# update aptitude first
69[ "$(which aptitude)" = "/usr/bin/aptitude" ] && aptitude install aptitude && \
70[ "$(which apt)" = "/usr/bin/apt" ] && apt install apt
71
72# minimal system upgrade
73aptitude upgrade
74
75# randomize crontab
76if [ -f /etc/crontab.dpkg-new ]; then CFG=/etc/crontab.dpkg-new; else CFG=/etc/crontab; fi
77sed -i 's#root cd#root perl -e "sleep int(rand(300))" \&\& cd#' $CFG
78sed -i 's#root\ttest#root\tperl -e "sleep int(rand(3600))" \&\& test#' $CFG
79
80# chrony update, modify the new config to our needs and place it where it is expected.
81# Accept MAINTAINERS version (and run this snippet afterwards)
82if [ -f /etc/chrony/chrony.conf.new ]; then CFG=/etc/chrony/chrony.conf.new; else CFG=/etc/chrony/chrony.conf; fi
83sed s/2.debian.pool/0.de.pool/g /usr/share/chrony/chrony.conf > $CFG
84
85# transition sshd port changes
86if [ -f /etc/ssh/sshd_config.dpkg-new ]; then
87 SSH_PORT=$(grep "^ *Port" /etc/ssh/sshd_config | cut -d' ' -f2)
88 if [ -n ${SSH_PORT} ]; then
89 sed -i "s/^#Port 22/Port ${SSH_PORT}/" /etc/ssh/sshd_config && /etc/init.d/ssh restart
90 fi
91fi
92
93# Fix our ssh pub key package configuration
94# Accept MAINTAINERS version (and run this snippet afterwards)
95[ -x /var/lib/dpkg/info/config-openssh-server-authorizedkeys-core.postinst ] && \
96 /var/lib/dpkg/info/config-openssh-server-authorizedkeys-core.postinst configure
97
98# migrate unattended-upgrades config, modify the new config to our needs and place it where it is expected.
99# Keep LOCAL config if asked when upgrading (and run this snippet afterwards, when dpkg is not blocked anymore and choose 'package maintainer version' then, cause this is the one we are adjusting here)
100if [ -f /etc/apt/apt.conf.d/50unattended-upgrades.ucf-old ]; then CFG=/etc/apt/apt.conf.d/50unattended-upgrades.ucf-old; else CFG=/etc/apt/apt.conf.d/50unattended-upgrades; fi && \
101cp /usr/share/unattended-upgrades/50unattended-upgrades /tmp/ && \
102MAIL=$(grep ^Unattended-Upgrade::Mail $CFG | awk -F\" '{print $2}'); sed -i 's#//Unattended-Upgrade::Mail ".*";#Unattended-Upgrade::Mail "'${MAIL}'";#g' /tmp/50unattended-upgrades && \
103TIME=$(grep ^Unattended-Upgrade::Automatic-Reboot-Time $CFG | awk -F\" '{print $2}'); if [ "${TIME}" != "" ]; then sed -i 's#//Unattended-Upgrade::Automatic-Reboot-Time "02:00"#Unattended-Upgrade::Automatic-Reboot-Time "'${TIME}'"#' /tmp/50unattended-upgrades; fi
104sed -i 's#// "origin=Debian,codename=${distro_codename}-updates"# "origin=Debian,codename=${distro_codename}-updates"#' /tmp/50unattended-upgrades && \
105sed -i 's#//Unattended-Upgrade::Remove-Unused-Dependencies "false"#Unattended-Upgrade::Remove-Unused-Dependencies "true"#' /tmp/50unattended-upgrades && \
106sed -i 's#//Unattended-Upgrade::Automatic-Reboot "false"#Unattended-Upgrade::Automatic-Reboot "true"#' /tmp/50unattended-upgrades && \
107sed -i '/codename=..distro_codename.-updates/ s#^//# #' /tmp/50unattended-upgrades && \
108/bin/bash /usr/bin/ucf --three-way --debconf-ok /tmp/50unattended-upgrades /etc/apt/apt.conf.d/50unattended-upgrades && \
109[ "$CFG" == "/etc/apt/apt.conf.d/50unattended-upgrades.ucf-old" ] && mv $CFG /etc/apt/apt.conf.d/50unattended-upgrades.ucf-save
110
111## phpmyadmin
112if [ "$(dpkg -l | grep -Ec '^i.*phpmyadmin ')" = "1" ]; then wget https://gist.githubusercontent.com/waja/77e3d2febb0745478466344f0ce5a50e/raw/deploy_phpmyadmin_buster.sh -O /tmp/a && sh /tmp/a; fi && \
113if [ -f /etc/phpmyadmin/config.inc.php.dpkg-new ]; then CFG=/etc/phpmyadmin/config.inc.php.dpkg-new; \
114 else CFG=/etc/phpmyadmin/config.inc.php; fi
115sed -i "s/\['auth_type'\] = 'cookie'/\['auth_type'\] = 'http'/" $CFG
116sed -i "s#//\$cfg\['Servers'\]\[\$i\]\['auth_type'\] = 'http';#\$cfg['Servers'][\$i]['auth_type'] = 'http';#" $CFG
117
118# full-upgrade
119apt-get dist-upgrade
120
121# Migrate (webserver) from php7.0 to php7.3
122apt install $(dpkg -l |grep php7.0 | awk '/^i/ { print $2 }' |grep -v ^php7.0-opcache |sed s/php7.0/php/)
123[ -L /etc/apache2/mods-enabled/mpm_prefork.load ] && a2dismod php7.0 && a2enmod php7.3 && systemctl restart apache2; ls -la /etc/php/7.0/*/conf.d/
124# php-fpm
125tail -10 /etc/php/7.0/fpm/pool.d/www.conf
126vi /etc/php/7.3/fpm/pool.d/www.conf
127systemctl disable php7.0-fpm && systemctl stop php7.0-fpm && systemctl restart php7.3-fpm
128# nginx
129rename s/php70/php73/g /etc/nginx/conf.d/*php70*.conf
130sed -i s/php7.0-fpm/php7.3-fpm/g /etc/nginx/conf.d/*.conf /etc/nginx/snippets/*.conf /etc/nginx/sites-available/*
131systemctl restart nginx
132
133# Update old postfix configurations
134cp /etc/postfix/main.cf /tmp/main.cf && \
135if [ $(postconf -n smtpd_relay_restrictions | wc -l) -eq 0 ]; then sed -i '/^myhostname.*/i smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination' /etc/postfix/main.cf; fi && \
136if [ -z $(postconf -nh compatibility_level) ]; then sed -iE 's/^readme_directory = no/readme_directory = no\n\n# See http:\/\/www.postfix.org\/COMPATIBILITY_README.html -- default to 2 on\n# fresh installs.\ncompatibility_level = 2\n\n/' /etc/postfix/main.cf; fi && \
137diff -Nur /tmp/main.cf /etc/postfix/main.cf && \
138postfix reload
139
140# transition docker-ce to buster package
141DOCKER_VER="$(apt-cache policy docker-ce | grep debian-buster | head -1 | awk '{print $1}')" && [ -n "${DOCKER_VER}" ] && apt install docker-ce=${DOCKER_VER} docker-ce-cli=${DOCKER_VER}
142
143# transition icingaweb2 to buster package
144ICINGAWEB2_VER="$(apt-cache policy icingaweb2 | grep "\.buster" | head -1 | awk '{print $1}')" && [ -n "${ICINGAWEB2_VER}" ] && apt install icingaweb2=${ICINGAWEB2_VER} icingaweb2-common=${ICINGAWEB2_VER} icingaweb2-module-monitoring=${ICINGAWEB2_VER} php-icinga=${ICINGAWEB2_VER} icingacli=${ICINGAWEB2_VER}
145
146# provide /etc/dovecot/private/dovecot.key from default config to prevent failing to start dovecot
147ln -s /etc/ssl/private/ssl-cert-snakeoil.key /etc/dovecot/private/dovecot.key
148
149# Fixing systemd unit for chrooted unbound (https://bugs.debian.org/931583)
150mkdir -p /etc/systemd/system/unbound.service.d/ && cat > /etc/systemd/system/unbound.service.d/override.conf <<EOF
151[Service]
152BindPaths=/run/systemd/notify:/var/lib/unbound/run/systemd/notify
153EOF
154systemctl daemon-reload && systemctl restart unbound
155
156# Apply pdns-backend database migration
157source /etc/default/config-mysql-server-auth; mysql -u root --password=${MYSQLPW} $(grep ^gmysql-dbname /etc/powerdns/pdns.d/pdns.local.gmysql.conf | cut -d= -f 2) < /usr/share/pdns-backend-mysql/schema/3.4.0_to_4.1.0_schema.mysql.sql
158
159# remove old squeeze packages left around (keep eyes open!)
160apt autoremove && \
161apt purge $(aptitude search ?obsolete | grep -v -E 'linux-image|mailscanner|phpmyadmin|check-openmanage|check-linux-bonding' | awk '/^i *A/ { print $3 }') && \
162apt purge $(aptitude search ?obsolete | grep -v -E 'linux-image|mailscanner|phpmyadmin|check-openmanage|check-linux-bonding' | awk '/^i/ { print $2 }') && \
163apt purge $(dpkg -l | grep etch | grep -v xen | grep -v unbound | grep -v finch | awk '/^rc/ { print $2 }') && \
164apt purge $(dpkg -l | grep lenny | grep -v xen | awk '/^rc/ { print $2 }') && \
165apt purge $(dpkg -l | grep -E 'deb6|squeeze' | grep -v xen | awk '/^rc/ { print $2 }') && \
166apt purge $(dpkg -l | grep -E 'deb7|wheezy' | grep -v xen | grep -v -E 'linux-image|mailscanner|openswan|debian-security-support' | awk '/^rc/ { print $2 }') && \
167apt purge $(dpkg -l | grep -E 'deb8|jessie' | grep -v xen | grep -v -E 'linux-image|debian-security-support' | awk '{ print $2 }') && \
168apt purge $(dpkg -l | grep -E 'deb9|stretch' | grep -v xen | grep -v -E 'linux-image|debian-security-support|icinga2|phpmyadmin' | awk '{ print $2 }') && \
169apt -y install deborphan && apt purge $(deborphan | grep -v xen | grep -v -E 'libpam-cracklib|libapache2-mpm-itk')
170apt purge $(dpkg -l | awk '/^rc/ { print $2 }')
171
172# for the brave YoloOps crowd
173reboot && sleep 180; echo u > /proc/sysrq-trigger ; sleep 2 ; echo s > /proc/sysrq-trigger ; sleep 2 ; echo b > /proc/sysrq-trigger
174
175### not needed until now
176# Upgrade postgres
177# See also https://www.debian.org/releases/stretch/amd64/release-notes/ch-information.de.html#plperl
178if [ "$(dpkg -l | grep "postgresql-9.4" | awk {'print $2'})" = "postgresql-9.4" ]; then \
179 aptitude install postgresql-9.6 && \
180 pg_dropcluster --stop 9.6 main && \
181 /etc/init.d/postgresql stop && \
182 pg_upgradecluster -v 9.6 9.4 main && \
183 sed -i "s/^manual/auto/g" /etc/postgresql/9.6/main/start.conf && \
184 sed -i "s/^port = .*/port = 5432/" /etc/postgresql/9.6/main/postgresql.conf && \
185 sed -i "s/^shared_buffers = .*/shared_buffers = 128MB/" /etc/postgresql/9.6/main/postgresql.conf && \
186 /etc/init.d/postgresql restart; \
187fi
188pg_dropcluster 9.4 main
189