📄 installer.sh
字号:
echo "Starting installation/update"echo ""case "${RKHINST_LAYOUT}" in RPM) ;; *) # Check PREFIXecho $N "Checking PREFIX $PREFIX: "if [ -e "${PREFIX}" ]; then echo $N "exists, and is " if [ ! -w "${PREFIX}" ]; then echo "NOT writable: exiting." exit 1 else echo "writable. OK" # That's enough for a "." install. case "${PREFIX}" in .) chown -R ${RKHINST_OWNER} ./files find ./files -type d -name CVS | while read DIR; do rm -rf "${DIR}" done find ./files -type f -name Entries -o -name Repository -o -name Root | while read FILE; do rm -rf "${FILE}" done find ./files -type f | while read ITEM; do case "${ITEM}" in *.sh|*.pl|rkhunter) chmod "${RKHINST_MODE_EX}" "${ITEM}" ;; rkhunter.conf|*) chmod "${RKHINST_MODE_RW}" "${ITEM}" ;; esac done cd ./files PREFIX="${PWD}" echo "LOGFILE=${PREFIX}/rkhunter.log" >> rkhunter.conf echo "TMPDIR=$PREFIX" >> rkhunter.conf echo "DBDIR=$PREFIX" >> rkhunter.conf echo "SCRIPTDIR=$PREFIX" >> rkhunter.conf echo "INSTALLDIR=$PREFIX" >> rkhunter.conf sed -e "s|-f /etc/rkhunter.conf|-f $PREFIX/rkhunter.conf|g" -e "s|CONFIGFILE=\"/etc|CONFIGFILE=\"$PREFIX|g" rkhunter > rkhunter. mv -f rkhunter. rkhunter chmod "${RKHINST_MODE_EX}" rkhunter echo "Finished install in \"${PREFIX}\"." exit 0 ;; esac fielse echo "does NOT exist, exiting." exit 1fi;;esac # end Check PREFIXecho "Checking installation directories:"if [ "${RKHINST_LAYOUT}" = "oldschool" ]; then RKHDIR_LIST="${RKHINST_DIRS}"else RKHDIR_LIST="${RKHINST_DIRS} ${LIBDIR} ${VARDIR}/lib"fiumask 022for DIR in ${RKHDIR_LIST}; do echo $N " Directory ${DIR}: " if [ -d "${DIR}" ]; then echo $N "exists, and is " if [ ! -w "${PREFIX}" ]; then echo "NOT writable: exiting." exit 1 else echo "writable. OK" fi else echo $N "creating: " mkdir -p ${DIR}; retValChk fidoneumask 027for DIR in ${RKHINST_DIRS_EXCEP}; do echo $N " Directory ${DIR}: " if [ -d "${DIR}" ]; then echo $N "exists, and is " if [ ! -w "${PREFIX}" ]; then echo "NOT writable: exiting." exit 1 else echo "writable. OK" fi else echo $N "creating: " mkdir -p "${DIR}"; retValChk fi case "${DIR}" in */${APPNAME}|*/${APPNAME}/*|*/${APPNAME}-${APPVERSION}) chmod "${RKHINST_MODE_EX}" "${DIR}" ;; esacdone# Helper scripts, database and man pagefor FILE in ${RKHINST_SCRIPT_FILES} ${RKHINST_DB_FILES} ${RKHINST_MAN_FILES}; do case "${FILE}" in *.pl|*.sh) echo $N " Installing ${FILE}: " cp -f ./files/"${FILE}" "${RKHINST_SCRIPT_DIR}"; retValChk chmod "${RKHINST_MODE_EX}" "${RKHINST_SCRIPT_DIR}/${FILE}" ;; *.dat) echo $N " Installing ${FILE}: " cp -f ./files/"${FILE}" "${RKHINST_DB_DIR}"; retValChk chmod "${RKHINST_MODE_RW}" "${RKHINST_DB_DIR}/${FILE}" ;; *.8) echo $N " Installing ${FILE}: " cp -f ./files/"${FILE}" "${RKHINST_MAN_DIR}"; retValChk chmod "${RKHINST_MODE_RWR}" "${RKHINST_MAN_DIR}/${FILE}" ;; esacdone# Application documentsfor FILE in ${RKHINST_DOC_FILES}; do echo $N " Installing ${FILE}: " cp -f ./files/"${FILE}" "${RKHINST_DOC_DIR}"; retValChk chmod "${RKHINST_MODE_RWR}" "${RKHINST_DOC_DIR}/${FILE}"done# Language support filesecho $N " Installing language support files: "find ./files/i18n -type f | while read FILE; do cp "${FILE}" "${RKHINST_LANG_DIR}"done; retValChk# Applicationfor FILE in ${RKHINST_BIN_FILES}; do echo $N " Installing ${FILE}: " case "${RKHINST_LAYOUT}" in RPM) cp -f ./files/"${FILE}" "${RKHINST_BIN_DIR}/${FILE}"; retValChk ;; *) sed -e "s|-f /etc/rkhunter.conf|-f $RKHINST_ETC_DIR/rkhunter.conf|g" -e "s|CONFIGFILE=\"/etc|CONFIGFILE=\"$RKHINST_ETC_DIR|g" ./files/"${FILE}" > "${RKHINST_BIN_DIR}/${FILE}"; retValChk ;; esac chmod "${RKHINST_MODE_EX}" "${RKHINST_BIN_DIR}/${FILE}"done# Configuration filefor FILE in ${RKHINST_ETC_FILE}; do # We need people to make local changes themselves, so # give opportunity and alert. Don't use Perl to get value. if [ -n "$RANDOM" ]; then RANDVAL=$RANDOM else RANDVAL=`date +%Y%m%d%H%M%S 2>/dev/null` fi if [ -f "${RKHINST_ETC_DIR}/${FILE}" ]; then NEWFILE="${FILE}.${RANDVAL}" echo $N " Installing ${FILE} in no-clobber mode: " cp -f "./files/${FILE}" "${RKHINST_ETC_DIR}/${NEWFILE}"; retValChk chmod "${RKHINST_MODE_RW}" "${RKHINST_ETC_DIR}/${NEWFILE}" echo "" >> "${RKHINST_ETC_DIR}/${NEWFILE}" echo "INSTALLDIR=${PREFIX}" >> "${RKHINST_ETC_DIR}/${NEWFILE}" echo "DBDIR=${RKHINST_DB_DIR}" >> "${RKHINST_ETC_DIR}/${NEWFILE}" echo "SCRIPTDIR=${RKHINST_SCRIPT_DIR}" >> "${RKHINST_ETC_DIR}/${NEWFILE}" echo "TMPDIR=${RKHINST_TMP_DIR}" >> "${RKHINST_ETC_DIR}/${NEWFILE}" if [ "${RKHINST_LAYOUT}" != "RPM" ]; then echo " >>> " echo " >>> PLEASE NOTE: inspect for update changes in "${RKHINST_ETC_DIR}/${NEWFILE}"" echo " >>> and apply to "${RKHINST_ETC_DIR}/${FILE}" before running Rootkit Hunter." echo " >>> " fi else echo $N " Installing ${FILE}: " cp -f "./files/${FILE}" "${RKHINST_ETC_DIR}"; retValChk chmod "${RKHINST_MODE_RW}" "${RKHINST_ETC_DIR}/${FILE}" echo "" >> "${RKHINST_ETC_DIR}/${FILE}" if [ -n "${RPM_BUILD_ROOT}" ]; then echo "INSTALLDIR=${PREFIX}" | sed "s|${RPM_BUILD_ROOT}||g" >> "${RKHINST_ETC_DIR}/${FILE}" echo "DBDIR=${RKHINST_DB_DIR}" | sed "s|${RPM_BUILD_ROOT}||g" >> "${RKHINST_ETC_DIR}/${FILE}" echo "SCRIPTDIR=${RKHINST_SCRIPT_DIR}" | sed "s|${RPM_BUILD_ROOT}||g" >> "${RKHINST_ETC_DIR}/${FILE}" echo "TMPDIR=${RKHINST_TMP_DIR}" | sed "s|${RPM_BUILD_ROOT}||g" >> "${RKHINST_ETC_DIR}/${FILE}" else echo "INSTALLDIR=${PREFIX}" >> "${RKHINST_ETC_DIR}/${FILE}" echo "DBDIR=${RKHINST_DB_DIR}" >> "${RKHINST_ETC_DIR}/${FILE}" echo "SCRIPTDIR=${RKHINST_SCRIPT_DIR}" >> "${RKHINST_ETC_DIR}/${FILE}" echo "TMPDIR=${RKHINST_TMP_DIR}" >> "${RKHINST_ETC_DIR}/${FILE}" fi fidone# Strip root from fake root install.if [ -n "${STRIPROOT}" ]; then find "${PREFIX}" -type f | while read f; do grep "${PREFIX}" "${f}" >/dev/null 2>&1 && { echo $N " Striproot ${f}: "; sed -i "s|${STRIPROOT}||g" "${f}"; retValChk; } donefi# Finally copy the passwd/group files to the TMP directory# to avoid warnings when rkhunter is first run.case "${RKHINST_LAYOUT}" in RPM) # This is done by a %post section in the spec file. ;; *) cp -p /etc/passwd ${RKHINST_TMP_DIR} >/dev/null 2>&1 cp -p /etc/group ${RKHINST_TMP_DIR} >/dev/null 2>&1 ;;esacecho "Installation finished."} # End doInstalldoRemove() {RKHINST_DIRS="$RKHINST_ETC_DIR $RKHINST_BIN_DIR $RKHINST_SCRIPT_DIR $RKHINST_DOC_DIR $RKHINST_DB_DIR $RKHINST_TMP_DIR $RKHINST_LANG_DIR"RKHINST_DIRS_POST="$VARDIR $SHAREDIR $PREFIX"echo "Starting uninstallation"echo ""# Check PREFIXecho $N "Checking PREFIX $PREFIX: "if [ -e "${PREFIX}" ]; then echo $N "exists, and is " if [ ! -w "${PREFIX}" ]; then echo "NOT writable: exiting." exit 1 else echo "writable. OK" fielse echo "does NOT exist, exiting." #exit 1fi# Standalone removal involves just deleting the 'files' subdirectory.if [ "$PREFIX" = "." ]; then rm -rf ./files 2>/dev/null echo "Uninstallation complete." returnfiecho "Removing installation files:"# Man pagefor FILE in ${RKHINST_MAN_FILES}; do if [ -f "${RKHINST_MAN_DIR}/${FILE}" ]; then echo $N " Removing ${FILE}: " rm -f "${RKHINST_MAN_DIR}/${FILE}"; retValChk fidone# Applicationfor FILE in ${RKHINST_BIN_FILES}; do if [ -f "${RKHINST_BIN_DIR}/${FILE}" ]; then echo $N " Removing ${RKHINST_BIN_DIR}/${FILE}: " rm -f "${RKHINST_BIN_DIR}/${FILE}"; retValChk fidone# Configuration filefor FILE in ${RKHINST_ETC_FILE}; do if [ -f "${RKHINST_ETC_DIR}/${FILE}" ]; then echo $N " Removing ${RKHINST_ETC_DIR}/${FILE}: " rm -f "${RKHINST_ETC_DIR}/${FILE}"; retValChk fi echo "" echo "Please remove any ${RKHINST_ETC_DIR}/${FILE}.* files manually." echo ""done# Helper scripts: remove dir# Application documents: remove dir# Databases: remove dir# Language support: remove direcho "Removing installation directories:"for DIR in ${RKHINST_DIRS}; do case "${DIR}" in */${APPNAME}|*/${APPNAME}-${APPVERSION}) if [ -d "${DIR}" ]; then echo $N " Removing ${DIR}: " rm -rf "${DIR}"; retValChk fi ;; */${APPNAME}/*) DIR=`dirname "${DIR}"` if [ -d "${DIR}" ]; then echo $N " Removing ${DIR}: " rm -rf "${DIR}"; retValChk fi ;; esacdone# Could use patch for removing custom $VARDIR $SHAREDIR $PREFIX here.if [ "${RKHINST_LAYOUT}" = "oldschool" ]; then if [ -d "/usr/local/rkhunter" ]; then echo "" echo "Note: The directory '/usr/local/rkhunter' still exists." fifi# Remove any old log files.rm -f /var/log/rkhunter.log /var/log/rkhunter.log.old >/dev/null 2>&1echo ""echo "Done removing files. Please double-check."} # end doRemoveif [ $# -eq 0 ]; then showHelpfiwhile [ $# -ge 1 ]; do case $1 in h | -h | --help | --usage) showHelp ;; -e | --examples) showExamples ;; -v | --version) showVersion ;; -l | --layout) shift 1 case "$1" in custom) shift 1 if [ -n "$1" ]; then RKHINST_LAYOUT="custom_$1" else echo "No custom layout given, exiting." exit 1 fi ;; default|oldschool|/usr|/usr/local|RPM) RKHINST_LAYOUT="$1" ;; *) echo "Unknown layout given, exiting." exit 1 ;; esac ;; -s | --striproot) shift 1 if [ -n "$1" ]; then STRIPROOT="$1" else echo "Striproot requested but no directory name given, exiting." exit 1 fi ;; --show|--remove|--install) if [ -z "${RKHINST_LAYOUT}" ]; then echo "No layout given. The '--layout' option must be specified first." exit 1 fi action=`echo $ECHOOPT "$1"|sed "s/-//g"` case "$action" in show) showTemplate $RKHINST_LAYOUT ;; remove) # Clean active window clear selectTemplate $RKHINST_LAYOUT doRemove ;; install) # Clean active window clear selectTemplate $RKHINST_LAYOUT doInstall ;; "") echo "No action given, exiting." exit 1 ;; *) echo "Unknown action given, exiting: $action" exit 1 ;; esac exit 0 ;; *) echo "Unknown option \"${1}\" given." echo "" showHelp ;; esac shiftdoneexit 0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -