1 1.1 riastrad #!/bin/sh 2 1.1 riastrad # 3 1.3 kre # $NetBSD: certctl_init,v 1.3 2023/12/25 07:46:12 kre Exp $ 4 1.1 riastrad # 5 1.1 riastrad # PROVIDE: certctl_init 6 1.1 riastrad # REQUIRE: mountcritremote 7 1.1 riastrad # 8 1.1 riastrad # This script ensures that we run `certctl rehash' on first boot of a 9 1.1 riastrad # live image to configure TLS trust anchors for OpenSSL in 10 1.1 riastrad # /etc/openssl/certs. We do this only on first boot by testing whether 11 1.1 riastrad # /etc/openssl/certs is an empty directory. 12 1.1 riastrad # 13 1.1 riastrad # Requires mountcritremote for /usr/sbin/certctl. 14 1.1 riastrad # 15 1.1 riastrad # This is a stop-gap measure to ensure we get TLS trust anchors with 16 1.1 riastrad # live images, which we can't prepare at build time because the 17 1.1 riastrad # preparation requires running openssl(1) as a tool. This stop-gap 18 1.1 riastrad # measure should perhaps be replaced by a more general-purpose way to 19 1.1 riastrad # run postinstall on first boot of the image, but that's a riskier 20 1.1 riastrad # proposition to implement on short notice for netbsd-10. 21 1.1 riastrad 22 1.1 riastrad $_rc_subr_loaded . /etc/rc.subr 23 1.1 riastrad 24 1.1 riastrad name="certctl_init" 25 1.1 riastrad rcvar=${name} 26 1.1 riastrad start_cmd="certctl_init" 27 1.1 riastrad stop_cmd=":" 28 1.1 riastrad 29 1.1 riastrad certctl_init() 30 1.1 riastrad { 31 1.1 riastrad local certsdir 32 1.1 riastrad 33 1.1 riastrad certsdir=/etc/openssl/certs 34 1.1 riastrad 35 1.1 riastrad # If /etc/openssl/certs is a symlink, or exists but is not a 36 1.1 riastrad # directory, or is a directory but is nonempty, then we're not 37 1.1 riastrad # in the first boot's initial configuration. So do nothing. 38 1.1 riastrad if [ -h "$certsdir" ] || 39 1.2 kre { [ -e "$certsdir" ] && ! [ -d "$certsdir" ] ; } || 40 1.2 kre ( [ -d "$certsdir" ] && 41 1.2 kre find -f "$certsdir" -- -maxdepth 0 -type d -empty -exit 1 ) 42 1.3 kre then 43 1.1 riastrad return 44 1.1 riastrad fi 45 1.1 riastrad 46 1.1 riastrad # Otherwise, if /etc/openssl/certs is nonexistent or is an 47 1.1 riastrad # empty directory, run `certctl rehash'. 48 1.1 riastrad echo "Configuring TLS trust anchors." 49 1.1 riastrad certctl rehash 50 1.1 riastrad } 51 1.1 riastrad 52 1.1 riastrad load_rc_config $name 53 1.1 riastrad run_rc_command "$1" 54