summaryrefslogtreecommitdiff
path: root/buildpkg.sh.in
diff options
context:
space:
mode:
authorDamien Miller <djm@mindrot.org>2006-09-12 21:54:10 +1000
committerDamien Miller <djm@mindrot.org>2006-09-12 21:54:10 +1000
commit223897a01af2f496577cbf8f7fa5c5209109ef8e (patch)
tree2849fdc9a56af05b25ebbff2e1b66db362a207e2 /buildpkg.sh.in
parent5d8a9acef0228e53e2069c6218beb8716b89aacd (diff)
- (djm) [Makefile.in buildpkg.sh.in configure.ac openssh.xml.in]
Support SMF in Solaris Packages if enabled by configure. Patch from Chad Mynhier, tested by dtucker@
Diffstat (limited to 'buildpkg.sh.in')
-rw-r--r--buildpkg.sh.in174
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#
48OPENSSHD=opensshd.init 48OPENSSHD=opensshd.init
49OPENSSH_MANIFEST=openssh.xml
50OPENSSH_FMRI=svc:/site/openssh:default
49 51
50PATH_GROUPADD_PROG=@PATH_GROUPADD_PROG@ 52PATH_GROUPADD_PROG=@PATH_GROUPADD_PROG@
51PATH_USERADD_PROG=@PATH_USERADD_PROG@ 53PATH_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`
120done 129done
121 130
131## Are we using Solaris' SMF?
132DO_SMF=0
133if egrep "^#define USE_SOLARIS_PROCESS_CONTRACTS" config.h > /dev/null 2>&1
134then
135 DO_SMF=1
136fi
122 137
123## Collect value of privsep user 138## Collect value of privsep user
124for confvar in SSH_PRIVSEP_USER 139for confvar in SSH_PRIVSEP_USER
@@ -168,10 +183,25 @@ then
168fi 183fi
169 184
170## Setup our run level stuff while we are at it. 185## Setup our run level stuff while we are at it.
171mkdir -p $FAKE_ROOT${TEST_DIR}/etc/init.d 186if [ $DO_SMF -eq 1 ]
187then
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}
199else
200 mkdir -p $FAKE_ROOT${TEST_DIR}/etc/init.d
172 201
173cp ${OPENSSHD} $FAKE_ROOT${TEST_DIR}/etc/init.d/${SYSVINIT_NAME} 202 cp ${OPENSSHD} $FAKE_ROOT${TEST_DIR}/etc/init.d/${SYSVINIT_NAME}
174chmod 744 $FAKE_ROOT${TEST_DIR}/etc/init.d/${SYSVINIT_NAME} 203 chmod 744 $FAKE_ROOT${TEST_DIR}/etc/init.d/${SYSVINIT_NAME}
204fi
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
223echo "Building space file..." 253echo "Building space file..."
224cat > space << _EOF 254if [ $DO_SMF -eq 1 ]
225# extra space required by start/stop links added by installf in postinstall 255then
256 # XXX Is this necessary? If not, remove space line from mk-proto.awk.
257 touch space
258else
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 ] || \
230echo "$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 ] && \
232echo "$TEST_DIR/etc/rcS.d/${SYSVINITSTOPT}${SYSVINIT_NAME} 0 1" >> space 268 echo "$TEST_DIR/etc/rcS.d/${SYSVINITSTOPT}${SYSVINIT_NAME} 0 1" >> space
269fi
233 270
234## Build preinstall file 271## Build preinstall file
235echo "Building preinstall file..." 272echo "Building preinstall file..."
@@ -243,7 +280,16 @@ _EOF
243 280
244cat >> preinstall << _EOF 281cat >> preinstall << _EOF
245# 282#
246[ "\${PRE_INS_STOP}" = "yes" ] && ${TEST_DIR}/etc/init.d/${SYSVINIT_NAME} stop 283if [ "\${PRE_INS_STOP}" = "yes" ]
284then
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
291fi
292
247exit 0 293exit 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
275if [ "\${USE_SYM_LINKS}" = yes ] 321if [ $DO_SMF -eq 1 ]
276then 322then
277 [ "$RCS_D" = yes ] && \ 323 # Delete the existing service, if it exists, then import the
278installf ${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
283else 332else
284 [ "$RCS_D" = yes ] && \ 333 if [ "\${USE_SYM_LINKS}" = yes ]
285installf ${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
290fi 349fi
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 419if [ "\${POST_INS_START}" = "yes" ]
420then
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
429fi
361exit 0 430exit 0
362_EOF 431_EOF
363 432
@@ -366,7 +435,12 @@ echo "Building preremove file..."
366cat > preremove << _EOF 435cat > preremove << _EOF
367#! ${SCRIPT_SHELL} 436#! ${SCRIPT_SHELL}
368# 437#
369${TEST_DIR}/etc/init.d/${SYSVINIT_NAME} stop 438if [ $DO_SMF -eq 1 ]
439then
440 svcadm disable $OPENSSH_FMRI
441else
442 ${TEST_DIR}/etc/init.d/${SYSVINIT_NAME} stop
443fi
370_EOF 444_EOF
371 445
372# local preremove changes here 446# local preremove changes here
@@ -381,6 +455,13 @@ echo "Building postremove file..."
381cat > postremove << _EOF 455cat > postremove << _EOF
382#! ${SCRIPT_SHELL} 456#! ${SCRIPT_SHELL}
383# 457#
458if [ $DO_SMF -eq 1 ]
459then
460 if svcs $OPENSSH_FMRI > /dev/null 2>&1
461 then
462 svccfg delete -f $OPENSSH_FMRI
463 fi
464fi
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
449cat >> request << _EOF 530if [ $DO_SMF -eq 1 ]
531then
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
535PRE_INS_STOP=no
536POST_INS_START=no
537# determine if should restart the daemon
538if [ -s ${piddir}/sshd.pid ] && \
539 /usr/bin/svcs $OPENSSH_FMRI 2>&1 | egrep "^online" > /dev/null 2>&1
540then
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
549else
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
557fi
558
559# make parameters available to installation service,
560# and so to any other packaging scripts
561cat >\$1 <<!
562PRE_INS_STOP='\$PRE_INS_STOP'
563POST_INS_START='\$POST_INS_START'
564!
565
566_EOF
567else
568 cat >> request << _EOF
450USE_SYM_LINKS=no 569USE_SYM_LINKS=no
451PRE_INS_STOP=no 570PRE_INS_STOP=no
452POST_INS_START=no 571POST_INS_START=no
@@ -487,6 +606,7 @@ POST_INS_START='\$POST_INS_START'
487! 606!
488 607
489_EOF 608_EOF
609fi
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}