diff options
Diffstat (limited to 'buildpkg.sh.in')
-rw-r--r-- | buildpkg.sh.in | 174 |
1 files changed, 147 insertions, 27 deletions
diff --git a/buildpkg.sh.in b/buildpkg.sh.in index a3960cb89..a3b9014bc 100644 --- a/buildpkg.sh.in +++ b/buildpkg.sh.in | |||
@@ -46,6 +46,8 @@ PKG_REQUEST_LOCAL=../pkg-request.local | |||
46 | # end of sourced files | 46 | # end of sourced files |
47 | # | 47 | # |
48 | OPENSSHD=opensshd.init | 48 | OPENSSHD=opensshd.init |
49 | OPENSSH_MANIFEST=openssh.xml | ||
50 | OPENSSH_FMRI=svc:/site/openssh:default | ||
49 | 51 | ||
50 | PATH_GROUPADD_PROG=@PATH_GROUPADD_PROG@ | 52 | PATH_GROUPADD_PROG=@PATH_GROUPADD_PROG@ |
51 | PATH_USERADD_PROG=@PATH_USERADD_PROG@ | 53 | PATH_USERADD_PROG=@PATH_USERADD_PROG@ |
@@ -60,6 +62,10 @@ SYSTEM_DIR="/etc \ | |||
60 | /etc/rc1.d \ | 62 | /etc/rc1.d \ |
61 | /etc/rc2.d \ | 63 | /etc/rc2.d \ |
62 | /etc/opt \ | 64 | /etc/opt \ |
65 | /lib \ | ||
66 | /lib/svc \ | ||
67 | /lib/svc/method \ | ||
68 | /lib/svc/method/site \ | ||
63 | /opt \ | 69 | /opt \ |
64 | /opt/bin \ | 70 | /opt/bin \ |
65 | /usr \ | 71 | /usr \ |
@@ -82,6 +88,9 @@ SYSTEM_DIR="/etc \ | |||
82 | /var \ | 88 | /var \ |
83 | /var/opt \ | 89 | /var/opt \ |
84 | /var/run \ | 90 | /var/run \ |
91 | /var/svc \ | ||
92 | /var/svc/manifest \ | ||
93 | /var/svc/manifest/site \ | ||
85 | /var/tmp \ | 94 | /var/tmp \ |
86 | /tmp" | 95 | /tmp" |
87 | 96 | ||
@@ -119,6 +128,12 @@ do | |||
119 | eval $confvar=`grep "^$confvar=" Makefile | cut -d = -f 2` | 128 | eval $confvar=`grep "^$confvar=" Makefile | cut -d = -f 2` |
120 | done | 129 | done |
121 | 130 | ||
131 | ## Are we using Solaris' SMF? | ||
132 | DO_SMF=0 | ||
133 | if egrep "^#define USE_SOLARIS_PROCESS_CONTRACTS" config.h > /dev/null 2>&1 | ||
134 | then | ||
135 | DO_SMF=1 | ||
136 | fi | ||
122 | 137 | ||
123 | ## Collect value of privsep user | 138 | ## Collect value of privsep user |
124 | for confvar in SSH_PRIVSEP_USER | 139 | for confvar in SSH_PRIVSEP_USER |
@@ -168,10 +183,25 @@ then | |||
168 | fi | 183 | fi |
169 | 184 | ||
170 | ## Setup our run level stuff while we are at it. | 185 | ## Setup our run level stuff while we are at it. |
171 | mkdir -p $FAKE_ROOT${TEST_DIR}/etc/init.d | 186 | if [ $DO_SMF -eq 1 ] |
187 | then | ||
188 | # For Solaris' SMF, /lib/svc/method/site is the preferred place | ||
189 | # for start/stop scripts that aren't supplied with the OS, and | ||
190 | # similarly /var/svc/manifest/site for manifests. | ||
191 | mkdir -p $FAKE_ROOT${TEST_DIR}/lib/svc/method/site | ||
192 | mkdir -p $FAKE_ROOT${TEST_DIR}/var/svc/manifest/site | ||
193 | |||
194 | cp ${OPENSSHD} $FAKE_ROOT${TEST_DIR}/lib/svc/method/site/${SYSVINIT_NAME} | ||
195 | chmod 744 $FAKE_ROOT${TEST_DIR}/lib/svc/method/site/${SYSVINIT_NAME} | ||
196 | |||
197 | cp ${OPENSSH_MANIFEST} $FAKE_ROOT${TEST_DIR}/var/svc/manifest/site | ||
198 | chmod 644 $FAKE_ROOT${TEST_DIR}/var/svc/manifest/site/${OPENSSH_MANIFEST} | ||
199 | else | ||
200 | mkdir -p $FAKE_ROOT${TEST_DIR}/etc/init.d | ||
172 | 201 | ||
173 | cp ${OPENSSHD} $FAKE_ROOT${TEST_DIR}/etc/init.d/${SYSVINIT_NAME} | 202 | cp ${OPENSSHD} $FAKE_ROOT${TEST_DIR}/etc/init.d/${SYSVINIT_NAME} |
174 | chmod 744 $FAKE_ROOT${TEST_DIR}/etc/init.d/${SYSVINIT_NAME} | 203 | chmod 744 $FAKE_ROOT${TEST_DIR}/etc/init.d/${SYSVINIT_NAME} |
204 | fi | ||
175 | 205 | ||
176 | [ "${PERMIT_ROOT_LOGIN}" = no ] && \ | 206 | [ "${PERMIT_ROOT_LOGIN}" = no ] && \ |
177 | perl -p -i -e "s/#PermitRootLogin yes/PermitRootLogin no/" \ | 207 | perl -p -i -e "s/#PermitRootLogin yes/PermitRootLogin no/" \ |
@@ -221,15 +251,22 @@ touch depend | |||
221 | 251 | ||
222 | ## Build space file | 252 | ## Build space file |
223 | echo "Building space file..." | 253 | echo "Building space file..." |
224 | cat > space << _EOF | 254 | if [ $DO_SMF -eq 1 ] |
225 | # extra space required by start/stop links added by installf in postinstall | 255 | then |
256 | # XXX Is this necessary? If not, remove space line from mk-proto.awk. | ||
257 | touch space | ||
258 | else | ||
259 | cat > space << _EOF | ||
260 | # extra space required by start/stop links added by installf | ||
261 | # in postinstall | ||
226 | $TEST_DIR/etc/rc0.d/${SYSVINITSTOPT}${SYSVINIT_NAME} 0 1 | 262 | $TEST_DIR/etc/rc0.d/${SYSVINITSTOPT}${SYSVINIT_NAME} 0 1 |
227 | $TEST_DIR/etc/rc2.d/${SYSVINITSTART}${SYSVINIT_NAME} 0 1 | 263 | $TEST_DIR/etc/rc2.d/${SYSVINITSTART}${SYSVINIT_NAME} 0 1 |
228 | _EOF | 264 | _EOF |
229 | [ "$RC1_D" = no ] || \ | 265 | [ "$RC1_D" = no ] || \ |
230 | echo "$TEST_DIR/etc/rc1.d/${SYSVINITSTOPT}${SYSVINIT_NAME} 0 1" >> space | 266 | echo "$TEST_DIR/etc/rc1.d/${SYSVINITSTOPT}${SYSVINIT_NAME} 0 1" >> space |
231 | [ "$RCS_D" = yes ] && \ | 267 | [ "$RCS_D" = yes ] && \ |
232 | echo "$TEST_DIR/etc/rcS.d/${SYSVINITSTOPT}${SYSVINIT_NAME} 0 1" >> space | 268 | echo "$TEST_DIR/etc/rcS.d/${SYSVINITSTOPT}${SYSVINIT_NAME} 0 1" >> space |
269 | fi | ||
233 | 270 | ||
234 | ## Build preinstall file | 271 | ## Build preinstall file |
235 | echo "Building preinstall file..." | 272 | echo "Building preinstall file..." |
@@ -243,7 +280,16 @@ _EOF | |||
243 | 280 | ||
244 | cat >> preinstall << _EOF | 281 | cat >> preinstall << _EOF |
245 | # | 282 | # |
246 | [ "\${PRE_INS_STOP}" = "yes" ] && ${TEST_DIR}/etc/init.d/${SYSVINIT_NAME} stop | 283 | if [ "\${PRE_INS_STOP}" = "yes" ] |
284 | then | ||
285 | if [ $DO_SMF -eq 1 ] | ||
286 | then | ||
287 | svcadm disable $OPENSSH_FMRI | ||
288 | else | ||
289 | ${TEST_DIR}/etc/init.d/${SYSVINIT_NAME} stop | ||
290 | fi | ||
291 | fi | ||
292 | |||
247 | exit 0 | 293 | exit 0 |
248 | _EOF | 294 | _EOF |
249 | 295 | ||
@@ -265,28 +311,41 @@ cat > postinstall << _EOF | |||
265 | } | 311 | } |
266 | 312 | ||
267 | # make rc?.d dirs only if we are doing a test install | 313 | # make rc?.d dirs only if we are doing a test install |
268 | [ -n "${TEST_DIR}" ] && { | 314 | [ -n "${TEST_DIR}" ] && [ $DO_SMF -ne 1 ] && { |
269 | [ "$RCS_D" = yes ] && mkdir -p ${TEST_DIR}/etc/rcS.d | 315 | [ "$RCS_D" = yes ] && mkdir -p ${TEST_DIR}/etc/rcS.d |
270 | mkdir -p ${TEST_DIR}/etc/rc0.d | 316 | mkdir -p ${TEST_DIR}/etc/rc0.d |
271 | [ "$RC1_D" = no ] || mkdir -p ${TEST_DIR}/etc/rc1.d | 317 | [ "$RC1_D" = no ] || mkdir -p ${TEST_DIR}/etc/rc1.d |
272 | mkdir -p ${TEST_DIR}/etc/rc2.d | 318 | mkdir -p ${TEST_DIR}/etc/rc2.d |
273 | } | 319 | } |
274 | 320 | ||
275 | if [ "\${USE_SYM_LINKS}" = yes ] | 321 | if [ $DO_SMF -eq 1 ] |
276 | then | 322 | then |
277 | [ "$RCS_D" = yes ] && \ | 323 | # Delete the existing service, if it exists, then import the |
278 | installf ${PKGNAME} \${PKG_INSTALL_ROOT}$TEST_DIR/etc/rcS.d/${SYSVINITSTOPT}${SYSVINIT_NAME}=../init.d/${SYSVINIT_NAME} s | 324 | # new one. |
279 | installf ${PKGNAME} \${PKG_INSTALL_ROOT}$TEST_DIR/etc/rc0.d/${SYSVINITSTOPT}${SYSVINIT_NAME}=../init.d/${SYSVINIT_NAME} s | 325 | if svcs $OPENSSH_FMRI > /dev/null 2>&1 |
280 | [ "$RC1_D" = no ] || \ | 326 | then |
281 | installf ${PKGNAME} \${PKG_INSTALL_ROOT}$TEST_DIR/etc/rc1.d/${SYSVINITSTOPT}${SYSVINIT_NAME}=../init.d/${SYSVINIT_NAME} s | 327 | svccfg delete -f $OPENSSH_FMRI |
282 | installf ${PKGNAME} \${PKG_INSTALL_ROOT}$TEST_DIR/etc/rc2.d/${SYSVINITSTART}${SYSVINIT_NAME}=../init.d/${SYSVINIT_NAME} s | 328 | fi |
329 | # NOTE, if manifest enables sshd by default, this will actually | ||
330 | # start the daemon, which may not be what the user wants. | ||
331 | svccfg import ${TEST_DIR}/var/svc/manifest/site/$OPENSSH_MANIFEST | ||
283 | else | 332 | else |
284 | [ "$RCS_D" = yes ] && \ | 333 | if [ "\${USE_SYM_LINKS}" = yes ] |
285 | installf ${PKGNAME} \${PKG_INSTALL_ROOT}$TEST_DIR/etc/rcS.d/${SYSVINITSTOPT}${SYSVINIT_NAME}=\${PKG_INSTALL_ROOT}$TEST_DIR/etc/init.d/${SYSVINIT_NAME} l | 334 | then |
286 | installf ${PKGNAME} \${PKG_INSTALL_ROOT}$TEST_DIR/etc/rc0.d/${SYSVINITSTOPT}${SYSVINIT_NAME}=\${PKG_INSTALL_ROOT}$TEST_DIR/etc/init.d/${SYSVINIT_NAME} l | 335 | [ "$RCS_D" = yes ] && \ |
287 | [ "$RC1_D" = no ] || \ | 336 | installf ${PKGNAME} \${PKG_INSTALL_ROOT}$TEST_DIR/etc/rcS.d/${SYSVINITSTOPT}${SYSVINIT_NAME}=../init.d/${SYSVINIT_NAME} s |
288 | installf ${PKGNAME} \${PKG_INSTALL_ROOT}$TEST_DIR/etc/rc1.d/${SYSVINITSTOPT}${SYSVINIT_NAME}=\${PKG_INSTALL_ROOT}$TEST_DIR/etc/init.d/${SYSVINIT_NAME} l | 337 | installf ${PKGNAME} \${PKG_INSTALL_ROOT}$TEST_DIR/etc/rc0.d/${SYSVINITSTOPT}${SYSVINIT_NAME}=../init.d/${SYSVINIT_NAME} s |
289 | installf ${PKGNAME} \${PKG_INSTALL_ROOT}$TEST_DIR/etc/rc2.d/${SYSVINITSTART}${SYSVINIT_NAME}=\${PKG_INSTALL_ROOT}$TEST_DIR/etc/init.d/${SYSVINIT_NAME} l | 338 | [ "$RC1_D" = no ] || \ |
339 | installf ${PKGNAME} \${PKG_INSTALL_ROOT}$TEST_DIR/etc/rc1.d/${SYSVINITSTOPT}${SYSVINIT_NAME}=../init.d/${SYSVINIT_NAME} s | ||
340 | installf ${PKGNAME} \${PKG_INSTALL_ROOT}$TEST_DIR/etc/rc2.d/${SYSVINITSTART}${SYSVINIT_NAME}=../init.d/${SYSVINIT_NAME} s | ||
341 | else | ||
342 | [ "$RCS_D" = yes ] && \ | ||
343 | installf ${PKGNAME} \${PKG_INSTALL_ROOT}$TEST_DIR/etc/rcS.d/${SYSVINITSTOPT}${SYSVINIT_NAME}=\${PKG_INSTALL_ROOT}$TEST_DIR/etc/init.d/${SYSVINIT_NAME} l | ||
344 | installf ${PKGNAME} \${PKG_INSTALL_ROOT}$TEST_DIR/etc/rc0.d/${SYSVINITSTOPT}${SYSVINIT_NAME}=\${PKG_INSTALL_ROOT}$TEST_DIR/etc/init.d/${SYSVINIT_NAME} l | ||
345 | [ "$RC1_D" = no ] || \ | ||
346 | installf ${PKGNAME} \${PKG_INSTALL_ROOT}$TEST_DIR/etc/rc1.d/${SYSVINITSTOPT}${SYSVINIT_NAME}=\${PKG_INSTALL_ROOT}$TEST_DIR/etc/init.d/${SYSVINIT_NAME} l | ||
347 | installf ${PKGNAME} \${PKG_INSTALL_ROOT}$TEST_DIR/etc/rc2.d/${SYSVINITSTART}${SYSVINIT_NAME}=\${PKG_INSTALL_ROOT}$TEST_DIR/etc/init.d/${SYSVINIT_NAME} l | ||
348 | fi | ||
290 | fi | 349 | fi |
291 | 350 | ||
292 | # If piddir doesn't exist we add it. (Ie. --with-pid-dir=/var/opt/ssh) | 351 | # If piddir doesn't exist we add it. (Ie. --with-pid-dir=/var/opt/ssh) |
@@ -357,7 +416,17 @@ fi | |||
357 | \$chroot ${PATH_PASSWD_PROG} -l $SSH_PRIVSEP_USER | 416 | \$chroot ${PATH_PASSWD_PROG} -l $SSH_PRIVSEP_USER |
358 | } | 417 | } |
359 | 418 | ||
360 | [ "\${POST_INS_START}" = "yes" ] && ${TEST_DIR}/etc/init.d/${SYSVINIT_NAME} start | 419 | if [ "\${POST_INS_START}" = "yes" ] |
420 | then | ||
421 | if [ $DO_SMF -eq 1 ] | ||
422 | then | ||
423 | # See svccfg import note above. The service may already | ||
424 | # be started. | ||
425 | svcadm enable $OPENSSH_FMRI | ||
426 | else | ||
427 | ${TEST_DIR}/etc/init.d/${SYSVINIT_NAME} start | ||
428 | fi | ||
429 | fi | ||
361 | exit 0 | 430 | exit 0 |
362 | _EOF | 431 | _EOF |
363 | 432 | ||
@@ -366,7 +435,12 @@ echo "Building preremove file..." | |||
366 | cat > preremove << _EOF | 435 | cat > preremove << _EOF |
367 | #! ${SCRIPT_SHELL} | 436 | #! ${SCRIPT_SHELL} |
368 | # | 437 | # |
369 | ${TEST_DIR}/etc/init.d/${SYSVINIT_NAME} stop | 438 | if [ $DO_SMF -eq 1 ] |
439 | then | ||
440 | svcadm disable $OPENSSH_FMRI | ||
441 | else | ||
442 | ${TEST_DIR}/etc/init.d/${SYSVINIT_NAME} stop | ||
443 | fi | ||
370 | _EOF | 444 | _EOF |
371 | 445 | ||
372 | # local preremove changes here | 446 | # local preremove changes here |
@@ -381,6 +455,13 @@ echo "Building postremove file..." | |||
381 | cat > postremove << _EOF | 455 | cat > postremove << _EOF |
382 | #! ${SCRIPT_SHELL} | 456 | #! ${SCRIPT_SHELL} |
383 | # | 457 | # |
458 | if [ $DO_SMF -eq 1 ] | ||
459 | then | ||
460 | if svcs $OPENSSH_FMRI > /dev/null 2>&1 | ||
461 | then | ||
462 | svccfg delete -f $OPENSSH_FMRI | ||
463 | fi | ||
464 | fi | ||
384 | _EOF | 465 | _EOF |
385 | 466 | ||
386 | # local postremove changes here | 467 | # local postremove changes here |
@@ -446,7 +527,45 @@ done | |||
446 | 527 | ||
447 | _EOF | 528 | _EOF |
448 | 529 | ||
449 | cat >> request << _EOF | 530 | if [ $DO_SMF -eq 1 ] |
531 | then | ||
532 | # This could get hairy, as the running sshd may not be under SMF. | ||
533 | # We'll assume an earlier version of OpenSSH started via SMF. | ||
534 | cat >> request << _EOF | ||
535 | PRE_INS_STOP=no | ||
536 | POST_INS_START=no | ||
537 | # determine if should restart the daemon | ||
538 | if [ -s ${piddir}/sshd.pid ] && \ | ||
539 | /usr/bin/svcs $OPENSSH_FMRI 2>&1 | egrep "^online" > /dev/null 2>&1 | ||
540 | then | ||
541 | ans=\`ckyorn -d n \ | ||
542 | -p "Should the running sshd daemon be restarted? ${DEF_MSG}"\` || exit \$? | ||
543 | case \$ans in | ||
544 | [y,Y]*) PRE_INS_STOP=yes | ||
545 | POST_INS_START=yes | ||
546 | ;; | ||
547 | esac | ||
548 | |||
549 | else | ||
550 | |||
551 | # determine if we should start sshd | ||
552 | ans=\`ckyorn -d n \ | ||
553 | -p "Start the sshd daemon after installing this package? ${DEF_MSG}"\` || exit \$? | ||
554 | case \$ans in | ||
555 | [y,Y]*) POST_INS_START=yes ;; | ||
556 | esac | ||
557 | fi | ||
558 | |||
559 | # make parameters available to installation service, | ||
560 | # and so to any other packaging scripts | ||
561 | cat >\$1 <<! | ||
562 | PRE_INS_STOP='\$PRE_INS_STOP' | ||
563 | POST_INS_START='\$POST_INS_START' | ||
564 | ! | ||
565 | |||
566 | _EOF | ||
567 | else | ||
568 | cat >> request << _EOF | ||
450 | USE_SYM_LINKS=no | 569 | USE_SYM_LINKS=no |
451 | PRE_INS_STOP=no | 570 | PRE_INS_STOP=no |
452 | POST_INS_START=no | 571 | POST_INS_START=no |
@@ -487,6 +606,7 @@ POST_INS_START='\$POST_INS_START' | |||
487 | ! | 606 | ! |
488 | 607 | ||
489 | _EOF | 608 | _EOF |
609 | fi | ||
490 | 610 | ||
491 | # local request changes here | 611 | # local request changes here |
492 | [ -s "${PKG_REQUEST_LOCAL}" ] && . ${PKG_REQUEST_LOCAL} | 612 | [ -s "${PKG_REQUEST_LOCAL}" ] && . ${PKG_REQUEST_LOCAL} |