net-misc/dhcpcd: copy files to new locations for dhcpcd-7 for #599396
authorRoy Marples <roy@marples.name>
Fri, 11 Nov 2016 17:03:00 +0000 (11:03 -0600)
committerWilliam Hubbs <williamh@gentoo.org>
Fri, 11 Nov 2016 17:08:18 +0000 (11:08 -0600)
Note from WilliamH:
The original patch was modified to use "${EROOT%/}"/ instead of "${ROOT}"/.

Package-Manager: portage-2.3.0

net-misc/dhcpcd/dhcpcd-9999.ebuild

index 0b616f0955c541a5483be56bbea4410925a020ac..f6264d2986fda0bd662be084a95c9886535c8b29 100644 (file)
@@ -79,21 +79,77 @@ src_install()
 
 pkg_postinst()
 {
-       # Upgrade the duid file to the new format if needed
-       local old_duid="${ROOT}"/var/lib/dhcpcd/dhcpcd.duid
-       local new_duid="${ROOT}"/etc/dhcpcd.duid
-       if [ -e "${old_duid}" ] && ! grep -q '..:..:..:..:..:..' "${old_duid}"; then
-               sed -i -e 's/\(..\)/\1:/g; s/:$//g' "${old_duid}"
+       local dbdir="${EROOT%/}"/var/lib/dhcpcd old_files=
+
+       local old_old_duid="${EROOT%/}"/var/lib/dhcpcd/dhcpcd.duid
+       local old_duid="${EROOT%/}"/etc/dhcpcd.duid
+       local new_duid="${dbdir}"/duid
+       if [ -e "${old_old_duid}" ]; then
+               # Upgrade the duid file to the new format if needed
+               if ! grep -q '..:..:..:..:..:..' "${old_old_duid}"; then
+                       sed -i -e 's/\(..\)/\1:/g; s/:$//g' "${old_old_duid}"
+               fi
+
+               # Move the duid to /etc, a more sensible location
+               if [ ! -e "${old_duid}" ]; then
+                       cp -p "${old_old_duid}" "${new_duid}"
+               fi
+               old_files="${old_files} ${old_old_duid}"
+       fi
+
+       # dhcpcd-7 moves the files out of /etc
+       if [ -e "${old_duid}" ]; then
+               if [ ! -e "${new_duid}" ]; then
+                       cp -p "${old_duid}" "${new_duid}"
+               fi
+               old_files="${old_files} ${old_duid}"
+       fi
+       local old_secret="${EROOT%/}"/etc/dhcpcd.secret
+       local new_secret="${dbdir}"/secret
+       if [ -e "${old_secret}" ]; then
+               if [ ! -e "${new_secret}" ]; then
+                       cp -p "${old_secret}" "${new_secret}"
+               fi
+               old_files="${old_files} ${old_secret}"
        fi
 
-       # Move the duid to /etc, a more sensible location
-       if [ -e "${old_duid}" -a ! -e "${new_duid}" ]; then
-               cp -p "${old_duid}" "${new_duid}"
+       # dhcpcd-7 renames some files in /var/lib/dhcpcd
+       local old_rdm="${dbdir}"/dhcpcd-rdm.monotonic
+       local new_rdm="${dbdir}"/rdm_monotonic
+       if [ -e "${old_rdm}" ]; then
+               if [ ! -e "${new_rdm}" ]; then
+                       cp -p "${old_rdm}" "${new_rdm}"
+               fi
+               old_files="${old_files} ${old_rdm}"
+       fi
+       local lease=
+       for lease in "${dbdir}"/dhcpcd-*.lease*; do
+               [ -f "$lease" ] || continue
+               old_files="${old_files} ${lease}"
+               local new_lease=$(basename "$lease" | sed -e "s/dhcpcd-//")
+               [ -e "${dbdir}/${new_lease}" ] && continue
+               cp "${lease}" "${dbdir}/${new_lease}"
+       done
+
+       # Warn about removing stale files
+       if [ -n "${old_files}" ]; then
+               elog
+               elog "dhcpcd-7 has copied dhcpcd.duid and dhcpcd.secret from"
+               elog "${EROOT%/}/etc to ${dbdir}"
+               elog "and copied leases in ${dbdir} to new files with the dhcpcd-"
+               elog "prefix dropped."
+               elog
+               elog "You should remove these files if you don't plan on reverting"
+               elog "to an older version:"
+               local old_file=
+               for old_file in ${old_files}; do
+                       elog "  ${old_file}"
+               done
        fi
 
        if [ -z "$REPLACING_VERSIONS" ]; then
                elog
-        elog "dhcpcd has zeroconf support active by default."
+               elog "dhcpcd has zeroconf support active by default."
                elog "This means it will always obtain an IP address even if no"
                elog "DHCP server can be contacted, which will break any existing"
                elog "failover support you may have configured in your net configuration."