1#!/bin/sh 2 3################################################################################ 4# 5# Rootkit Hunter installer 6# -------------------------- 7# 8# Copyright Michael Boelen ( michael AT rootkit DOT nl ) 9# See LICENSE file for use of this software 10# 11################################################################################ 12 13INSTALLER_NAME="Rootkit Hunter installer" 14INSTALLER_VERSION="1.2.21" 15INSTALLER_COPYRIGHT="Copyright 2018, Michael Boelen" 16INSTALLER_LICENSE=" 17 18This software was developed by the Rootkit Hunter project team. 19For reporting bugs, patches, comments and questions, please go to: 20http://rkhunter.sourceforge.net 21 22Rootkit Hunter comes with ABSOLUTELY NO WARRANTY. This is free 23software, and you are welcome to redistribute it under the terms 24of the GNU General Public License. See LICENSE for details. 25" 26 27APPNAME="rkhunter" 28APPVERSION="1.4.6" 29RKHINST_OWNER="0:0" 30RKHINST_MODE_EX="0700" 31RKHINST_MODE_RW="0600" 32RKHINST_MODE_RWR="0644" 33RKHINST_LAYOUT="default" 34RKHINST_ACTION="" 35RKHINST_ACTION_SEEN=0 36ERRCODE=0 37OVERWRITE=0 38STRIPROOT="" 39 40RPM_USING_ROOT=0 41TGZ_USING_ROOT=0 42TXZ_USING_ROOT=0 43DEB_USING_ROOT=0 44 45umask 027 46 47OPERATING_SYSTEM=`uname` 48UNAMEM=`uname -m` 49 50if [ "${OPERATING_SYSTEM}" = "SunOS" ]; then 51 if [ -z "$RANDOM" ]; then 52 # If the 'which' output contains a space, then it is probably an error. 53 if [ -n "`which bash 2>/dev/null | grep -v ' '`" ]; then 54 exec bash $0 $* 55 elif [ -n "`which ksh 2>/dev/null | grep -v ' '`" ]; then 56 exec ksh $0 $* 57 else 58 echo "Unable to find the bash or ksh shell to run the installer. Exiting." 59 exit 1 60 fi 61 62 exit 0 63 fi 64 65 # We need /usr/xpg4/bin before other directories on Solaris. 66 PATH="/usr/xpg4/bin:${PATH}" 67fi 68 69 70showHelp() { # Show help / version 71 echo "${INSTALLER_NAME} ${INSTALLER_VERSION}" 72 echo "" 73 echo "Usage: $0 <parameters>" 74 echo "" 75 echo "Ordered valid parameters:" 76 echo ' --help (-h) : Show this help.' 77 echo " --examples : Show layout examples." 78 echo ' --layout <value> : Choose installation template.' 79 echo " The templates are:" 80 echo ' - default: (FHS compliant; the default)' 81 echo " - /usr" 82 echo " - /usr/local" 83 echo " - oldschool: old version file locations" 84 echo " - custom: supply your own installation directory" 85 echo " - RPM: for building RPM's. Requires \$RPM_BUILD_ROOT." 86 echo " - DEB: for building DEB's. Requires \$DEB_BUILD_ROOT." 87 echo " - TGZ: for building Slackware TGZ's. Requires \$TGZ_BUILD_ROOT." 88 echo " - TXZ: for building Slackware TXZ's. Requires \$TXZ_BUILD_ROOT." 89 echo ' --striproot : Strip path from custom layout (for package maintainers).' 90 echo " --install : Install according to chosen layout." 91 echo " --overwrite : Overwrite the existing configuration file." 92 echo " (Default is to create a separate configuration file.)" 93 echo " --show : Show chosen layout." 94 echo " --remove : Uninstall according to chosen layout." 95 echo " --uninstall : Alias for the '--remove' option." 96 echo " --version : Show the installer version." 97 echo "" 98 99 return 100} 101 102showExamples() { # Show examples 103 echo "${INSTALLER_NAME}" 104 echo "" 105 echo "Examples:" 106 echo "1. Show layout, files in /usr:" 107 echo " installer.sh --layout /usr --show" 108 echo "" 109 echo "2. Install in /usr/local:" 110 echo " installer.sh --layout /usr/local --install" 111 echo "" 112 echo '3. Install in chosen (custom) directory /opt:' 113 echo " installer.sh --layout custom /opt --install" 114 echo "" 115 echo "4. Install in temporary directory /tmp/rkhunter/usr/local," 116 echo ' with files in /usr/local (for package maintainers):' 117 echo " mkdir -p /tmp/rkhunter/usr/local" 118 echo " installer.sh --layout custom /tmp/rkhunter/usr/local \\" 119 echo " --striproot /tmp/rkhunter --install" 120 echo "" 121 echo "5. Remove files, layout /usr/local:" 122 echo " installer.sh --layout /usr/local --remove" 123 echo "" 124 125 return 126} 127 128showVersion() { echo "${INSTALLER_NAME} ${INSTALLER_VERSION} ${INSTALLER_LICENSE}"; return; } 129 130selectTemplate() { # Take input from the "--install parameter" 131 case "$1" in 132 /usr|/usr/local|default|custom_*|RPM|DEB|TGZ|TXZ) 133 case "$1" in 134 default) 135 PREFIX="/usr/local" 136 ;; 137 custom_*) 138 PREFIX=`echo "${RKHINST_LAYOUT}" | sed 's|custom_||g'` 139 140 case "${PREFIX}" in 141 .) 142 if [ "${RKHINST_ACTION}" = "install" ]; then 143 echo "Standalone installation into ${PWD}/files" 144 fi 145 ;; 146 .*|/.*|*//*) 147 echo "Invalid layout directory chosen: ${PREFIX}" 148 exit 1 149 ;; 150 *) 151 test "${PREFIX}" = "/" && PREFIX="" 152 153 if [ "${RKHINST_ACTION}" = "install" ]; then 154 RKHTMPVAR=`echo "${PATH}" | grep "${PREFIX}/bin"` 155 156 if [ -z "${RKHTMPVAR}" ]; then 157 echo "" 158 echo "Note: Directory ${PREFIX}/bin is not in your PATH" 159 echo "" 160 fi 161 fi 162 ;; 163 esac 164 ;; 165 RPM) 166 if [ -n "${RPM_BUILD_ROOT}" ]; then 167 if [ "${RPM_BUILD_ROOT}" = "/" ]; then 168 RPM_USING_ROOT=1 169 PREFIX="/usr/local" 170 else 171 PREFIX="${RPM_BUILD_ROOT}/usr/local" 172 fi 173 else 174 echo "RPM installation chosen but \$RPM_BUILD_ROOT variable not found. Exiting." 175 exit 1 176 fi 177 ;; 178 DEB) 179 if [ -n "${DEB_BUILD_ROOT}" ]; then 180 if [ "${DEB_BUILD_ROOT}" = "/" ]; then 181 DEB_USING_ROOT=1 182 PREFIX="/usr" 183 else 184 PREFIX="${DEB_BUILD_ROOT}/usr" 185 fi 186 else 187 echo "DEB installation chosen but \$DEB_BUILD_ROOT variable not found. Exiting." 188 exit 1 189 fi 190 ;; 191 TGZ) 192 if [ -n "${TGZ_BUILD_ROOT}" ]; then 193 if [ "${TGZ_BUILD_ROOT}" = "/" ]; then 194 TGZ_USING_ROOT=1 195 PREFIX="/usr" 196 else 197 PREFIX="${TGZ_BUILD_ROOT}/usr" 198 fi 199 else 200 echo "TGZ installation chosen but \$TGZ_BUILD_ROOT variable not found. Exiting." 201 exit 1 202 fi 203 ;; 204 TXZ) 205 if [ -n "${TXZ_BUILD_ROOT}" ]; then 206 if [ "${TXZ_BUILD_ROOT}" = "/" ]; then 207 TXZ_USING_ROOT=1 208 PREFIX="/usr" 209 else 210 PREFIX="${TXZ_BUILD_ROOT}/usr" 211 fi 212 else 213 echo "TXZ installation chosen but \$TXZ_BUILD_ROOT variable not found. Exiting." 214 exit 1 215 fi 216 ;; 217 *) 218 PREFIX="$1" 219 ;; 220 esac 221 222 case "$1" in 223 RPM|DEB|TGZ|TXZ) 224 ;; 225 *) 226 if [ "${RKHINST_ACTION}" = "install" ]; then 227 if [ -n "${PREFIX}" -a ! -d "${PREFIX}" ]; then 228 echo "Non-existent installation directory chosen: ${PREFIX}" 229 echo "Perhaps run \"mkdir -p ${PREFIX}\" first?" 230 exit 1 231 fi 232 fi 233 ;; 234 esac 235 236 case "$1" in 237 /usr/local|custom_*) 238 SYSCONFIGDIR="${PREFIX}/etc" 239 ;; 240 RPM) 241 if [ $RPM_USING_ROOT -eq 1 ]; then 242 SYSCONFIGDIR="/etc" 243 else 244 SYSCONFIGDIR="${RPM_BUILD_ROOT}/etc" 245 fi 246 ;; 247 DEB) 248 if [ $DEB_USING_ROOT -eq 1 ]; then 249 SYSCONFIGDIR="/etc" 250 else 251 SYSCONFIGDIR="${DEB_BUILD_ROOT}/etc" 252 fi 253 ;; 254 TGZ) 255 if [ $TGZ_USING_ROOT -eq 1 ]; then 256 SYSCONFIGDIR="/etc" 257 else 258 SYSCONFIGDIR="${TGZ_BUILD_ROOT}/etc" 259 fi 260 ;; 261 TXZ) 262 if [ $TXZ_USING_ROOT -eq 1 ]; then 263 SYSCONFIGDIR="/etc" 264 else 265 SYSCONFIGDIR="${TXZ_BUILD_ROOT}/etc" 266 fi 267 ;; 268 *) 269 SYSCONFIGDIR="/etc" 270 ;; 271 esac 272 273 case "$1" in 274 custom_*) 275 LIBDIR="" 276 277 if [ -z "${PREFIX}" -a "${OPERATING_SYSTEM}" = "Darwin" ]; then 278 test -d "/Library" && LIBDIR="/Library" 279 fi 280 281 if [ -z "${LIBDIR}" ]; then 282 if [ "${UNAMEM}" = "x86_64" -o "${UNAMEM}" = "ppc64" ]; then 283 LIBDIR="${PREFIX}/lib" 284 else 285 LIBDIR="${PREFIX}/lib" 286 fi 287 fi 288 289 BINDIR="${PREFIX}/bin" 290 VARDIR="${PREFIX}/var" 291 292 if [ -z "${PREFIX}" ]; then 293 if [ ! -d "/share" -a -d "/usr/share" ]; then 294 SHAREDIR="/usr/share" 295 else 296 SHAREDIR="/share" 297 fi 298 else 299 SHAREDIR="${PREFIX}/share" 300 fi 301 ;; 302 RPM) 303 if [ "${UNAMEM}" = "x86_64" -o "${UNAMEM}" = "ppc64" ]; then 304 LIBDIR="${PREFIX}/lib" 305 else 306 LIBDIR="${PREFIX}/lib" 307 fi 308 309 BINDIR="${PREFIX}/bin" 310 311 if [ $RPM_USING_ROOT -eq 1 ]; then 312 VARDIR="/var" 313 else 314 VARDIR="${RPM_BUILD_ROOT}/var" 315 fi 316 317 SHAREDIR="${PREFIX}/share" 318 ;; 319 DEB) 320 BINDIR="${PREFIX}/bin" 321 LIBDIR="${PREFIX}/lib" 322 323 if [ $DEB_USING_ROOT -eq 1 ]; then 324 VARDIR="/var" 325 else 326 VARDIR="${DEB_BUILD_ROOT}/var" 327 fi 328 329 SHAREDIR="${PREFIX}/share" 330 ;; 331 TGZ) 332 if [ "${UNAMEM}" = "x86_64" -o "${UNAMEM}" = "ppc64" ]; then 333 LIBDIR="${PREFIX}/lib" 334 else 335 LIBDIR="${PREFIX}/lib" 336 fi 337 338 BINDIR="${PREFIX}/bin" 339 340 if [ $TGZ_USING_ROOT -eq 1 ]; then 341 VARDIR="/var" 342 else 343 VARDIR="${TGZ_BUILD_ROOT}/var" 344 fi 345 346 SHAREDIR="${PREFIX}/share" 347 ;; 348 TXZ) 349 if [ "${UNAMEM}" = "x86_64" -o "${UNAMEM}" = "ppc64" ]; then 350 LIBDIR="${PREFIX}/lib" 351 else 352 LIBDIR="${PREFIX}/lib" 353 fi 354 355 BINDIR="${PREFIX}/bin" 356 357 if [ $TXZ_USING_ROOT -eq 1 ]; then 358 VARDIR="/var" 359 else 360 VARDIR="${TXZ_BUILD_ROOT}/var" 361 fi 362 363 SHAREDIR="${PREFIX}/share" 364 ;; 365 *) 366 if [ -d "${PREFIX}/lib" ]; then 367 LIBDIR="${PREFIX}/lib" 368 else 369 LIBDIR="${PREFIX}/lib" 370 fi 371 372 BINDIR="${PREFIX}/bin" 373 VARDIR="/var" 374 SHAREDIR="${PREFIX}/share" 375 ;; 376 esac 377 ;; 378 oldschool) # The rigid way, like RKH used to be set up. 379 PREFIX="/usr/local" 380 SYSCONFIGDIR="${PREFIX}/etc" 381 LIBDIR="${PREFIX}/${APPNAME}/lib" 382 VARDIR="${LIBDIR}" 383 SHAREDIR="${LIBDIR}" 384 RKHINST_DOC_DIR="${PREFIX}/${APPNAME}/lib/docs" 385 BINDIR="${PREFIX}/bin" 386 ;; 387 *) # None chosen. 388 echo "No template chosen. Exiting." 389 exit 1 390 ;; 391 esac 392 393 RKHINST_ETC_DIR="${SYSCONFIGDIR}" 394 RKHINST_BIN_DIR="${BINDIR}" 395 RKHINST_SCRIPT_DIR="${LIBDIR}/${APPNAME}/scripts" 396 RKHINST_MAN_DIR="${PREFIX}/man/man8" 397 398 if [ "${RKHINST_LAYOUT}" = "oldschool" ]; then 399 RKHINST_DB_DIR="${VARDIR}/${APPNAME}/db" 400 RKHINST_TMP_DIR="${VARDIR}/${APPNAME}/tmp" 401 RKHINST_DOC_DIR="${SHAREDIR}/${APPNAME}/docs" 402 elif [ "${RKHINST_LAYOUT}" = "DEB" ]; then 403 RKHINST_DB_DIR="${VARDIR}/lib/${APPNAME}/db" 404 RKHINST_TMP_DIR="${VARDIR}/lib/${APPNAME}/tmp" 405 RKHINST_DOC_DIR="${SHAREDIR}/doc/${APPNAME}" 406 RKHINST_SCRIPT_DIR="${SHAREDIR}/${APPNAME}/scripts" 407 elif [ "${RKHINST_LAYOUT}" = "TXZ" ]; then 408 RKHINST_DB_DIR="${VARDIR}/lib/${APPNAME}/db" 409 RKHINST_TMP_DIR="${VARDIR}/lib/${APPNAME}/tmp" 410 RKHINST_DOC_DIR="${PREFIX}/doc/${APPNAME}" 411 RKHINST_MAN_DIR="${PREFIX}/man/man8" 412 else 413 RKHINST_DB_DIR="${VARDIR}/lib/${APPNAME}/db" 414 RKHINST_TMP_DIR="${VARDIR}/lib/${APPNAME}/tmp" 415 RKHINST_DOC_DIR="${SHAREDIR}/doc/${APPNAME}" 416 fi 417 418 RKHINST_LANG_DIR="${RKHINST_DB_DIR}/i18n" 419 RKHINST_SIG_DIR="${RKHINST_DB_DIR}/signatures" 420 421 RKHINST_ETC_FILE="${APPNAME}.conf" 422 RKHINST_BIN_FILES="${APPNAME}" 423 424 RKHINST_SCRIPT_FILES="check_modules.pl filehashsha.pl stat.pl readlink.sh" 425 RKHINST_DB_FILES="backdoorports.dat mirrors.dat programs_bad.dat suspscan.dat" 426 RKHINST_SIG_FILES="RKH_dso.ldb RKH_Glubteba.ldb RKH_jynx.ldb RKH_kbeast.ldb RKH_libkeyutils1.ldb RKH_libkeyutils.ldb RKH_libncom.ldb RKH_pamunixtrojan.ldb RKH_shv.ldb RKH_sniffer.ldb RKH_sshd.ldb RKH_turtle.ldb RKH_xsyslog.ldb" 427 428 if [ "${RKHINST_LAYOUT}" = "DEB" ]; then 429 RKHINST_DOC_FILES="ACKNOWLEDGMENTS FAQ README" 430 else 431 RKHINST_DOC_FILES="ACKNOWLEDGMENTS CHANGELOG FAQ LICENSE README" 432 fi 433 434 RKHINST_MAN_FILES="${APPNAME}.8" 435 436 return 437} 438 439# Additions we need to be aware / take care of: 440# any /contrib/ files which should include any RH*L/alike ones: 441# Additions we need to be aware / take care of wrt RH*L/alike: 442# /etc/cron.daily/rkhunter (different versions of cronjob) 443# /etc/sysconfig/rkhunter (config for cronjob) 444# /etc/logrotate.d/rkhunter 445 446showTemplate() { # Take input from the "--install parameter" 447 case "$1" in 448 custom_.) 449 # Dump *everything* in the current dir. 450 echo "Standalone installation into ${PWD}/files" 451 ;; 452 *) 453 NOTPRESENT=" (Directory will be created)" 454 455 selectTemplate "$1" 456 457 test -z "${PREFIX}" && RKHTMPVAR="/" || RKHTMPVAR="${PREFIX}" 458 459 test ! -d "${RKHTMPVAR}" && RKHTMPVAR="${RKHTMPVAR} (Directory does not exist)" 460 echo "Install into: ${RKHTMPVAR}" 461 462 RKHTMPVAR="${RKHINST_BIN_DIR}" 463 test ! -d "${RKHTMPVAR}" && RKHTMPVAR="${RKHTMPVAR} ${NOTPRESENT}" 464 echo "Application: ${RKHTMPVAR}" 465 466 RKHTMPVAR="${RKHINST_ETC_DIR}" 467 test ! -d "${RKHTMPVAR}" && RKHTMPVAR="${RKHTMPVAR} ${NOTPRESENT}" 468 if [ $OVERWRITE -eq 0 ]; then 469 echo "Configuration file: ${RKHTMPVAR}" 470 else 471 if [ ! -d "${RKHTMPVAR}" ]; then 472 echo "Configuration file: ${RKHTMPVAR}" 473 else 474 if [ -z "${PREFIX}" ]; then 475 echo "Configuration file: ${RKHINST_ETC_DIR} (Configuration file will be overwritten)" 476 else 477 echo "Configuration file: ${RKHINST_ETC_DIR} (Configuration file will be overwritten)" 478 fi 479 fi 480 fi 481 482 RKHTMPVAR="${RKHINST_DOC_DIR}" 483 test ! -d "${RKHTMPVAR}" && RKHTMPVAR="${RKHTMPVAR}${NOTPRESENT}" 484 echo "Documents: ${RKHTMPVAR}" 485 486 RKHTMPVAR="${RKHINST_MAN_DIR}" 487 test ! -d "${RKHTMPVAR}" && RKHTMPVAR="${RKHTMPVAR} ${NOTPRESENT}" 488 echo "Man page: ${RKHTMPVAR}" 489 490 RKHTMPVAR="${RKHINST_SCRIPT_DIR}" 491 if [ ! -d "${RKHTMPVAR}" ]; then 492 if [ -z "${PREFIX}" ]; then 493 RKHTMPVAR="${RKHTMPVAR} ${NOTPRESENT}" 494 else 495 RKHTMPVAR="${RKHTMPVAR} ${NOTPRESENT}" 496 fi 497 fi 498 echo "Scripts: ${RKHTMPVAR}" 499 500 RKHTMPVAR="${RKHINST_DB_DIR}" 501 test ! -d "${RKHTMPVAR}" && RKHTMPVAR="${RKHTMPVAR} ${NOTPRESENT}" 502 echo "Databases: ${RKHTMPVAR}" 503 504 RKHTMPVAR="${RKHINST_SIG_DIR}" 505 test ! -d "${RKHTMPVAR}" && RKHTMPVAR="${RKHTMPVAR} ${NOTPRESENT}" 506 echo "Signatures: ${RKHTMPVAR}" 507 508 RKHTMPVAR="${RKHINST_TMP_DIR}" 509 test ! -d "${RKHTMPVAR}" && RKHTMPVAR="${RKHTMPVAR} ${NOTPRESENT}" 510 echo "Temporary files: ${RKHTMPVAR}" 511 512 if [ -n "${STRIPROOT}" ]; then 513 echo ""; echo "Got STRIPROOT=\"${STRIPROOT}\"" 514 fi 515 ;; 516 esac 517 518 return 519} 520 521 522################################################################################# 523# 524# Start installation 525# 526################################################################################# 527 528doInstall() { 529 DOING_UPDT=0 530 531 # Preflight checks 532 echo "Checking system for:" 533 534 if [ -f "./files/${APPNAME}" ]; then 535 echo " ${INSTALLER_NAME} files: found" 536 537 case "${RKHINST_LAYOUT}" in 538 RPM|DEB|TGZ|TXZ) 539 ;; 540 *) 541 for ITEM in `find ./files`; do 542 chown "${RKHINST_OWNER}" "${ITEM}" 543 done 544 ;; 545 esac 546 else 547 echo "Checking system for: ${INSTALLER_NAME} files: FAILED" 548 echo "Installation files not in \"${PWD}/files\". Exiting." 549 exit 1 550 fi 551 552 553 # We only look for one download command. 554 555 for RKHWEBCMD in wget links elinks lynx curl GET bget; do 556 SEARCH=`which ${RKHWEBCMD} 2>/dev/null | grep -v ' '` 557 558 if [ -n "${SEARCH}" ]; then 559 echo " A web file download command: ${RKHWEBCMD} found" 560 break 561 fi 562 done 563 564 if [ -z "${SEARCH}" ]; then 565 echo " A web file download command: None found" 566 echo "" 567 echo " Please install one of wget, links, elinks, lynx, curl, GET or" 568 echo ' bget (from www.cpan.org/authors/id/E/EL/ELIJAH/bget)' 569 echo "" 570 fi 571 572 573 # Perl will be found in rkhunter itself. 574 575 RKHINST_DIRS="$RKHINST_DOC_DIR $RKHINST_MAN_DIR $RKHINST_ETC_DIR $RKHINST_BIN_DIR" 576 RKHINST_DIRS_EXCEP="$RKHINST_SCRIPT_DIR $RKHINST_DB_DIR $RKHINST_TMP_DIR $RKHINST_LANG_DIR $RKHINST_SIG_DIR" 577 578 if [ -f "${RKHINST_ETC_DIR}/rkhunter.conf" ]; then 579 echo "Starting update:" 580 DOING_UPDT=1 581 else 582 echo "Starting installation:" 583 fi 584 585 case "${RKHINST_LAYOUT}" in 586 RPM|DEB|TGZ|TXZ) 587 ;; 588 *) 589 # Check PREFIX 590 if [ -z "${PREFIX}" ]; then 591 : 592 elif [ -d "${PREFIX}" ]; then 593 if [ -w "${PREFIX}" ]; then 594 echo " Checking installation directory \"$PREFIX\": it exists and is writable." 595 596 # That's enough for a standalone installation. 597 if [ "${PREFIX}" = "." ]; then 598 chown -R ${RKHINST_OWNER} ./files 599 600 for ITEM in `find ./files -type f`; do 601 case "${ITEM}" in 602 *.sh|*.pl|*/rkhunter) 603 chmod "${RKHINST_MODE_EX}" "${ITEM}" 604 ;; 605 *) 606 chmod "${RKHINST_MODE_RW}" "${ITEM}" 607 ;; 608 esac 609 done 610 611 cd ./files 612 613 PREFIX="${PWD}" 614 615 echo "LOGFILE=${PREFIX}/rkhunter.log" >>rkhunter.conf 616 echo "TMPDIR=$PREFIX" >>rkhunter.conf 617 echo "DBDIR=$PREFIX" >>rkhunter.conf 618 echo "SCRIPTDIR=$PREFIX" >>rkhunter.conf 619 echo "INSTALLDIR=$PREFIX" >>rkhunter.conf 620 echo "USER_FILEPROP_FILES_DIRS=$PREFIX/rkhunter" >>rkhunter.conf 621 echo "USER_FILEPROP_FILES_DIRS=$PREFIX/rkhunter.conf" >>rkhunter.conf 622 test -f "$PREFIX/rkhunter.conf.local" && echo "USER_FILEPROP_FILES_DIRS=$PREFIX/rkhunter.conf.local" >>rkhunter.conf 623 test -d "$PREFIX/rkhunter.d" && echo "USER_FILEPROP_FILES_DIRS=$PREFIX/rkhunter.d/*.conf" >>rkhunter.conf 624 625 sed -e "s|-f /etc/rkhunter.conf|-f $PREFIX/rkhunter.conf|g" -e "s|CONFIGFILE=\"/etc|CONFIGFILE=\"$PREFIX|g" rkhunter >rkhunter. 626 mv -f rkhunter. rkhunter 627 628 chmod "${RKHINST_MODE_EX}" rkhunter 629 630 echo "Installation complete" 631 632 exit 0 633 fi 634 else 635 echo " Checking installation directory \"$PREFIX\": it exists, but it is not writable. Exiting." 636 exit 1 637 fi 638 elif [ -e "${PREFIX}" ]; then 639 echo " Checking installation directory \"$PREFIX\": it is not a directory. Exiting." 640 exit 1 641 else 642 echo " Checking installation directory \"$PREFIX\": it does not exist. Exiting." 643 exit 1 644 fi 645 ;; 646 esac # end Check PREFIX 647 648 649 echo " Checking installation directories:" 650 651 if [ "${RKHINST_LAYOUT}" = "oldschool" ]; then 652 RKHDIR_LIST="${RKHINST_DIRS}" 653 else 654 RKHDIR_LIST="${RKHINST_DIRS} ${LIBDIR} ${VARDIR}/lib" 655 fi 656 657 umask 022 658 for DIR in ${RKHDIR_LIST}; do 659 if [ -d "${DIR}" ]; then 660 if [ -w "${DIR}" ]; then 661 echo " Directory ${DIR}: exists and is writable." 662 else 663 echo " Directory ${DIR}: exists, but it is not writable. Exiting." 664 exit 1 665 fi 666 else 667 mkdir -p ${DIR} >/dev/null 2>&1 668 ERRCODE=$? 669 670 if [ $ERRCODE -eq 0 ]; then 671 echo " Directory ${DIR}: creating: OK" 672 else 673 echo " Directory ${DIR}: creating: FAILED: Code $ERRCODE" 674 exit 1 675 fi 676 fi 677 done 678 679 umask 077 680 for DIR in ${RKHINST_DIRS_EXCEP}; do 681 if [ -d "${DIR}" ]; then 682 if [ -w "${DIR}" ]; then 683 echo " Directory ${DIR}: exists and is writable." 684 else 685 echo " Directory ${DIR}: exists, but it is not writable. Exiting." 686 exit 1 687 fi 688 else 689 mkdir -p ${DIR} >/dev/null 2>&1 690 ERRCODE=$? 691 692 if [ $ERRCODE -eq 0 ]; then 693 echo " Directory ${DIR}: creating: OK" 694 else 695 echo " Directory ${DIR}: creating: FAILED: Code $ERRCODE" 696 exit 1 697 fi 698 fi 699 700 case "${DIR}" in 701 */${APPNAME}|*/${APPNAME}/*|*/${APPNAME}-${APPVERSION}) 702 chmod "${RKHINST_MODE_EX}" "${DIR}" 703 ;; 704 esac 705 done 706 umask 027 707 708 709 # 710 # Now do the actual installation. 711 # 712 713 # Helper scripts, database and man page 714 for FILE in ${RKHINST_SCRIPT_FILES} ${RKHINST_DB_FILES} ${RKHINST_MAN_FILES}; do 715 case "${FILE}" in 716 *.pl|*.sh) 717 cp -f ./files/"${FILE}" "${RKHINST_SCRIPT_DIR}" >/dev/null 2>&1 718 ERRCODE=$? 719 720 if [ $ERRCODE -eq 0 ]; then 721 echo " Installing ${FILE}: OK" 722 chmod "${RKHINST_MODE_EX}" "${RKHINST_SCRIPT_DIR}/${FILE}" 723 else 724 echo " Installing ${FILE}: FAILED: Code $ERRCODE" 725 exit 1 726 fi 727 ;; 728 *.dat) 729 if [ "${FILE}" = "mirrors.dat" -a -f "${RKHINST_DB_DIR}/mirrors.dat" ]; then 730 RKHTMPVAR=`egrep '^(local|remote)=' ${RKHINST_DB_DIR}/mirrors.dat 2>/dev/null` 731 732 if [ -n "${RKHTMPVAR}" ]; then 733 echo " Installing ${FILE}: Locally modified - not overwritten" 734 continue 735 fi 736 fi 737 738 cp -f ./files/"${FILE}" "${RKHINST_DB_DIR}" >/dev/null 2>&1 739 ERRCODE=$? 740 741 if [ $ERRCODE -eq 0 ]; then 742 echo " Installing ${FILE}: OK" 743 chmod "${RKHINST_MODE_RW}" "${RKHINST_DB_DIR}/${FILE}" 744 else 745 echo " Installing ${FILE}: FAILED: Code $ERRCODE" 746 exit 1 747 fi 748 ;; 749 *.8) 750 cp -f ./files/"${FILE}" "${RKHINST_MAN_DIR}" >/dev/null 2>&1 751 ERRCODE=$? 752 753 if [ $ERRCODE -eq 0 ]; then 754 echo " Installing ${FILE}: OK" 755 chmod "${RKHINST_MODE_RWR}" "${RKHINST_MAN_DIR}/${FILE}" 756 else 757 echo " Installing ${FILE}: FAILED: Code $ERRCODE" 758 exit 1 759 fi 760 ;; 761 esac 762 done 763 764 765 # Application documents 766 for FILE in ${RKHINST_DOC_FILES}; do 767 cp -f ./files/"${FILE}" "${RKHINST_DOC_DIR}" >/dev/null 2>&1 768 ERRCODE=$? 769 770 if [ $ERRCODE -eq 0 ]; then 771 echo " Installing ${FILE}: OK" 772 chmod "${RKHINST_MODE_RWR}" "${RKHINST_DOC_DIR}/${FILE}" 773 else 774 echo " Installing ${FILE}: FAILED: Code $ERRCODE" 775 exit 1 776 fi 777 done 778 779 780 # Language support files 781 ERRCODE=0 782 783 for FILE in `find ./files/i18n -type f`; do 784 cp "${FILE}" "${RKHINST_LANG_DIR}" >/dev/null 2>&1 785 ERRCODE=$? 786 787 FNAME=`echo ${FILE} | sed 's|^./files/i18n/||'` 788 789 if [ $ERRCODE -eq 0 ]; then 790 chmod "${RKHINST_MODE_RW}" "${RKHINST_LANG_DIR}/${FNAME}" 791 else 792 echo " Installing ${FILE}: FAILED: Code $ERRCODE" 793 break 794 fi 795 done 796 797 if [ $ERRCODE -eq 0 ];then 798 echo " Installing language support files: OK" 799 else 800 echo " Installing language support files: FAILED: Code $ERRCODE" 801 exit 1 802 fi 803 804 805 # ClamAV signatures 806 ERRCODE=0 807 808 for FILE in `find ./files/signatures -type f`; do 809 cp "${FILE}" "${RKHINST_SIG_DIR}" >/dev/null 2>&1 810 ERRCODE=$? 811 812 FNAME=`echo ${FILE} | sed 's|^./files/signatures/||'` 813 814 if [ $ERRCODE -eq 0 ]; then 815 chmod "${RKHINST_MODE_RW}" "${RKHINST_SIG_DIR}/${FNAME}" 816 else 817 echo " Installing ${FILE}: FAILED: Code $ERRCODE" 818 break 819 fi 820 done 821 822 if [ $ERRCODE -eq 0 ];then 823 echo " Installing ClamAV signatures: OK" 824 else 825 echo " Installing ClamAV signatures: FAILED: Code $ERRCODE" 826 exit 1 827 fi 828 829 # Application 830 for FILE in ${RKHINST_BIN_FILES}; do 831 case "${RKHINST_LAYOUT}" in 832 RPM|DEB|TGZ|TXZ) 833 cp -f ./files/"${FILE}" "${RKHINST_BIN_DIR}/${FILE}" >/dev/null 2>&1 834 ERRCODE=$? 835 836 if [ $ERRCODE -eq 0 ]; then 837 echo " Installing ${FILE}: OK" 838 chmod "${RKHINST_MODE_EX}" "${RKHINST_BIN_DIR}/${FILE}" 839 else 840 echo " Installing ${FILE}: FAILED: Code $ERRCODE" 841 exit 1 842 fi 843 ;; 844 *) 845 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}" 846 ERRCODE=$? 847 848 if [ $ERRCODE -eq 0 ]; then 849 echo " Installing ${FILE}: OK" 850 chmod "${RKHINST_MODE_EX}" "${RKHINST_BIN_DIR}/${FILE}" 851 else 852 echo " Installing ${FILE}: FAILED: Code $ERRCODE" 853 exit 1 854 fi 855 ;; 856 esac 857 done 858 859 860 # Configuration file 861 for FILE in ${RKHINST_ETC_FILE}; do 862 test $OVERWRITE -eq 1 && rm -f "${RKHINST_ETC_DIR}/${FILE}" 863 864 if [ -f "${RKHINST_ETC_DIR}/${FILE}" ]; then 865 # We need people to make local changes themselves, so 866 # give opportunity and alert. Don't use Perl to get value. 867 868 if [ -n "$RANDOM" ]; then 869 RANDVAL=$RANDOM 870 else 871 RANDVAL=`date +%Y%m%d%H%M%S 2>/dev/null` 872 873 if [ -z "${RANDVAL}" ]; then 874 RANDVAL=$$ 875 fi 876 fi 877 878 NEWFILE="${FILE}.${RANDVAL}" 879 880 cp -f "./files/${FILE}" "${RKHINST_ETC_DIR}/${NEWFILE}" >/dev/null 2>&1 881 ERRCODE=$? 882 883 if [ $ERRCODE -eq 0 ]; then 884 echo " Installing ${FILE} in no-clobber mode: OK" 885 chmod "${RKHINST_MODE_RW}" "${RKHINST_ETC_DIR}/${NEWFILE}" 886 else 887 echo " Installing ${FILE} in no-clobber mode: FAILED: Code $ERRCODE" 888 exit 1 889 fi 890 891 echo "" >>"${RKHINST_ETC_DIR}/${NEWFILE}" 892 893 test -z "${PREFIX}" && RKHTMPVAR="/" || RKHTMPVAR="${PREFIX}" 894 895 echo "INSTALLDIR=${RKHTMPVAR}" >>"${RKHINST_ETC_DIR}/${NEWFILE}" 896 echo "DBDIR=${RKHINST_DB_DIR}" >>"${RKHINST_ETC_DIR}/${NEWFILE}" 897 echo "SCRIPTDIR=${RKHINST_SCRIPT_DIR}" >>"${RKHINST_ETC_DIR}/${NEWFILE}" 898 echo "TMPDIR=${RKHINST_TMP_DIR}" >>"${RKHINST_ETC_DIR}/${NEWFILE}" 899 900 if [ "$FILE" = "rkhunter.conf" ]; then 901 echo "USER_FILEPROP_FILES_DIRS=${RKHINST_ETC_DIR}/${FILE}" >>"${RKHINST_ETC_DIR}/${NEWFILE}" 902 903 if [ -f "${RKHINST_ETC_DIR}/${FILE}.local" ]; then 904 echo "USER_FILEPROP_FILES_DIRS=${RKHINST_ETC_DIR}/${FILE}.local" >>"${RKHINST_ETC_DIR}/${NEWFILE}" 905 chmod "${RKHINST_MODE_RW}" "${RKHINST_ETC_DIR}/${FILE}.local" 906 fi 907 908 if [ -d "${RKHINST_ETC_DIR}/rkhunter.d" ]; then 909 echo "USER_FILEPROP_FILES_DIRS=${RKHINST_ETC_DIR}/rkhunter.d/*.conf" >>"${RKHINST_ETC_DIR}/${NEWFILE}" 910 fi 911 fi 912 913 case "${RKHINST_LAYOUT}" in 914 RPM|DEB|TGZ|TXZ) 915 ;; 916 *) 917 echo " >>>" 918 echo " >>> PLEASE NOTE: inspect for update changes in \"${RKHINST_ETC_DIR}/${NEWFILE}\"," 919 echo " >>> and apply to either \"${RKHINST_ETC_DIR}/${FILE}\" or your local configuration" 920 echo " >>> file before running Rootkit Hunter." 921 echo " >>>" 922 ;; 923 esac 924 else 925 cp -f "./files/${FILE}" "${RKHINST_ETC_DIR}" >/dev/null 2>&1 926 ERRCODE=$? 927 928 if [ $ERRCODE -eq 0 ]; then 929 echo " Installing ${FILE}: OK" 930 chmod "${RKHINST_MODE_RW}" "${RKHINST_ETC_DIR}/${FILE}" 931 932 if [ -f "${RKHINST_ETC_DIR}/${FILE}.local" ]; then 933 chmod "${RKHINST_MODE_RW}" "${RKHINST_ETC_DIR}/${FILE}.local" 934 fi 935 else 936 echo " Installing ${FILE}: FAILED: Code $ERRCODE" 937 exit 1 938 fi 939 940 echo "" >>"${RKHINST_ETC_DIR}/${FILE}" 941 942 if [ -n "${RPM_BUILD_ROOT}" -a $RPM_USING_ROOT -eq 0 ]; then 943 echo "INSTALLDIR=${PREFIX}" | sed "s|${RPM_BUILD_ROOT}||g" >>"${RKHINST_ETC_DIR}/${FILE}" 944 echo "DBDIR=${RKHINST_DB_DIR}" | sed "s|${RPM_BUILD_ROOT}||g" >>"${RKHINST_ETC_DIR}/${FILE}" 945 echo "SCRIPTDIR=${RKHINST_SCRIPT_DIR}" | sed "s|${RPM_BUILD_ROOT}||g" >>"${RKHINST_ETC_DIR}/${FILE}" 946 echo "TMPDIR=${RKHINST_TMP_DIR}" | sed "s|${RPM_BUILD_ROOT}||g" >>"${RKHINST_ETC_DIR}/${FILE}" 947 echo "USER_FILEPROP_FILES_DIRS=${RKHINST_ETC_DIR}/${FILE}" | sed "s|${RPM_BUILD_ROOT}||g" >>"${RKHINST_ETC_DIR}/${FILE}" 948 elif [ -n "${TGZ_BUILD_ROOT}" -a $TGZ_USING_ROOT -eq 0 ]; then 949 echo "INSTALLDIR=${PREFIX}" | sed "s|${TGZ_BUILD_ROOT}||g" >>"${RKHINST_ETC_DIR}/${FILE}" 950 echo "DBDIR=${RKHINST_DB_DIR}" | sed "s|${TGZ_BUILD_ROOT}||g" >>"${RKHINST_ETC_DIR}/${FILE}" 951 echo "SCRIPTDIR=${RKHINST_SCRIPT_DIR}" | sed "s|${TGZ_BUILD_ROOT}||g" >>"${RKHINST_ETC_DIR}/${FILE}" 952 echo "TMPDIR=${RKHINST_TMP_DIR}" | sed "s|${TGZ_BUILD_ROOT}||g" >>"${RKHINST_ETC_DIR}/${FILE}" 953 echo "USER_FILEPROP_FILES_DIRS=${RKHINST_ETC_DIR}/${FILE}" | sed "s|${TGZ_BUILD_ROOT}||g" >>"${RKHINST_ETC_DIR}/${FILE}" 954 elif [ -n "${TXZ_BUILD_ROOT}" -a $TXZ_USING_ROOT -eq 0 ]; then 955 echo "INSTALLDIR=${PREFIX}" | sed "s|${TXZ_BUILD_ROOT}||g" >>"${RKHINST_ETC_DIR}/${FILE}" 956 echo "DBDIR=${RKHINST_DB_DIR}" | sed "s|${TXZ_BUILD_ROOT}||g" >>"${RKHINST_ETC_DIR}/${FILE}" 957 echo "SCRIPTDIR=${RKHINST_SCRIPT_DIR}" | sed "s|${TXZ_BUILD_ROOT}||g" >>"${RKHINST_ETC_DIR}/${FILE}" 958 echo "TMPDIR=${RKHINST_TMP_DIR}" | sed "s|${TXZ_BUILD_ROOT}||g" >>"${RKHINST_ETC_DIR}/${FILE}" 959 echo "USER_FILEPROP_FILES_DIRS=${RKHINST_ETC_DIR}/${FILE}" | sed "s|${TXZ_BUILD_ROOT}||g" >>"${RKHINST_ETC_DIR}/${FILE}" 960 elif [ -n "${DEB_BUILD_ROOT}" ]; then 961 # Debian builds are handled with a patch during the build process. 962 : 963 else 964 test -z "${PREFIX}" && RKHTMPVAR="/" || RKHTMPVAR="${PREFIX}" 965 966 echo "INSTALLDIR=${RKHTMPVAR}" >>"${RKHINST_ETC_DIR}/${FILE}" 967 echo "DBDIR=${RKHINST_DB_DIR}" >>"${RKHINST_ETC_DIR}/${FILE}" 968 echo "SCRIPTDIR=${RKHINST_SCRIPT_DIR}" >>"${RKHINST_ETC_DIR}/${FILE}" 969 echo "TMPDIR=${RKHINST_TMP_DIR}" >>"${RKHINST_ETC_DIR}/${FILE}" 970 echo "USER_FILEPROP_FILES_DIRS=${RKHINST_ETC_DIR}/${FILE}" >>"${RKHINST_ETC_DIR}/${FILE}" 971 fi 972 fi 973 done 974 975 976 # Strip root from fake root install. 977 if [ -n "${STRIPROOT}" ]; then 978 for FILE in `find "${PREFIX}" -type f`; do 979 STR=`grep "${PREFIX}" "${FILE}"` 980 981 if [ -n "${STR}" ]; then 982 sed -i "s|${STRIPROOT}||g" "${FILE}" >/dev/null 2>&1 983 ERRCODE=$? 984 985 if [ $ERRCODE -eq 0 ]; then 986 echo " Striproot ${FILE}: OK" 987 else 988 echo " Striproot ${FILE}: FAILED: Code $ERRCODE" 989 exit 1 990 fi 991 fi 992 done 993 fi 994 995 996 # Finally copy the passwd/group files to the TMP directory 997 # to avoid warnings when rkhunter is first run. 998 999 case "${RKHINST_LAYOUT}" in 1000 RPM|DEB|TGZ|TXZ) # This is done by a %post section in the spec file / postinst file. 1001 ;; 1002 *) 1003 cp -p /etc/passwd ${RKHINST_TMP_DIR} >/dev/null 2>&1 1004 cp -p /etc/group ${RKHINST_TMP_DIR} >/dev/null 2>&1 1005 ;; 1006 esac 1007 1008 if [ $DOING_UPDT -eq 1 ]; then 1009 echo "Update complete" 1010 else 1011 echo "Installation complete" 1012 fi 1013 1014 return 1015} # End doInstall 1016 1017 1018doRemove() { 1019 RKHINST_DIRS="$RKHINST_ETC_DIR $RKHINST_BIN_DIR $RKHINST_SCRIPT_DIR $RKHINST_DOC_DIR $RKHINST_DB_DIR $RKHINST_TMP_DIR $RKHINST_LANG_DIR $RKHINST_SIG_DIR" 1020 1021 echo "Starting uninstallation" 1022 echo "" 1023 1024 # Check the PREFIX 1025 if [ -z "${PREFIX}" ]; then 1026 : 1027 elif [ -d "${PREFIX}" ]; then 1028 if [ -w "${PREFIX}" ]; then 1029 echo "Checking installation directory \"$PREFIX\": it exists and is writable." 1030 else 1031 echo "Checking installation directory \"$PREFIX\": it exists, but it is not writable. Exiting." 1032 exit 1 1033 fi 1034 elif [ -e "${PREFIX}" ]; then 1035 echo "Checking installation directory \"$PREFIX\": it exists but it is not a directory. Exiting." 1036 exit 1 1037 else 1038 echo "Checking installation directory \"$PREFIX\": it does not exist. Exiting." 1039 exit 1 1040 fi 1041 1042 1043 # Standalone removal involves just deleting the 'files' subdirectory. 1044 if [ "$PREFIX" = "." ]; then 1045 rm -rf ./files >/dev/null 2>&1 1046 ERRCODE=$? 1047 1048 if [ $ERRCODE -eq 0 ]; then 1049 echo "Uninstallation complete" 1050 else 1051 echo "Uninstallation FAILED: Code $ERRCODE" 1052 fi 1053 1054 return 1055 fi 1056 1057 1058 echo "Removing installation files:" 1059 1060 # Man page 1061 for FILE in ${RKHINST_MAN_FILES}; do 1062 if [ -f "${RKHINST_MAN_DIR}/${FILE}" ]; then 1063 rm -f "${RKHINST_MAN_DIR}/${FILE}" >/dev/null 2>&1 1064 ERRCODE=$? 1065 1066 if [ $ERRCODE -eq 0 ]; then 1067 echo " Removing ${FILE}: OK" 1068 else 1069 echo " Removing ${FILE}: FAILED: Code $ERRCODE" 1070 fi 1071 fi 1072 done 1073 1074 # Configuration file 1075 for FILE in ${RKHINST_ETC_FILE}; do 1076 if [ -f "${RKHINST_ETC_DIR}/${FILE}" ]; then 1077 rm -f "${RKHINST_ETC_DIR}/${FILE}" >/dev/null 2>&1 1078 ERRCODE=$? 1079 1080 if [ $ERRCODE -eq 0 ]; then 1081 echo " Removing ${RKHINST_ETC_DIR}/${FILE}: OK" 1082 else 1083 echo " Removing ${RKHINST_ETC_DIR}/${FILE}: FAILED: Code $ERRCODE" 1084 fi 1085 fi 1086 1087 echo "" 1088 echo "Please remove any ${RKHINST_ETC_DIR}/${FILE}.* files manually." 1089 echo "" 1090 1091 if [ -d "${RKHINST_ETC_DIR}/${FILE}.d" ]; then 1092 echo "" 1093 echo "Please remove any ${RKHINST_ETC_DIR}/${FILE}.d directory manually." 1094 echo "" 1095 fi 1096 done 1097 1098 1099 # Helper scripts: remove dir 1100 # Application documents: remove dir 1101 # Databases: remove dir 1102 # Language support: remove dir 1103 1104 echo "Removing installation directories:" 1105 1106 for DIR in ${RKHINST_DIRS}; do 1107 case "${DIR}" in 1108 */${APPNAME}) 1109 if [ -d "${DIR}" ]; then 1110 rm -rf "${DIR}" >/dev/null 2>&1 1111 ERRCODE=$? 1112 1113 if [ $ERRCODE -eq 0 ]; then 1114 echo " Removing ${DIR}: OK" 1115 else 1116 echo " Removing ${DIR}: FAILED: Code $ERRCODE" 1117 fi 1118 fi 1119 ;; 1120 */${APPNAME}-${APPVERSION}) 1121 # Anything involving a specific version number 1122 # needs to remove all old versions as well. 1123 DIR=`dirname "${DIR}"` 1124 1125 for RKHAPPDIR in ${DIR}/${APPNAME}-*; do 1126 if [ -d "${RKHAPPDIR}" ]; then 1127 rm -rf "${RKHAPPDIR}" >/dev/null 2>&1 1128 ERRCODE=$? 1129 1130 if [ $ERRCODE -eq 0 ]; then 1131 echo " Removing ${RKHAPPDIR}: OK" 1132 else 1133 echo " Removing ${RKHAPPDIR}: FAILED: Code $ERRCODE" 1134 fi 1135 fi 1136 done 1137 ;; 1138 */${APPNAME}/*) 1139 DIR=`dirname "${DIR}"` 1140 1141 if [ -d "${DIR}" ]; then 1142 rm -rf "${DIR}" >/dev/null 2>&1 1143 ERRCODE=$? 1144 1145 if [ $ERRCODE -eq 0 ]; then 1146 echo " Removing ${DIR}: OK" 1147 else 1148 echo " Removing ${DIR}: FAILED: Code $ERRCODE" 1149 fi 1150 fi 1151 ;; 1152 esac 1153 done 1154 1155 1156 # Could use patch for removing custom $VARDIR $SHAREDIR $PREFIX here. 1157 1158 if [ "${RKHINST_LAYOUT}" = "oldschool" ]; then 1159 if [ -d "/usr/local/rkhunter" ]; then 1160 echo "" 1161 echo "Note: The directory '/usr/local/rkhunter' still exists." 1162 fi 1163 fi 1164 1165 1166 # Remove any old log files. 1167 rm -f /var/log/rkhunter.log /var/log/rkhunter.log.old >/dev/null 2>&1 1168 1169 echo "" 1170 echo "Finished removing files. Please double-check." 1171 1172 return 1173} # end doRemove 1174 1175 1176# 1177# Start of the installer 1178# 1179 1180if [ $# -eq 0 ]; then 1181 showHelp 1182 exit 1 1183fi 1184 1185while [ $# -ge 1 ]; do 1186 case "$1" in 1187 h | -h | --help | --usage) 1188 showHelp 1189 exit 1 1190 ;; 1191 -e | --examples) 1192 showExamples 1193 exit 1 1194 ;; 1195 -v | --version) 1196 showVersion 1197 exit 1 1198 ;; 1199 -l | --layout) 1200 shift 1 1201 1202 case "$1" in 1203 custom) 1204 shift 1 1205 if [ -n "$1" ]; then 1206 RKHINST_LAYOUT="custom_$1" 1207 else 1208 echo "No custom layout given. Exiting." 1209 exit 1 1210 fi 1211 ;; 1212 default|oldschool|/usr|/usr/local|RPM|DEB|TGZ|TXZ) 1213 RKHINST_LAYOUT="$1" 1214 ;; 1215 *) 1216 echo "Unknown layout given: $1" 1217 exit 1 1218 ;; 1219 esac 1220 ;; 1221 -s | --striproot) 1222 shift 1 1223 1224 if [ -n "$1" ]; then 1225 STRIPROOT="$1" 1226 else 1227 echo "Striproot requested but no directory name given. Exiting." 1228 exit 1 1229 fi 1230 ;; 1231 --show | --remove | --install | --uninstall) 1232 RKHINST_ACTION_SEEN=1 1233 RKHINST_ACTION=`echo "$1" | sed 's/-//g'` 1234 ;; 1235 -o | --overwrite) 1236 OVERWRITE=1 1237 ;; 1238 *) 1239 echo "Unknown option given: $1" 1240 echo "" 1241 1242 showHelp 1243 exit 1 1244 ;; 1245 esac 1246 1247 shift 1248done 1249 1250# We only get here when some installation action was to be taken. 1251if [ $RKHINST_ACTION_SEEN -eq 0 ]; then 1252 echo "No action given. Exiting." 1253else 1254 case "${RKHINST_ACTION}" in 1255 show) 1256 showTemplate $RKHINST_LAYOUT 1257 ;; 1258 remove | uninstall) # Clean active window 1259 selectTemplate $RKHINST_LAYOUT 1260 clear 1261 doRemove 1262 ;; 1263 install) # Clean active window 1264 selectTemplate $RKHINST_LAYOUT 1265 clear 1266 doInstall 1267 ;; 1268 esac 1269fi 1270 1271exit 0 1272