diff --git a/distro/arch/install b/distro/arch/install index 26ef3d199f797e709fdad39512c454002ab5c048..e0104163c0592af516e94dfb41e4b531c00e4aed 100644 --- a/distro/arch/install +++ b/distro/arch/install @@ -4,12 +4,39 @@ post_install() { chown -R root:knot-resolver /etc/knot-resolver } +pre_upgrade() { + if [ -f /lib/systemd/system/kresd.socket ] ; then + export UPG_DIR=%{_sysconfdir}/knot-resolver/.upgrade-4-to-5 + mkdir -p ${UPG_DIR} + + for sock in kresd.socket kresd-tls.socket kresd-webmgmt.socket kresd-doh.socket ; do + if systemctl is-enabled ${sock} 2>/dev/null | grep -qv masked ; then + systemctl show ${sock} -p Listen > ${UPG_DIR}/${sock} + case "$(systemctl show ${sock} -p BindIPv6Only)" in + *ipv6-only) + touch ${UPG_DIR}/${sock}.v6only + ;; + *default) + if cat /proc/sys/net/ipv6/bindv6only | grep -q 1 ; then + touch ${UPG_DIR}/${sock}.v6only + fi + ;; + esac + fi + done + fi +} + post_upgrade() { chown -R root:knot-resolver /etc/knot-resolver - if echo $2 | grep -q '^[0-4]'; then - echo -e " Knot Resolver version 5+ uses a different configuration for network interfaces." - echo -e " Please refer to https://knot-resolver.readthedocs.io/en/stable/upgrading.html" + export UPG_DIR=%{_sysconfdir}/knot-resolver/.upgrade-4-to-5 + if [ -f ${UPG_DIR}/.unfinished ] ; then + rm -f ${UPG_DIR}/.unfinished + kresd -c %{_libdir}/knot-resolver/upgrade-4-to-5.lua &>/dev/null + echo -e "\n !!! WARNING !!!" + echo -e "Knot Resolver configuration file requires manual upgrade.\n" + cat ${UPG_DIR}/kresd.conf.net 2>/dev/null fi } diff --git a/distro/deb/knot-resolver.postinst b/distro/deb/knot-resolver.postinst index 923ab0378635dd1d084e658388e113b39ae2f3fa..a74765ba0140d2e0294fa7c9b164110dfdb53b46 100644 --- a/distro/deb/knot-resolver.postinst +++ b/distro/deb/knot-resolver.postinst @@ -3,12 +3,12 @@ set -e # upgrade-4-to-5 export UPG_DIR=/etc/knot-resolver/.upgrade-4-to-5 -if [ -d ${UPG_DIR} ] ; then +if [ -f ${UPG_DIR}/.unfinished ] ; then + rm -f ${UPG_DIR}/.unfinished kresd -c /usr/lib/knot-resolver/upgrade-4-to-5.lua >/dev/null 2>/dev/null echo "\n !!! WARNING !!!" - echo "Knot Resolver configuration file was automatically upgraded." - echo "Verify changes manually in /etc/knot-resolver/kresd.conf\n" - mv ${UPG_DIR} ${UPG_DIR}.bak + echo "Knot Resolver configuration file requires manual upgrade.\n" + cat ${UPG_DIR}/kresd.conf.net 2>/dev/null fi if [ "$1" = "configure" ]; then diff --git a/distro/deb/knot-resolver.preinst b/distro/deb/knot-resolver.preinst index c60b5e80473770264f5382fdce07f6fba3b267ec..62dc01849e8e2bcf2caaf62103bd3e8d2c45e86b 100644 --- a/distro/deb/knot-resolver.preinst +++ b/distro/deb/knot-resolver.preinst @@ -5,6 +5,7 @@ set -e if [ -f /lib/systemd/system/kresd.socket ] ; then export UPG_DIR=/etc/knot-resolver/.upgrade-4-to-5 mkdir -p ${UPG_DIR} + touch ${UPG_DIR}/.unfinished for sock in kresd.socket kresd-tls.socket kresd-webmgmt.socket kresd-doh.socket ; do if systemctl is-enabled ${sock} 2>/dev/null | grep -qv masked ; then diff --git a/distro/rpm/knot-resolver.spec b/distro/rpm/knot-resolver.spec index cee182bde9182089ec6c76821553773f9d5f7f0d..c0171461e011e1ec64e2355726596c8cef0103b3 100644 --- a/distro/rpm/knot-resolver.spec +++ b/distro/rpm/knot-resolver.spec @@ -208,6 +208,7 @@ getent passwd knot-resolver >/dev/null || useradd -r -g knot-resolver -d %{_sysc if [ -f %{_unitdir}/kresd.socket ] ; then export UPG_DIR=%{_sysconfdir}/knot-resolver/.upgrade-4-to-5 mkdir -p ${UPG_DIR} + touch ${UPG_DIR}/.unfinished for sock in kresd.socket kresd-tls.socket kresd-webmgmt.socket kresd-doh.socket ; do if systemctl is-enabled ${sock} 2>/dev/null | grep -qv masked ; then @@ -230,23 +231,14 @@ fi %post # upgrade-4-to-5 -%if 0%{?fedora} +%if "x%{?rhel}" == "x" export UPG_DIR=%{_sysconfdir}/knot-resolver/.upgrade-4-to-5 -if [ -d ${UPG_DIR} ] ; then +if [ -f ${UPG_DIR}/.unfinished ] ; then + rm -f ${UPG_DIR}/.unfinished kresd -c %{_libdir}/knot-resolver/upgrade-4-to-5.lua &>/dev/null echo -e "\n !!! WARNING !!!" - echo -e "Knot Resolver configuration file was automatically upgraded." - echo -e "Verify changes manually in %{_sysconfdir}/knot-resolver/kresd.conf\n" - mv ${UPG_DIR} ${UPG_DIR}.bak -fi -%endif -%if 0%{?suse_version} -export UPG_DIR=%{_sysconfdir}/knot-resolver/.upgrade-4-to-5 -if [ -d ${UPG_DIR} ] ; then - echo -e "\n !!! WARNING !!!" - echo -e "Manual upgrade required, run:\n" - echo -e "kresd -c %{_libdir}/knot-resolver/upgrade-4-to-5.lua &>/dev/null && mv %{_sysconfdir}/knot-resolver/.upgrade-4-to-5{,.bak}" - echo -e "\nand verify changes manually in %{_sysconfdir}/knot-resolver/kresd.conf\n" + echo -e "Knot Resolver configuration file requires manual upgrade.\n" + cat ${UPG_DIR}/kresd.conf.net 2>/dev/null fi %endif diff --git a/utils/upgrade/upgrade-4-to-5.lua.in b/utils/upgrade/upgrade-4-to-5.lua.in index ad6c621c74c6f969f4ba55f89306156f07abf876..93f79f1fe1d966101c45553e6be4f0c574079736 100644 --- a/utils/upgrade/upgrade-4-to-5.lua.in +++ b/utils/upgrade/upgrade-4-to-5.lua.in @@ -1,5 +1,5 @@ local upg_dir = '@etc_dir@/.upgrade-4-to-5' -local out = '@etc_dir@/kresd.conf' +local out = upg_dir..'/kresd.conf.net' local sockets = { { file='kresd.socket', kind='dns' }, { file='kresd-tls.socket', kind='tls' }, @@ -16,10 +16,10 @@ if outfile == nil then os.exit(0) -- make no changes and exit end -outfile:write("\n-- START OF AUTOGENERATED BLOCK (upgrade-4-to-5)\n") -outfile:write("-- This block was automatically created during upgrade\n") +outfile:write("-- Suggested network interface configuration\n") outfile:write("-- Please verify these settings match your desired configuration\n") -outfile:write("-- See https://knot-resolver.readthedocs.io/en/stable/upgrading.html\n") +outfile:write("-- and add them to @etc_dir@/kresd.conf\n") +outfile:write("-- See https://knot-resolver.readthedocs.io/en/stable/upgrading.html\n\n") local function write_net_listen(addr, port, kind) -- make sure (addr, port) combination is unique @@ -79,7 +79,7 @@ for _, socket in pairs(sockets) do end end -outfile:write("-- END OF AUTOGENERATED BLOCK (upgrade-4-to-5)\n") +outfile:write("\n") io.close(outfile) os.exit(0)