最終更新 6 months ago

修正履歴 59bd67b5effcce2ea30a2c5d55330cf899d272cf

buster2bullseye.sh Raw
1Please also refer to http://www.debian.org/releases/bullseye/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_buster__upgrade_32-bit_to_64-bit.html?"
5
6# upgrade to UTF-8 locales (http://www.debian.org/releases/bullseye/amd64/release-notes/ap-old-stuff.en.html#switch-utf8)
7dpkg-reconfigure locales
8
9# remove unused config file
10rm -rf /etc/network/options /etc/environment
11
12# are there 3rd party packages installed? (https://www.debian.org/releases/bullseye/amd64/release-notes/ch-upgrading.de.html#system-status)
13aptitude search '~i(!~ODebian)'
14
15# check for ftp protocol in sources lists (https://www.debian.org/releases/bullseye/amd64/release-notes/ch-information.en.html#deprecation-of-ftp-apt-mirrors)
16rgrep --color "deb ftp" /etc/apt/sources.list*
17
18# Transition and remove entries from older releases
19sed -i /lenny/d /etc/apt/sources.list*
20sed -i /sarge/d /etc/apt/sources.list*
21sed -i /squeeze/d /etc/apt/sources.list*
22sed -i /wheezy/d /etc/apt/sources.list*
23sed -i /jessie/d /etc/apt/sources.list*
24sed -i /volatile/d /etc/apt/sources.list*
25sed -i /proposed-updates/d /etc/apt/sources.list*
26# change distro (please move 3rd party sources to /etc/apt/sources.list.d/), maybe look into http://ftp.cyconet.org/debian/sources.list.d/
27sed -i s/buster/bullseye/g /etc/apt/sources.list*
28sed -i "s/ stable/ bullseye/g" /etc/apt/sources.list*
29sed -i s/buster/bullseye/g /etc/apt/preferences*
30sed -i s/buster/bullseye/g /etc/apt/sources.list.d/*buster*
31# Fix secuity suite (https://www.debian.org/releases/bullseye/amd64/release-notes/ch-information#security-archive)
32sed -i "s/bullseye\/updates/bullseye-security/" /etc/apt/sources.list*
33rename.ul buster bullseye /etc/apt/sources.list.d/*buster*
34rgrep --color buster /etc/apt/sources.list*
35apt update
36
37# check package status
38dpkg --audit
39aptitude search "~ahold" | grep "^.h"
40dpkg --get-selections | grep hold
41dpkg --get-selections "*" > ~/curr-pkgs.txt
42
43# unmark packages auto
44aptitude unmarkauto vim net-tools && \
45aptitude unmarkauto libapache2-mpm-itk && \
46aptitude unmarkauto monitoring-plugins-contrib && \
47aptitude unmarkauto $(dpkg-query -W 'linux-image-4.19.0*' | cut -f1)
48
49# have a look into required and free disk space
50apt-get -o APT::Get::Trivial-Only=true dist-upgrade || df -h
51
52# purge already remove packages
53apt purge $(dpkg -l | awk '/^rc/ { print $2 }')
54
55# check for a linux-image meta package
56dpkg -l "linux-image*" | grep ^ii | grep -i meta || echo "Please have a look into https://www.debian.org/releases/bullseye/amd64/release-notes/ch-upgrading.en.html#kernel-metapackage!"
57# record session
58script -t 2>~/upgrade-bullseye.time -a ~/upgrade-bullseye.script
59
60# install our preseed so libc doesn't whine
61cat > /tmp/buster.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/buster.preseed
67
68# transition sshd port changes and adjusted authkeyfile before starting the update
69if [ ! -d /etc/ssh/sshd_config.d ]; then mkdir -p /etc/ssh/sshd_config.d; fi
70if [ ! $(grep ^Port /etc/ssh/sshd_config | tee /etc/ssh/sshd_config.d/port.conf | wc -l) -gt 0 ]; then rm /etc/ssh/sshd_config.d/port.conf; fi
71if [ ! $(grep ^AuthorizedKeysFile /etc/ssh/sshd_config | tee /etc/ssh/sshd_config.d/authorizedkeysfile.conf | wc -l) -gt 0 ]; then rm /etc/ssh/sshd_config.d/authorizedkeysfile.conf ; fi
72# transition ssh changes
73if [ ! -d /etc/ssh/ssh_config.d ]; then mkdir -p /etc/ssh/ssh_config.d; fi
74if [ ! $(grep "^ *Port" /etc/ssh/ssh_config | tee /etc/ssh/ssh_config.d/port.conf | wc -l) -gt 0 ]; then rm /etc/ssh/ssh_config.d/port.conf; fi
75
76# update aptitude and apt first
77[ "$(which aptitude)" = "/usr/bin/aptitude" ] && apt install aptitude && \
78[ "$(which apt)" = "/usr/bin/apt" ] && apt install apt
79
80# minimal system upgrade
81apt upgrade --without-new-pkgs
82
83# chrony update, modify the new config to our needs and place it where it is expected.
84if [ ! -d /etc/chrony/conf.d/ ]; then mkdir -p /etc/chrony/conf.d/; fi; echo "pool 0.de.pool.ntp.org iburst" > /etc/chrony/conf.d/pool.conf
85
86# (re)configure snmpd
87COMMUNITY="$(grep ^rocommunity /etc/snmp/snmpd.conf | cut -d" " -f2)"; \
88if [ -f /etc/snmp/snmpd.conf.dpkg-new ]; then CFG=/etc/snmp/snmpd.conf.dpkg-new; \
89 else CFG=/etc/snmp/snmpd.conf; fi
90sed -i "s/^agentaddress.*/agentaddress udp:161,udp6:[::1]:161/g" $CFG
91sed -i "s/public default.*/$COMMUNITY default/g" $CFG
92grep ^extend /etc/snmp/snmpd.conf >> $CFG
93
94# migrate unattended-upgrades config, modify the new config to our needs and place it where it is expected.
95# 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)
96if [ -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 && \
97cp /usr/share/unattended-upgrades/50unattended-upgrades /tmp/ && \
98MAIL=$(grep ^Unattended-Upgrade::Mail $CFG | awk -F\" '{print $2}'); sed -i 's#//Unattended-Upgrade::Mail ".*";#Unattended-Upgrade::Mail "'${MAIL}'";#g' /tmp/50unattended-upgrades && \
99TIME=$(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
100sed -i 's#// "origin=Debian,codename=${distro_codename}-updates"# "origin=Debian,codename=${distro_codename}-updates"#' /tmp/50unattended-upgrades && \
101sed -i 's#//Unattended-Upgrade::Remove-Unused-Dependencies "false"#Unattended-Upgrade::Remove-Unused-Dependencies "true"#' /tmp/50unattended-upgrades && \
102sed -i 's#//Unattended-Upgrade::Automatic-Reboot "false"#Unattended-Upgrade::Automatic-Reboot "true"#' /tmp/50unattended-upgrades && \
103sed -i '/codename=..distro_codename.-updates/ s#^//# #' /tmp/50unattended-upgrades && \
104sed -i 's#//Unattended-Upgrade::MailReport "on-change"#Unattended-Upgrade::MailReport "on-change"#' /tmp/50unattended-upgrades && \
105/bin/bash /usr/bin/ucf --three-way --debconf-ok /tmp/50unattended-upgrades /etc/apt/apt.conf.d/50unattended-upgrades && \
106[ "$CFG" == "/etc/apt/apt.conf.d/50unattended-upgrades.ucf-old" ] && mv $CFG /etc/apt/apt.conf.d/50unattended-upgrades.ucf-save
107
108# full-upgrade
109apt full-upgrade
110
111# Migrate (webserver) from php7.3 to php7.4
112apt install $(dpkg -l |grep php7.3 | awk '/^i/ { print $2 }' |grep -v ^php7.3-opcache |sed s/php7.3/php/)
113[ -L /etc/apache2/mods-enabled/mpm_prefork.load ] && a2dismod php7.3 && a2enmod php7.4 && systemctl restart apache2; ls -la /etc/php/7.3/*/conf.d/
114# php-fpm
115tail -10 /etc/php/7.3/fpm/pool.d/www.conf
116vi /etc/php/7.4/fpm/pool.d/www.conf
117systemctl disable php7.3-fpm && systemctl stop php7.3-fpm && systemctl restart php7.4-fpm
118# nginx
119rename s/php73/php74/g /etc/nginx/conf.d/*php73*.conf
120sed -i s/php7.3-fpm/php7.4-fpm/g /etc/nginx/conf.d/*.conf /etc/nginx/snippets/*.conf /etc/nginx/sites-available/*
121systemctl restart nginx
122
123# transition docker-ce to bullseye package
124DOCKER_VER="$(apt-cache policy docker-ce | grep debian-bullseye | head -1 | awk '{print $1}')" && [ -n "${DOCKER_VER}" ] && apt install docker-ce=${DOCKER_VER} docker-ce-cli=${DOCKER_VER}
125
126# transition icingaweb2 to bullseye package
127ICINGAWEB2_VER="$(apt-cache policy icingaweb2 | grep "\.bullseye" | 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}
128
129# Remove libgcc1 so cpp-8 can be updated
130apt remove libgcc1 && apt full-upgrade
131
132# remove old squeeze packages left around (keep eyes open!)
133apt autoremove && \
134apt purge $(aptitude search ?obsolete | grep -v -E 'linux-image|mailscanner|check-openmanage|check-linux-bonding|webalizer' | awk '/^i *A/ { print $3 }') && \
135apt purge $(aptitude search ?obsolete | grep -v -E 'linux-image|mailscanner|check-openmanage|check-linux-bonding|webalizer' | awk '/^i/ { print $2 }') && \
136apt purge $(dpkg -l | grep etch | grep -v xen | grep -v unbound | grep -v finch | awk '/^rc/ { print $2 }') && \
137apt purge $(dpkg -l | grep lenny | grep -v xen | awk '/^rc/ { print $2 }') && \
138apt purge $(dpkg -l | grep -E 'deb6|squeeze' | grep -v xen | awk '/^rc/ { print $2 }') && \
139apt purge $(dpkg -l | grep -E 'deb7|wheezy' | grep -v xen | grep -v -E 'linux-image|mailscanner|openswan|debian-security-support' | awk '/^rc/ { print $2 }') && \
140apt purge $(dpkg -l | grep -E 'deb8|jessie' | grep -v xen | grep -v -E 'linux-image|debian-security-support' | awk '{ print $2 }') && \
141apt purge $(dpkg -l | grep -E 'deb9|stretch' | grep -v xen | grep -v -E 'linux-image|debian-security-support|icinga2|phpmyadmin' | awk '{ print $2 }') && \
142apt purge $(dpkg -l | grep -E 'deb10|buster' | grep -v xen | grep -v -E 'linux-image|debian-security-support|icinga2|phpmyadmin' | awk '{ print $2 }') && \
143apt -y install deborphan && apt purge $(deborphan | grep -v xen | grep -v -E 'libpam-cracklib|libapache2-mpm-itk')
144apt purge $(dpkg -l | awk '/^rc/ { print $2 }')
145
146# for the brave YoloOps crowd
147reboot && sleep 180; echo u > /proc/sysrq-trigger ; sleep 2 ; echo s > /proc/sysrq-trigger ; sleep 2 ; echo b > /proc/sysrq-trigger
148
149### not needed until now
150
151# randomize crontab
152if [ -f /etc/crontab.dpkg-new ]; then CFG=/etc/crontab.dpkg-new; else CFG=/etc/crontab; fi
153sed -i 's#root cd#root perl -e "sleep int(rand(300))" \&\& cd#' $CFG
154sed -i 's#root\ttest#root\tperl -e "sleep int(rand(3600))" \&\& test#' $CFG
155
156## phpmyadmin
157if [ -f /etc/phpmyadmin/config.inc.php.dpkg-new ]; then CFG=/etc/phpmyadmin/config.inc.php.dpkg-new; \
158 else CFG=/etc/phpmyadmin/config.inc.php; fi
159sed -i "s/\['auth_type'\] = 'cookie'/\['auth_type'\] = 'http'/" $CFG
160sed -i "s#//\$cfg\['Servers'\]\[\$i\]\['auth_type'\] = 'http';#\$cfg['Servers'][\$i]['auth_type'] = 'http';#" $CFG
161
162# Update old postfix configurations
163cp /etc/postfix/main.cf /tmp/main.cf && \
164if [ $(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 && \
165if [ -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 && \
166diff -Nur /tmp/postfix/main.cf /etc/postfix/main.cf && \
167postfix reload
168
169# Upgrade postgres
170# See also https://www.debian.org/releases/buster/amd64/release-notes/ch-information.de.html#plperl
171if [ "$(dpkg -l | grep "postgresql-9.4" | awk {'print $2'})" = "postgresql-9.4" ]; then \
172 apt install postgresql-9.6 && \
173 pg_dropcluster --stop 9.6 main && \
174 /etc/init.d/postgresql stop && \
175 pg_upgradecluster -v 9.6 9.4 main && \
176 sed -i "s/^manual/auto/g" /etc/postgresql/9.6/main/start.conf && \
177 sed -i "s/^port = .*/port = 5432/" /etc/postgresql/9.6/main/postgresql.conf && \
178 sed -i "s/^shared_buffers = .*/shared_buffers = 128MB/" /etc/postgresql/9.6/main/postgresql.conf && \
179 /etc/init.d/postgresql restart; \
180fi
181pg_dropcluster 9.4 main
182