你输入了什么命令来编译代码?这些是您在第一个版本的 shell 脚本中需要的命令。
后续版本将允许您更改包含源的存档名称(软件的新版本)、源提取到的目录(同上)、安装目录等。但第一步是获取您在 shell 脚本中输入的内容。
我没有查看 ProFTP 配置文件的语法,因此您需要正确地重写该位。使用“此处文档”来创建配置和控制文件(请记住在之后正确设置文件的权限)。
tar -xzf proftpd-1.3.3e.tar.gz || exit
cd proftpd-1.3.3e || exit
./configure –sysconfdir=/etc || exit
make || exit
make install || exit
rm -f /usr/sbin/proftpd
ln -s /usr/local/sbin/proftpd /usr/sbin/proftpd
# Check whether these exist before adding them?
groupadd ftpgroup
useradd -G ftpgroup onedomain -s /sbin/nologin -d /home/onedomain/public_html/
# Maybe save old version before overwriting with new?
cat >/etc/proftpd.conf <<'EOF'
username=onedomain
groupname=ftpgroup
servername=localserver
EOF
chmod 644 /etc/proftpd.conf
# Maybe save old version before overwriting with new?
# Maybe add 'restart' option to stop and start?
cat >/etc/init.d/proftpd <<'EOF'
#!/bin/sh
case $1 in
'start')
/usr/local/sbin/proftpd
;;
'stop')
kill $(ps -ef | grep proftpd | grep -v grep | awk '{print $2}') > /dev/null 2>&1
;;
*)
echo "usage: $0 {start|stop}" >&2
;;
esac
EOF
chmod 755 /etc/init.d/proftpd
/etc/init.d/proftpd start # restart
从这里开始,每次重复一个名称时,都应将其制成一个变量,然后将其制成脚本其余部分中使用的变量。
INIT_SCRIPT=/etc/init.d/proftpd
CONF_FILE=/etc/proftpd.conf
BASE_VERSION=proftpd-1.3.3e
tar -xf "${BASE_VERSION}.tar.gz" || exit
在变量名周围使用双引号,这样即使文件路径名中有空格也能正常工作。
请注意,最有可能失败的位 - 提取代码和构建软件的位 - 受到保护,|| exit
因此如果出现问题,脚本会退出而不会损坏设置。
我倾向于将提取和构建阶段与安装和配置阶段分开,因此我可以像我一样运行第一部分,并且只以root
. 在我的书中,做开发root
是危险的(或者,如果你愿意,我认为root
不应该运行编译器)。这是一个过度简化,但适度明智。你可以造成巨大的伤害root
;尽量减少这样做的机会。构建可靠的第三方软件与root
进行开发不同——而且更情有可原。但是您应该尽可能少地使用root
(超级用户)权限。