Module Name: src Committed By: lukem Date: Sun Apr 25 01:44:55 UTC 2021
Modified Files: src/usr.sbin/postinstall: postinstall.in Log Message: postinstall: sort the items. keep obsolete* last Consistency and quality of life improvements to postinstall: Order all of the items (including disabled) alphabetically. Consistent comment style before each item block. Move other functions used by do_*() before rather than after do_*(). To generate a diff of this commit: cvs rdiff -u -r1.36 -r1.37 src/usr.sbin/postinstall/postinstall.in Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/usr.sbin/postinstall/postinstall.in diff -u src/usr.sbin/postinstall/postinstall.in:1.36 src/usr.sbin/postinstall/postinstall.in:1.37 --- src/usr.sbin/postinstall/postinstall.in:1.36 Sun Apr 25 01:15:39 2021 +++ src/usr.sbin/postinstall/postinstall.in Sun Apr 25 01:44:55 2021 @@ -1,6 +1,6 @@ #!/bin/sh # -# $NetBSD: postinstall.in,v 1.36 2021/04/25 01:15:39 lukem Exp $ +# $NetBSD: postinstall.in,v 1.37 2021/04/25 01:44:55 lukem Exp $ # # Copyright (c) 2002-2021 The NetBSD Foundation, Inc. # All rights reserved. @@ -590,7 +590,8 @@ exclude() # find all the target symlinks of shared libaries and exclude them # from consideration for removal # -exclude_libs() { +exclude_libs() +{ local target="$(ls -l -d lib*.so.* 2> /dev/null \ | ${AWK} '{ print $11; }' \ | ${SED} -e 's@.*/@@' | ${SORT} -u)" @@ -808,43 +809,118 @@ find_makedev() # items # ----- # +# NOTE: Keep these items sorted, except for obsolete* which are listed last. +# # -# Bluetooth +# atf # -additem bluetooth "Bluetooth configuration is up to date" -do_bluetooth() +handle_atf_user() { - [ -n "$1" ] || err 3 "USAGE: do_bluetooth fix|check" + local op="$1" + local failed=0 + + local conf="${DEST_DIR}/etc/atf/common.conf" + if grep '[^#]*unprivileged-user[ \t]*=.*_atf' "${conf}" >/dev/null + then + if [ "$1" = "fix" ]; then + ${SED} -e \ + "/[^#]*unprivileged-user[\ t]*=/s/_atf/_tests/" \ + "${conf}" >"${conf}.new" + failed=$(( ${failed} + $? )) + mv "${conf}.new" "${conf}" + failed=$(( ${failed} + $? )) + msg "Set unprivileged-user=_tests in ${conf}" + else + msg "unprivileged-user=_atf in ${conf} should be" \ + "unprivileged-user=_tests" + failed=1 + fi + fi + + return ${failed} +} + +additem atf "install missing atf configuration files and validate them" +do_atf() +{ + [ -n "$1" ] || err 3 "USAGE: do_atf fix|check" op="$1" failed=0 - populate_dir "${op}" true \ - "${SRC_DIR}/etc/bluetooth" "${DEST_DIR}/etc/bluetooth" 644 \ - hosts protocols btattach.conf btdevctl.conf - failed=$(( ${failed} + $? )) - - move_file "${op}" "${DEST_DIR}/var/db/btdev.xml" \ - "${DEST_DIR}/var/db/btdevctl.plist" - failed=$(( ${failed} + $? )) + # Ensure atf configuration files are in place. + if find_file_in_dirlist NetBSD.conf "NetBSD.conf" \ + "${SRC_DIR}/external/bsd/atf/etc/atf" \ + "${SRC_DIR}/etc/atf"; then + # ${dir} is set by find_file_in_dirlist() + populate_dir "${op}" true "${dir}" "${DEST_DIR}/etc/atf" 644 \ + NetBSD.conf common.conf || failed=1 + else + failed=1 + fi + if find_file_in_dirlist atf-run.hooks "atf-run.hooks" \ + "${SRC_DIR}/external/bsd/atf/dist/tools/sample" \ + "${SRC_DIR}/etc/atf"; then + # ${dir} is set by find_file_in_dirlist() + populate_dir "${op}" true "${dir}" "${DEST_DIR}/etc/atf" 644 \ + atf-run.hooks || failed=1 + else + failed=1 + fi - notfixed="" - if [ "${op}" = "fix" ]; then - notfixed="${NOT_FIXED}" + # Validate the _atf to _tests user/group renaming. + if [ -f "${DEST_DIR}/etc/atf/common.conf" ]; then + handle_atf_user "${op}" || failed=1 + else + failed=1 fi - for _v in btattach btconfig btdevctl; do - if rcvar_is_enabled "${_v}"; then - msg \ - "${_v} is obsolete in rc.conf(5)${notfixed}: use bluetooth=YES" - failed=$(( ${failed} + 1 )) - fi - done return ${failed} } -fixblock() { + +# +# autofsconfig +# + +additem autofsconfig "automounter configuration files" +do_autofsconfig() +{ + [ -n "$1" ] || err 3 "USAGE: do_autofsconfig fix|check" + local autofs_files=" +include_ldap +include_nis +special_hosts +special_media +special_noauto +special_null +" + op="$1" + failed=0 + if [ "$op" = "fix" ]; then + mkdir -p "${DEST_DIR}/etc/autofs" + fi + failed=$(( ${failed} + $? )) + populate_dir "$op" false "${SRC_DIR}/etc" \ + "${DEST_DIR}/etc" \ + 644 \ + auto_master + failed=$(( ${failed} + $? )) + populate_dir "$op" false "${SRC_DIR}/etc/autofs" \ + "${DEST_DIR}/etc/autofs" \ + 644 \ + ${autofs_files} + return ${failed} +} + + +# +# blocklist +# + +fixblock() +{ local op="$1" local target="${DEST_DIR}$2" @@ -869,9 +945,6 @@ fixblock() { fi } -# -# blocklist update -# additem blocklist "rename old files to blocklist" do_blocklist() { @@ -897,9 +970,108 @@ do_blocklist() done } + +# +# bluetooth +# + +additem bluetooth "Bluetooth configuration is up to date" +do_bluetooth() +{ + [ -n "$1" ] || err 3 "USAGE: do_bluetooth fix|check" + op="$1" + failed=0 + + populate_dir "${op}" true \ + "${SRC_DIR}/etc/bluetooth" "${DEST_DIR}/etc/bluetooth" 644 \ + hosts protocols btattach.conf btdevctl.conf + failed=$(( ${failed} + $? )) + + move_file "${op}" "${DEST_DIR}/var/db/btdev.xml" \ + "${DEST_DIR}/var/db/btdevctl.plist" + failed=$(( ${failed} + $? )) + + notfixed="" + if [ "${op}" = "fix" ]; then + notfixed="${NOT_FIXED}" + fi + for _v in btattach btconfig btdevctl; do + if rcvar_is_enabled "${_v}"; then + msg \ + "${_v} is obsolete in rc.conf(5)${notfixed}: use bluetooth=YES" + failed=$(( ${failed} + 1 )) + fi + done + + return ${failed} +} + + +# +# catpages +# + +obsolete_catpages() +{ + basedir="$2" + section="$3" + mandir="${basedir}/man${section}" + catdir="${basedir}/cat${section}" + test -d "$mandir" || return 0 + test -d "$catdir" || return 0 + (cd "$mandir" && find . -type f) | { + failed=0 + while read manpage; do + manpage="${manpage#./}" + case "$manpage" in + *.Z) + catname="$catdir/${manpage%.*.Z}.0" + ;; + *.gz) + catname="$catdir/${manpage%.*.gz}.0" + ;; + *) + catname="$catdir/${manpage%.*}.0" + ;; + esac + test -e "$catname" -a "$catname" -ot "$mandir/$manpage" || continue + if [ "$1" = "fix" ]; then + rm "$catname" + failed=$(( ${failed} + $? )) + msg "Removed obsolete cat page $catname" + else + msg "Obsolete cat page $catname" + failed=1 + fi + done + exit $failed + } +} + +additem catpages "remove outdated cat pages" +do_catpages() +{ + failed=0 + for manbase in /usr/share/man /usr/X11R6/man /usr/X11R7/man; do + for sec in 1 2 3 4 5 6 7 8 9; do + obsolete_catpages "$1" "${DEST_DIR}${manbase}" "${sec}" + failed=$(( ${failed} + $? )) + if [ "$1" = "fix" ]; then + rmdir "${DEST_DIR}${manbase}/cat${sec}"/* \ + 2>/dev/null + rmdir "${DEST_DIR}${manbase}/cat${sec}" \ + 2>/dev/null + fi + done + done + return $failed +} + + # # ddbonpanic # + additem ddbonpanic "verify ddb.onpanic is configured in sysctl.conf" do_ddbonpanic() { @@ -926,9 +1098,11 @@ do_ddbonpanic() return ${result} } + # # defaults # + additem defaults "/etc/defaults/ being up to date" do_defaults() { @@ -981,9 +1155,11 @@ do_defaults() return ${failed} } + # # dhcpcd # + additem dhcpcd "dhcpcd configuration is up to date" do_dhcpcd() { @@ -1062,9 +1238,11 @@ do_dhcpcd() return ${failed} } + # # dhcpcdrundir # + additem dhcpcdrundir "accidentaly created /@RUNDIR@ does not exist" do_dhcpcdrundir() { @@ -1086,9 +1264,11 @@ do_dhcpcdrundir() return ${failed} } + # # envsys # + additem envsys "envsys configuration is up to date" do_envsys() { @@ -1113,47 +1293,15 @@ do_envsys() return ${failed} } + # -# autofs config files +# fontconfig # -additem autofsconfig "automounter configuration files" -do_autofsconfig() + +additem fontconfig "X11 font configuration is up to date" +do_fontconfig() { - [ -n "$1" ] || err 3 "USAGE: do_autofsconfig fix|check" - local autofs_files=" -include_ldap -include_nis -special_hosts -special_media -special_noauto -special_null -" - op="$1" - failed=0 - if [ "$op" = "fix" ]; then - mkdir -p "${DEST_DIR}/etc/autofs" - fi - failed=$(( ${failed} + $? )) - populate_dir "$op" false "${SRC_DIR}/etc" \ - "${DEST_DIR}/etc" \ - 644 \ - auto_master - failed=$(( ${failed} + $? )) - populate_dir "$op" false "${SRC_DIR}/etc/autofs" \ - "${DEST_DIR}/etc/autofs" \ - 644 \ - ${autofs_files} - return ${failed} -} - - -# -# X11 fontconfig -# -additem fontconfig "X11 font configuration is up to date" -do_fontconfig() -{ - [ -n "$1" ] || err 3 "USAGE: do_fontconfig fix|check" + [ -n "$1" ] || err 3 "USAGE: do_fontconfig fix|check" op="$1" failed=0 @@ -1250,9 +1398,11 @@ do_fontconfig() return ${failed} } + # # gid # + additem gid "required groups in /etc/group" do_gid() { @@ -1265,9 +1415,11 @@ do_gid() _unbound _nsd nvmm _dhcpcd } + # # gpio # + additem gpio "gpio configuration is up to date" do_gpio() { @@ -1282,9 +1434,11 @@ do_gpio() return ${failed} } + # # hosts # + additem hosts "/etc/hosts being up to date" do_hosts() { @@ -1300,9 +1454,11 @@ do_hosts() return $? } + # # iscsi # + additem iscsi "/etc/iscsi is populated" do_iscsi() { @@ -1315,9 +1471,40 @@ do_iscsi() return $? } + +# +# mailerconf +# + +adddisableditem mailerconf "update /etc/mailer.conf after sendmail removal" +do_mailerconf() +{ + [ -n "$1" ] || err 3 "USAGE: do_mailterconf fix|check" + op="$1" + + failed=0 + mta_path="$(${AWK} '/^sendmail[ \t]/{print$2}' \ + "${DEST_DIR}/etc/mailer.conf")" + old_sendmail_path="/usr/libexec/sendmail/sendmail" + if [ "${mta_path}" = "${old_sendmail_path}" ]; then + if [ "$op" = check ]; then + msg "mailer.conf points to obsolete ${old_sendmail_path}" + failed=1; + else + populate_dir "${op}" false \ + "${SRC_DIR}/etc" "${DEST_DIR}/etc" 644 mailer.conf + failed=$? + fi + fi + + return ${failed} +} + + # # makedev # + additem makedev "/dev/MAKEDEV being up to date" do_makedev() { @@ -1351,9 +1538,40 @@ do_makedev() return ${failed} } + +# +# man.conf +# + +additem manconf "check for a mandoc usage in /etc/man.conf" +do_manconf() +{ + [ -n "$1" ] || err 3 "USAGE: do_manconf fix|check" + op="$1" + failed=0 + + [ -f "${DEST_DIR}/etc/man.conf" ] || return 0 + if ${GREP} -w "mandoc" "${DEST_DIR}/etc/man.conf" >/dev/null 2>&1; + then + failed=0; + else + failed=1 + notfixed="" + if [ "${op}" = "fix" ]; then + notfixed="${NOT_FIXED}" + fi + msg "The file /etc/man.conf has not been adapted to mandoc usage; you" + msg "probably want to copy a new version over. ${notfixed}" + fi + + return ${failed} +} + + # # motd # + additem motd "contents of motd" do_motd() { @@ -1391,9 +1609,11 @@ do_motd() return ${result} } + # # mtree # + additem mtree "/etc/mtree/ being up to date" do_mtree() { @@ -1420,9 +1640,11 @@ do_mtree() return ${failed} } + # # named # + additem named "named configuration update" do_named() { @@ -1438,9 +1660,11 @@ do_named() root.cache } + # # pam # + additem pam "/etc/pam.d is populated" do_pam() { @@ -1459,9 +1683,11 @@ do_pam() return ${failed} } + # # periodic # + additem periodic "/etc/{daily,weekly,monthly,security} being up to date" do_periodic() { @@ -1471,9 +1697,11 @@ do_periodic() daily weekly monthly security } + # # pf # + additem pf "pf configuration being up to date" do_pf() { @@ -1496,9 +1724,103 @@ do_pf() return ${failed} } + +# +# ptyfsoldnodes +# + +additem ptyfsoldnodes "remove legacy device nodes when using ptyfs" +do_ptyfsoldnodes() +{ + [ -n "$1" ] || err 3 "USAGE: do_ptyfsoldnodes fix|check" + _ptyfs_op="$1" + + # Check whether ptyfs is in use + failed=0; + if ! ${GREP} -E "^ptyfs" "${DEST_DIR}/etc/fstab" > /dev/null; then + msg "ptyfs is not in use" + return 0 + fi + + if [ ! -e "${DEST_DIR}/dev/pts" ]; then + msg "ptyfs is not properly configured: missing /dev/pts" + return 1 + fi + + # Find the device major numbers for the pty master and slave + # devices, by parsing the output from "MAKEDEV -s pty0". + # + # Output from MAKEDEV looks like this: + # ./ttyp0 type=char device=netbsd,5,0 mode=666 gid=0 uid=0 + # ./ptyp0 type=char device=netbsd,6,0 mode=666 gid=0 uid=0 + # + # Output from awk, used in the eval statement, looks like this: + # maj_ptym=6; maj_ptys=5; + # + find_makedev + eval "$( + ${HOST_SH} "${MAKEDEV_DIR}/MAKEDEV" -s pty0 2>/dev/null \ + | ${AWK} '\ + BEGIN { before_re = ".*device=[a-zA-Z]*,"; after_re = ",.*"; } + /ptyp0/ { maj_ptym = gensub(before_re, "", 1, $0); + maj_ptym = gensub(after_re, "", 1, maj_ptym); } + /ttyp0/ { maj_ptys = gensub(before_re, "", 1, $0); + maj_ptys = gensub(after_re, "", 1, maj_ptys); } + END { print "maj_ptym=" maj_ptym "; maj_ptys=" maj_ptys ";"; } + ' + )" + #msg "Major numbers are maj_ptym=${maj_ptym} maj_ptys=${maj_ptys}" + if [ -z "$maj_ptym" ] || [ -z "$maj_ptys" ]; then + msg "Cannot find device major numbers for pty master and slave" + return 1 + fi + + # look for /dev/[pt]ty[p-zP-T][0-9a-zA-Z], and check that they + # have the expected device major numbers. ttyv* is typically not a + # pty device, but we check it anyway. + # + # The "for d1" loop is intended to avoid overflowing ARG_MAX; + # otherwise we could have used a single glob pattern. + # + # If there are no files that match a particular pattern, + # then stat prints something like: + # stat: /dev/[pt]tyx?: lstat: No such file or directory + # and we ignore it. XXX: We also ignore other error messages. + # + _ptyfs_tmp="$(mktemp /tmp/postinstall.ptyfs.XXXXXXXX)" + for d1 in p q r s t u v w x y z P Q R S T; do + ${STAT} -f "%Hr %N" "${DEST_DIR}/dev/"[pt]ty${d1}? 2>&1 + done \ + | while read -r major node ; do + case "$major" in + ${maj_ptym}|${maj_ptys}) echo "$node" ;; + esac + done >"${_ptyfs_tmp}" + + _desc="legacy device node" + while read node; do + if [ "${_ptyfs_op}" = "check" ]; then + msg "Remove ${_desc} ${node}" + failed=1 + else # "fix" + if rm "${node}"; then + msg "Removed ${_desc} ${node}" + else + warn "Failed to remove ${_desc} ${node}" + failed=1 + fi + fi + done < "${_ptyfs_tmp}" + rm "${_ptyfs_tmp}" + + return ${failed} +} + + # # pwd_mkdb # + additem pwd_mkdb "passwd database version" do_pwd_mkdb() { @@ -1535,6 +1857,7 @@ do_pwd_mkdb() return ${failed} } + # # rc # @@ -1716,9 +2039,11 @@ do_rc() return ${failed} } + # # sendmail # + adddisableditem sendmail "remove obsolete sendmail configuration files and scripts" do_sendmail() { @@ -1749,36 +2074,11 @@ do_sendmail() return ${failed} } -# -# mailerconf -# -adddisableditem mailerconf "update /etc/mailer.conf after sendmail removal" -do_mailerconf() -{ - [ -n "$1" ] || err 3 "USAGE: do_mailterconf fix|check" - op="$1" - - failed=0 - mta_path="$(${AWK} '/^sendmail[ \t]/{print$2}' \ - "${DEST_DIR}/etc/mailer.conf")" - old_sendmail_path="/usr/libexec/sendmail/sendmail" - if [ "${mta_path}" = "${old_sendmail_path}" ]; then - if [ "$op" = check ]; then - msg "mailer.conf points to obsolete ${old_sendmail_path}" - failed=1; - else - populate_dir "${op}" false \ - "${SRC_DIR}/etc" "${DEST_DIR}/etc" 644 mailer.conf - failed=$? - fi - fi - - return ${failed} -} # # ssh # + additem ssh "ssh configuration update" do_ssh() { @@ -1870,41 +2170,133 @@ do_ssh() return ${failed} } + # -# wscons +# tcpdumpchroot # -additem wscons "wscons configuration file update" -do_wscons() -{ - [ -n "$1" ] || err 3 "USAGE: do_wscons fix|check" - op="$1" - [ -f "${DEST_DIR}/etc/wscons.conf" ] || return 0 +additem tcpdumpchroot "remove /var/chroot/tcpdump/etc/protocols" +do_tcpdumpchroot() +{ + [ -n "$1" ] || err 3 "USAGE: do_tcpdumpchroot fix|check" - failed=0 - notfixed="" - if [ "${op}" = "fix" ]; then - notfixed="${NOT_FIXED}" - fi - while read _type _arg1 _rest; do - if [ "${_type}" = "mux" -a "${_arg1}" = "1" ]; then - msg \ - "Obsolete wscons.conf(5) entry \""${_type} ${_arg1}"\" found.${notfixed}" + failed=0; + if [ -r "${DEST_DIR}/var/chroot/tcpdump/etc/protocols" ]; then + if [ "$1" = "fix" ]; then + rm "${DEST_DIR}/var/chroot/tcpdump/etc/protocols" + failed=$(( ${failed} + $? )) + rmdir "${DEST_DIR}/var/chroot/tcpdump/etc" + failed=$(( ${failed} + $? )) + else failed=1 fi - done < "${DEST_DIR}/etc/wscons.conf" - + fi return ${failed} } + # -# X11 +# uid # -additem x11 "x11 configuration update" -do_x11() + +additem uid "required users in /etc/master.passwd" +do_uid() { - [ -n "$1" ] || err 3 "USAGE: do_x11 fix|check" - op="$1" + [ -n "$1" ] || err 3 "USAGE: do_uid fix|check" + + check_ids "$1" users "${DEST_DIR}/etc/master.passwd" \ + "${SRC_DIR}/etc/master.passwd" 12 \ + postfix SKIP named ntpd sshd SKIP _pflogd _rwhod SKIP _proxy \ + _timedc _sdpd _httpd _mdnsd _tests _tcpdump _tss SKIP _rtadvd \ + SKIP _unbound _nsd SKIP _dhcpcd +} + + +# +# varrwho +# + +additem varrwho "required ownership of files in /var/rwho" +do_varrwho() +{ + [ -n "$1" ] || err 3 "USAGE: do_varrwho fix|check" + + contents_owner "$1" "${DEST_DIR}/var/rwho" _rwhod _rwhod +} + + +# +# varshm +# + +additem varshm "check for a tmpfs mounted on /var/shm" +do_varshm() +{ + [ -n "$1" ] || err 3 "USAGE: do_varshm fix|check" + op="$1" + failed=0 + + [ -f "${DEST_DIR}/etc/fstab" ] || return 0 + if ${GREP} -E "^var_shm_symlink" "${DEST_DIR}/etc/rc.conf" >/dev/null 2>&1; + then + failed=0; + elif ${GREP} -w "/var/shm" "${DEST_DIR}/etc/fstab" >/dev/null 2>&1; + then + failed=0; + else + if [ "${op}" = "check" ]; then + failed=1 + msg "No /var/shm mount found in ${DEST_DIR}/etc/fstab" + elif [ "${op}" = "fix" ]; then + printf '\ntmpfs\t/var/shm\ttmpfs\trw,-m1777,-sram%%25\n' \ + >> "${DEST_DIR}/etc/fstab" + msg "Added tmpfs with 25% ram limit as /var/shm" + + fi + fi + + return ${failed} +} + + +# +# wscons +# + +additem wscons "wscons configuration file update" +do_wscons() +{ + [ -n "$1" ] || err 3 "USAGE: do_wscons fix|check" + op="$1" + + [ -f "${DEST_DIR}/etc/wscons.conf" ] || return 0 + + failed=0 + notfixed="" + if [ "${op}" = "fix" ]; then + notfixed="${NOT_FIXED}" + fi + while read _type _arg1 _rest; do + if [ "${_type}" = "mux" -a "${_arg1}" = "1" ]; then + msg \ + "Obsolete wscons.conf(5) entry \""${_type} ${_arg1}"\" found.${notfixed}" + failed=1 + fi + done < "${DEST_DIR}/etc/wscons.conf" + + return ${failed} +} + + +# +# x11 +# + +additem x11 "x11 configuration update" +do_x11() +{ + [ -n "$1" ] || err 3 "USAGE: do_x11 fix|check" + op="$1" failed=0 _etcx11="${DEST_DIR}/etc/X11" @@ -1961,6 +2353,7 @@ do_x11() return ${failed} } + # # xkb # @@ -1970,6 +2363,7 @@ do_x11() # or at least adding that one file (which we may be able to do if X11SRCDIR # is available). # + additem xkb "clean up for xkbdata to xkeyboard-config upgrade" do_xkb() { @@ -2026,336 +2420,12 @@ ${pcpath} was a directory, should be a f return $failed } -# -# uid -# -additem uid "required users in /etc/master.passwd" -do_uid() -{ - [ -n "$1" ] || err 3 "USAGE: do_uid fix|check" - - check_ids "$1" users "${DEST_DIR}/etc/master.passwd" \ - "${SRC_DIR}/etc/master.passwd" 12 \ - postfix SKIP named ntpd sshd SKIP _pflogd _rwhod SKIP _proxy \ - _timedc _sdpd _httpd _mdnsd _tests _tcpdump _tss SKIP _rtadvd \ - SKIP _unbound _nsd SKIP _dhcpcd -} - - -# -# varrwho -# -additem varrwho "required ownership of files in /var/rwho" -do_varrwho() -{ - [ -n "$1" ] || err 3 "USAGE: do_varrwho fix|check" - - contents_owner "$1" "${DEST_DIR}/var/rwho" _rwhod _rwhod -} - - -# -# tcpdumpchroot -# -additem tcpdumpchroot "remove /var/chroot/tcpdump/etc/protocols" -do_tcpdumpchroot() -{ - [ -n "$1" ] || err 3 "USAGE: do_tcpdumpchroot fix|check" - - failed=0; - if [ -r "${DEST_DIR}/var/chroot/tcpdump/etc/protocols" ]; then - if [ "$1" = "fix" ]; then - rm "${DEST_DIR}/var/chroot/tcpdump/etc/protocols" - failed=$(( ${failed} + $? )) - rmdir "${DEST_DIR}/var/chroot/tcpdump/etc" - failed=$(( ${failed} + $? )) - else - failed=1 - fi - fi - return ${failed} -} - - -# -# atf -# -additem atf "install missing atf configuration files and validate them" -do_atf() -{ - [ -n "$1" ] || err 3 "USAGE: do_atf fix|check" - op="$1" - failed=0 - - # Ensure atf configuration files are in place. - if find_file_in_dirlist NetBSD.conf "NetBSD.conf" \ - "${SRC_DIR}/external/bsd/atf/etc/atf" \ - "${SRC_DIR}/etc/atf"; then - # ${dir} is set by find_file_in_dirlist() - populate_dir "${op}" true "${dir}" "${DEST_DIR}/etc/atf" 644 \ - NetBSD.conf common.conf || failed=1 - else - failed=1 - fi - if find_file_in_dirlist atf-run.hooks "atf-run.hooks" \ - "${SRC_DIR}/external/bsd/atf/dist/tools/sample" \ - "${SRC_DIR}/etc/atf"; then - # ${dir} is set by find_file_in_dirlist() - populate_dir "${op}" true "${dir}" "${DEST_DIR}/etc/atf" 644 \ - atf-run.hooks || failed=1 - else - failed=1 - fi - - # Validate the _atf to _tests user/group renaming. - if [ -f "${DEST_DIR}/etc/atf/common.conf" ]; then - handle_atf_user "${op}" || failed=1 - else - failed=1 - fi - - return ${failed} -} - -handle_atf_user() -{ - local op="$1" - local failed=0 - - local conf="${DEST_DIR}/etc/atf/common.conf" - if grep '[^#]*unprivileged-user[ \t]*=.*_atf' "${conf}" >/dev/null - then - if [ "$1" = "fix" ]; then - ${SED} -e \ - "/[^#]*unprivileged-user[\ t]*=/s/_atf/_tests/" \ - "${conf}" >"${conf}.new" - failed=$(( ${failed} + $? )) - mv "${conf}.new" "${conf}" - failed=$(( ${failed} + $? )) - msg "Set unprivileged-user=_tests in ${conf}" - else - msg "unprivileged-user=_atf in ${conf} should be" \ - "unprivileged-user=_tests" - failed=1 - fi - fi - - return ${failed} -} - -# -# catpages -# -obsolete_catpages() -{ - basedir="$2" - section="$3" - mandir="${basedir}/man${section}" - catdir="${basedir}/cat${section}" - test -d "$mandir" || return 0 - test -d "$catdir" || return 0 - (cd "$mandir" && find . -type f) | { - failed=0 - while read manpage; do - manpage="${manpage#./}" - case "$manpage" in - *.Z) - catname="$catdir/${manpage%.*.Z}.0" - ;; - *.gz) - catname="$catdir/${manpage%.*.gz}.0" - ;; - *) - catname="$catdir/${manpage%.*}.0" - ;; - esac - test -e "$catname" -a "$catname" -ot "$mandir/$manpage" || continue - if [ "$1" = "fix" ]; then - rm "$catname" - failed=$(( ${failed} + $? )) - msg "Removed obsolete cat page $catname" - else - msg "Obsolete cat page $catname" - failed=1 - fi - done - exit $failed - } -} - -additem catpages "remove outdated cat pages" -do_catpages() -{ - failed=0 - for manbase in /usr/share/man /usr/X11R6/man /usr/X11R7/man; do - for sec in 1 2 3 4 5 6 7 8 9; do - obsolete_catpages "$1" "${DEST_DIR}${manbase}" "${sec}" - failed=$(( ${failed} + $? )) - if [ "$1" = "fix" ]; then - rmdir "${DEST_DIR}${manbase}/cat${sec}"/* \ - 2>/dev/null - rmdir "${DEST_DIR}${manbase}/cat${sec}" \ - 2>/dev/null - fi - done - done - return $failed -} - -# -# man.conf -# -additem manconf "check for a mandoc usage in /etc/man.conf" -do_manconf() -{ - [ -n "$1" ] || err 3 "USAGE: do_manconf fix|check" - op="$1" - failed=0 - - [ -f "${DEST_DIR}/etc/man.conf" ] || return 0 - if ${GREP} -w "mandoc" "${DEST_DIR}/etc/man.conf" >/dev/null 2>&1; - then - failed=0; - else - failed=1 - notfixed="" - if [ "${op}" = "fix" ]; then - notfixed="${NOT_FIXED}" - fi - msg "The file /etc/man.conf has not been adapted to mandoc usage; you" - msg "probably want to copy a new version over. ${notfixed}" - fi - - return ${failed} -} - - -# -# ptyfsoldnodes -# -additem ptyfsoldnodes "remove legacy device nodes when using ptyfs" -do_ptyfsoldnodes() -{ - [ -n "$1" ] || err 3 "USAGE: do_ptyfsoldnodes fix|check" - _ptyfs_op="$1" - - # Check whether ptyfs is in use - failed=0; - if ! ${GREP} -E "^ptyfs" "${DEST_DIR}/etc/fstab" > /dev/null; then - msg "ptyfs is not in use" - return 0 - fi - - if [ ! -e "${DEST_DIR}/dev/pts" ]; then - msg "ptyfs is not properly configured: missing /dev/pts" - return 1 - fi - - # Find the device major numbers for the pty master and slave - # devices, by parsing the output from "MAKEDEV -s pty0". - # - # Output from MAKEDEV looks like this: - # ./ttyp0 type=char device=netbsd,5,0 mode=666 gid=0 uid=0 - # ./ptyp0 type=char device=netbsd,6,0 mode=666 gid=0 uid=0 - # - # Output from awk, used in the eval statement, looks like this: - # maj_ptym=6; maj_ptys=5; - # - find_makedev - eval "$( - ${HOST_SH} "${MAKEDEV_DIR}/MAKEDEV" -s pty0 2>/dev/null \ - | ${AWK} '\ - BEGIN { before_re = ".*device=[a-zA-Z]*,"; after_re = ",.*"; } - /ptyp0/ { maj_ptym = gensub(before_re, "", 1, $0); - maj_ptym = gensub(after_re, "", 1, maj_ptym); } - /ttyp0/ { maj_ptys = gensub(before_re, "", 1, $0); - maj_ptys = gensub(after_re, "", 1, maj_ptys); } - END { print "maj_ptym=" maj_ptym "; maj_ptys=" maj_ptys ";"; } - ' - )" - #msg "Major numbers are maj_ptym=${maj_ptym} maj_ptys=${maj_ptys}" - if [ -z "$maj_ptym" ] || [ -z "$maj_ptys" ]; then - msg "Cannot find device major numbers for pty master and slave" - return 1 - fi - - # look for /dev/[pt]ty[p-zP-T][0-9a-zA-Z], and check that they - # have the expected device major numbers. ttyv* is typically not a - # pty device, but we check it anyway. - # - # The "for d1" loop is intended to avoid overflowing ARG_MAX; - # otherwise we could have used a single glob pattern. - # - # If there are no files that match a particular pattern, - # then stat prints something like: - # stat: /dev/[pt]tyx?: lstat: No such file or directory - # and we ignore it. XXX: We also ignore other error messages. - # - _ptyfs_tmp="$(mktemp /tmp/postinstall.ptyfs.XXXXXXXX)" - for d1 in p q r s t u v w x y z P Q R S T; do - ${STAT} -f "%Hr %N" "${DEST_DIR}/dev/"[pt]ty${d1}? 2>&1 - done \ - | while read -r major node ; do - case "$major" in - ${maj_ptym}|${maj_ptys}) echo "$node" ;; - esac - done >"${_ptyfs_tmp}" - - _desc="legacy device node" - while read node; do - if [ "${_ptyfs_op}" = "check" ]; then - msg "Remove ${_desc} ${node}" - failed=1 - else # "fix" - if rm "${node}"; then - msg "Removed ${_desc} ${node}" - else - warn "Failed to remove ${_desc} ${node}" - failed=1 - fi - fi - done < "${_ptyfs_tmp}" - rm "${_ptyfs_tmp}" - - return ${failed} -} - - -# -# varshm -# -additem varshm "check for a tmpfs mounted on /var/shm" -do_varshm() -{ - [ -n "$1" ] || err 3 "USAGE: do_varshm fix|check" - op="$1" - failed=0 - - [ -f "${DEST_DIR}/etc/fstab" ] || return 0 - if ${GREP} -E "^var_shm_symlink" "${DEST_DIR}/etc/rc.conf" >/dev/null 2>&1; - then - failed=0; - elif ${GREP} -w "/var/shm" "${DEST_DIR}/etc/fstab" >/dev/null 2>&1; - then - failed=0; - else - if [ "${op}" = "check" ]; then - failed=1 - msg "No /var/shm mount found in ${DEST_DIR}/etc/fstab" - elif [ "${op}" = "fix" ]; then - printf '\ntmpfs\t/var/shm\ttmpfs\trw,-m1777,-sram%%25\n' \ - >> "${DEST_DIR}/etc/fstab" - msg "Added tmpfs with 25% ram limit as /var/shm" - - fi - fi - - return ${failed} -} # # obsolete_stand +# obsolete_stand_debug # + obsolete_stand_internal() { local prefix="$1" @@ -2392,7 +2462,15 @@ do_obsolete_stand_debug() return $? } -listarchsubdirs() { + +# +# obsolete +# +# NOTE: This item is last to allow other items to move obsolete files. +# + +listarchsubdirs() +{ if ! $SOURCEMODE; then echo "@ARCHSUBDIRS@" else @@ -2401,8 +2479,8 @@ listarchsubdirs() { fi } - -getarchsubdirs() { +getarchsubdirs() +{ local m case ${MACHINE_ARCH} in *arm*|*aarch64*) m=arm;; @@ -2415,7 +2493,8 @@ getarchsubdirs() { done | ${SORT} -u | ${SED} -n -e "/=${m}/s@.*=${m}/\(.*\)@\1@p" } -getcompatlibdirs() { +getcompatlibdirs() +{ for i in $(getarchsubdirs); do if [ -d "${DEST_DIR}/usr/lib/$i" ]; then echo /usr/lib/$i @@ -2423,11 +2502,6 @@ getcompatlibdirs() { done } -# -# obsolete -# -# NOTE: This item is last to allow other items to move obsolete files. -# additem obsolete "remove obsolete file sets and minor libraries" do_obsolete() { @@ -2453,6 +2527,7 @@ do_obsolete() return ${failed} } + # # end of items # ------------