1 #!/bin/sh 2 # 3 # $NetBSD: sysdb,v 1.26 2023/12/25 08:38:32 kre Exp $ 4 # 5 6 # PROVIDE: sysdb 7 # REQUIRE: mountcritremote 8 # BEFORE: DAEMON 9 10 $_rc_subr_loaded . /etc/rc.subr 11 12 name="sysdb" 13 rcvar=$name 14 start_cmd="sysdb_start" 15 stop_cmd=":" 16 extra_commands="devdb utmp services netgroup password" 17 devdb_cmd="build_devdb" 18 utmp_cmd="build_utmp" 19 services_cmd="build_services" 20 netgroup_cmd="build_netgroup" 21 password_cmd="build_password" 22 echo=: 23 24 sysdb_start() 25 { 26 echo -n "Building databases:" 27 echo=echo 28 comma=" " 29 $devdb_cmd 30 $utmp_cmd 31 $services_cmd 32 $netgroup_cmd 33 $password_cmd 34 echo "." 35 } 36 37 check_file() 38 { 39 local src="$1" 40 local db="$2" 41 42 shift 2 43 if ! [ -e "$src" ]; then 44 return 45 fi 46 if ! [ -f "$db" ] || [ "$src" -nt "$db" ]; then 47 $echo -n "$comma${src##*/}" 48 comma=", " 49 "$@" 50 fi 51 } 52 53 build_services() 54 { 55 check_file /etc/services /var/db/services.cdb services_mkdb -q 56 } 57 58 build_netgroup() 59 { 60 check_file /etc/netgroup /var/db/netgroup.db netgroup_mkdb 61 } 62 63 build_devdb() 64 { 65 check_file /dev /var/run/dev.db dev_mkdb 66 check_file /dev /var/run/dev.cdb dev_mkdb 67 } 68 69 build_password() 70 { 71 local p=/etc/master.passwd 72 check_file $p /etc/spwd.db pwd_mkdb -w $p 73 } 74 75 build_utmp() 76 { 77 # Re-create /var/run/utmp and /var/run/utmpx, which are 78 # deleted by mountcritlocal but can't be recreated by it 79 # because install and chown may not be available then 80 # (possibly no /usr). 81 # 82 local i 83 for i in "" x; do 84 if ! [ -f /var/run/utmp$i ]; then 85 $echo -n "${comma}utmp$i" 86 comma=", " 87 install -c -m 664 -g utmp /dev/null /var/run/utmp$i 88 fi 89 done 90 } 91 92 load_rc_config $name 93 run_rc_command "$1" 94