⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 buildpkg.sh

📁 OpenSSL Source code for SFTP, SSH, and many others
💻 SH
字号:
#!/bin/sh## Fake Root Solaris/SVR4/SVR5 Build System - Prototype## The following code has been provide under Public Domain License.  I really# don't care what you use it for.  Just as long as you don't complain to me# nor my employer if you break it. - Ben Lindstrom (mouring@eviladmin.org)# umask 022## Options for building the package# You can create a config.local with your customized options## uncommenting TEST_DIR and using configure--prefix=/var/tmp and # PKGNAME=tOpenSSH should allow testing a package without interfering# with a real OpenSSH package on a system.#TEST_DIR=/var/tmp	# leave commented out for production buildPKGNAME=OpenSSHSYSVINIT_NAME=opensshdMAKE=${MAKE:="make"}# uncomment these next two as needed#PERMIT_ROOT_LOGIN=no#X11_FORWARDING=yes# list of system directories we do NOT want to change owner/group/perms# when installing our packageSYSTEM_DIR="/etc	\/etc/init.d		\/etc/rcS.d		\/etc/rc0.d		\/etc/rc1.d		\/etc/rc2.d		\/etc/opt		\/opt			\/opt/bin		\/usr			\/usr/bin		\/usr/lib		\/usr/sbin		\/usr/share		\/usr/share/man		\/usr/share/man/man1	\/usr/share/man/man8	\/usr/local		\/usr/local/bin		\/usr/local/etc		\/usr/local/libexec	\/usr/local/man		\/usr/local/man/man1	\/usr/local/man/man8	\/usr/local/sbin		\/usr/local/share	\/var			\/var/opt		\/var/run		\/var/tmp		\/tmp"# We may need to buiild as root so we make sure PATH is set up# only set the path if it's not set already[ -d /usr/local/bin ]  &&  {	echo $PATH | grep ":/usr/local/bin"  > /dev/null 2>&1	[ $? -ne 0 ] && PATH=$PATH:/usr/local/bin}[ -d /usr/ccs/bin ]  &&  {	echo $PATH | grep ":/usr/ccs/bin"  > /dev/null 2>&1	[ $? -ne 0 ] && PATH=$PATH:/usr/ccs/bin}export PATH#[ -f Makefile ]  ||  {	echo "Please run this script from your build directory"	exit 1}# we will look for config.local to override the above options[ -s ./config.local ]  &&  . ./config.local## Start by faking root install echo "Faking root install..."START=`pwd`OPENSSHD_IN=`dirname $0`/opensshd.inFAKE_ROOT=$START/package[ -d $FAKE_ROOT ]  &&  rm -fr $FAKE_ROOTmkdir $FAKE_ROOT${MAKE} install-nokeys DESTDIR=$FAKE_ROOTif [ $? -gt 0 ]then	echo "Fake root install failed, stopping."	exit 1fi## Fill in some details, like prefix and sysconfdirfor confvar in prefix exec_prefix bindir sbindir libexecdir datadir mandir sysconfdir piddirdo        eval $confvar=`grep "^$confvar=" Makefile | cut -d = -f 2`done## Extract common info requires for the 'info' part of the package.VERSION=`./ssh -V 2>&1 | sed -e 's/,.*//'`UNAME_S=`uname -s`case ${UNAME_S} in	SunOS)	UNAME_S=Solaris		ARCH=`uname -p`		RCS_D=yes		DEF_MSG="(default: n)"		;;	*)	ARCH=`uname -m` ;;esac## Setup our run level stuff while we are at it.mkdir -p $FAKE_ROOT${TEST_DIR}/etc/init.d## setup our initscript correctlysed -e "s#%%configDir%%#${sysconfdir}#g" 	\    -e "s#%%openSSHDir%%#$prefix#g"		\    -e "s#%%pidDir%%#${piddir}#g"		\	${OPENSSHD_IN}	> $FAKE_ROOT${TEST_DIR}/etc/init.d/${SYSVINIT_NAME}chmod 744 $FAKE_ROOT${TEST_DIR}/etc/init.d/${SYSVINIT_NAME}[ "${PERMIT_ROOT_LOGIN}" = no ]  &&  \	perl -p -i -e "s/#PermitRootLogin yes/PermitRootLogin no/" \		$FAKE_ROOT/${sysconfdir}/sshd_config[ "${X11_FORWARDING}" = yes ]  &&  \	perl -p -i -e "s/#X11Forwarding no/X11Forwarding yes/" \		$FAKE_ROOT/${sysconfdir}/sshd_config# fix PrintMotdperl -p -i -e "s/#PrintMotd yes/PrintMotd no/" \	$FAKE_ROOT/${sysconfdir}/sshd_config# We don't want to overwrite config files on multiple installsmv $FAKE_ROOT/${sysconfdir}/ssh_config $FAKE_ROOT/${sysconfdir}/ssh_config.defaultmv $FAKE_ROOT/${sysconfdir}/sshd_config $FAKE_ROOT/${sysconfdir}/sshd_config.default[ -f $FAKE_ROOT/${sysconfdir}/ssh_prng_cmds ]  &&  \mv $FAKE_ROOT/${sysconfdir}/ssh_prng_cmds $FAKE_ROOT/${sysconfdir}/ssh_prng_cmds.defaultcd $FAKE_ROOT## Ok, this is outright wrong, but it will work.  I'm tired of pkgmk## whining.for i in *; do  PROTO_ARGS="$PROTO_ARGS $i=/$i";done## Build info fileecho "Building pkginfo file..."cat > pkginfo << _EOFPKG=$PKGNAMENAME="OpenSSH Portable for ${UNAME_S}"DESC="Secure Shell remote access utility; replaces telnet and rlogin/rsh."VENDOR="OpenSSH Portable Team - http://www.openssh.com/portable.html"ARCH=$ARCHVERSION=$VERSIONCATEGORY="Security,application"BASEDIR=/CLASSES="none"_EOF## Build preinstall fileecho "Building preinstall file..."cat > preinstall << _EOF#! /sbin/sh#[ "\${PRE_INS_STOP}" = "yes" ]  &&  ${TEST_DIR}/etc/init.d/${SYSVINIT_NAME} stopexit 0_EOF## Build postinstall fileecho "Building postinstall file..."cat > postinstall << _EOF#! /sbin/sh#[ -f ${sysconfdir}/ssh_config ]  ||  \\	cp -p ${sysconfdir}/ssh_config.default ${sysconfdir}/ssh_config[ -f ${sysconfdir}/sshd_config ]  ||  \\	cp -p ${sysconfdir}/sshd_config.default ${sysconfdir}/sshd_config[ -f ${sysconfdir}/ssh_prng_cmds.default ]  &&  {	[ -f ${sysconfdir}/ssh_prng_cmds ]  ||  \\	cp -p ${sysconfdir}/ssh_prng_cmds.default ${sysconfdir}/ssh_prng_cmds}# make rc?.d dirs only if we are doing a test install[ -n "${TEST_DIR}" ]  &&  {	[ "$RCS_D" = yes ]  &&  mkdir -p ${TEST_DIR}/etc/rcS.d	mkdir -p ${TEST_DIR}/etc/rc0.d	mkdir -p ${TEST_DIR}/etc/rc1.d	mkdir -p ${TEST_DIR}/etc/rc2.d}if [ "\${USE_SYM_LINKS}" = yes ]then	[ "$RCS_D" = yes ]  &&  \installf ${PKGNAME} $TEST_DIR/etc/rcS.d/K30${SYSVINIT_NAME}=../init.d/${SYSVINIT_NAME} s	installf ${PKGNAME} $TEST_DIR/etc/rc0.d/K30${SYSVINIT_NAME}=../init.d/${SYSVINIT_NAME} s	installf ${PKGNAME} $TEST_DIR/etc/rc1.d/K30${SYSVINIT_NAME}=../init.d/${SYSVINIT_NAME} s	installf ${PKGNAME} $TEST_DIR/etc/rc2.d/S98${SYSVINIT_NAME}=../init.d/${SYSVINIT_NAME} selse	[ "$RCS_D" = yes ]  &&  \installf ${PKGNAME} $TEST_DIR/etc/rcS.d/K30${SYSVINIT_NAME}=$TEST_DIR/etc/init.d/${SYSVINIT_NAME} l	installf ${PKGNAME} $TEST_DIR/etc/rc0.d/K30${SYSVINIT_NAME}=$TEST_DIR/etc/init.d/${SYSVINIT_NAME} l	installf ${PKGNAME} $TEST_DIR/etc/rc1.d/K30${SYSVINIT_NAME}=$TEST_DIR/etc/init.d/${SYSVINIT_NAME} l	installf ${PKGNAME} $TEST_DIR/etc/rc2.d/S98${SYSVINIT_NAME}=$TEST_DIR/etc/init.d/${SYSVINIT_NAME} lfi# If piddir doesn't exist we add it. (Ie. --with-pid-dir=/var/opt/ssh)[ -d $piddir ]  ||  installf ${PKGNAME} $TEST_DIR$piddir d 755 root sysinstallf -f ${PKGNAME}[ "\${POST_INS_START}" = "yes" ]  &&  ${TEST_DIR}/etc/init.d/${SYSVINIT_NAME} startexit 0_EOF## Build preremove fileecho "Building preremove file..."cat > preremove << _EOF#! /sbin/sh#${TEST_DIR}/etc/init.d/${SYSVINIT_NAME} stopexit 0_EOF## Build request fileecho "Building request file..."cat > request << _EOFtrap 'exit 3' 15USE_SYM_LINKS=noPRE_INS_STOP=noPOST_INS_START=no# Use symbolic links?ans=\`ckyorn -d n \-p "Do you want symbolic links for the start/stop scripts? ${DEF_MSG}"\` || exit \$?case \$ans in	[y,Y]*)	USE_SYM_LINKS=yes ;;esac# determine if should restart the daemonif [ -s ${piddir}/sshd.pid  -a  -f ${TEST_DIR}/etc/init.d/${SYSVINIT_NAME} ]then	ans=\`ckyorn -d n \-p "Should the running sshd daemon be restarted? ${DEF_MSG}"\` || exit \$?	case \$ans in		[y,Y]*)	PRE_INS_STOP=yes			POST_INS_START=yes			;;	esacelse# determine if we should start sshd	ans=\`ckyorn -d n \-p "Start the sshd daemon after installing this package? ${DEF_MSG}"\` || exit \$?	case \$ans in		[y,Y]*)	POST_INS_START=yes ;;	esacfi# make parameters available to installation service,# and so to any other packaging scriptscat >\$1 <<!USE_SYM_LINKS='\$USE_SYM_LINKS'PRE_INS_STOP='\$PRE_INS_STOP'POST_INS_START='\$POST_INS_START'!exit 0_EOF## Build space fileecho "Building space file..."cat > space << _EOF# extra space required by start/stop links added by installf in postinstall$TEST_DIR/etc/rc0.d/K30${SYSVINIT_NAME} 0 1$TEST_DIR/etc/rc1.d/K30${SYSVINIT_NAME} 0 1$TEST_DIR/etc/rc2.d/S98${SYSVINIT_NAME} 0 1_EOF[ "$RCS_D" = yes ]  &&  \echo "$TEST_DIR/etc/rcS.d/K30${SYSVINIT_NAME} 0 1" >> space## Next Build our prototypeecho "Building prototype file..."cat >mk-proto.awk << _EOF	    BEGIN { print "i pkginfo"; print "i preinstall"; \\		    print "i postinstall"; print "i preremove"; \\		    print "i request"; print "i space"; \\	            split("$SYSTEM_DIR",sys_files); }	    {	     for (dir in sys_files) { if ( \$3 != sys_files[dir] )	             { \$5="root"; \$6="sys"; }	        else	             { \$4="?"; \$5="?"; \$6="?"; break;}	    } }	    { print; }_EOFfind . | egrep -v "prototype|pkginfo|mk-proto.awk" | sort | \	pkgproto $PROTO_ARGS | nawk -f mk-proto.awk > prototype## Step back a directory and now build the package.echo "Building package.."cd ..pkgmk -d ${FAKE_ROOT} -f $FAKE_ROOT/prototype -oecho | pkgtrans -os ${FAKE_ROOT} ${START}/$PKGNAME-$UNAME_S-$ARCH-$VERSION.pkgrm -rf $FAKE_ROOT

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -