diff options
Diffstat (limited to 'install.sh')
-rwxr-xr-x | install.sh | 181 |
1 files changed, 0 insertions, 181 deletions
diff --git a/install.sh b/install.sh deleted file mode 100755 index e7291cd..0000000 --- a/install.sh +++ /dev/null @@ -1,181 +0,0 @@ -# !/bin/sh - -set -o errexit -#set -o pipefail -#set -o nounset -#set -o xtrace - -BOLD='\033[01m' -UNDL='\033[04m' -GREEN='\033[32m' -RED='\033[31m' -STYLE_END='\033[0m' -command -V gpg >/dev/null 2>&1 && GPG="gpg" || GPG="gpg2" -self_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" -self_fullpath="$self_dir/$0" -emailre=".\+@.\+\\..\+" - -### EDITABLE VARS ### -# HAS_MAILSERVER: 0 is the default, it'll use an external smtp server (your gmail -# account or ISP subscriber mail address for example) and you'll need to put -# the mail password into the MAIL_PW variable, as well as the smtp server and -# its port (SMTP and SMTP_P var respectively). Change to 1 if you have a local mail -# server. -# TODO: implement the sed trickery to disable and enable portions of perl code -HAS_MAILSERVER=0 -YOUR_EMAIL=0 -GPG_XLONG='0x0000000000000000' # running 'gpg -k --keyid-format 0xlong yourmail@example.com' will -# help you there. -SMTP=0 -SMTP_P=465 -MAIL_PW=0 -SCRIPT="$self_dir/gpigeon.cgi" -GPG_DATA_DIR='/usr/share/www-data' -SCRIPT_USER='www-data' -SCRIPT_GROUP="$SCRIPT_USER" -ROOT_DIR='/var/www/gpigeon' -CGI_DIR="$ROOT_DIR/cgi-bin" -LINKS_DIR="$CGI_DIR/l" -APP_PW=0 -### EDITABLE VARS ### - -self_abort() { - printf "\n${BOLD}${RED}Aborting...${STYLE_END}\n" - exit 1 -} - -list_setupvars() { - printf "\nThis is what has been configured so far:" - printf "\nGpigeon root directory: %s" "$ROOT_DIR" - printf "\nCGI script directory: %s" "$CGI_DIR" - printf "\nGpigeon ownership: %s:%s" "$SCRIPT_USER" "$SCRIPT_GROUP" - printf "\nGpigeon links folder: %s" "$LINKS_DIR" - printf "\nGpigeon GPG homedir: %s" "$GPG_DATA_DIR" - printf "\nGPG public key id: %s" "$GPG_XLONG" - printf "\nYou have a mailserver installed: " - if [ $HAS_MAILSERVER -eq 0 ]; then - printf "${RED}no${STYLE_END}\nMail address: %s\nMail password: %s\nExternal SMTP server and port: %s:%s\n" "$YOUR_EMAIL" "$MAIL_PW" "$SMTP" "$SMTP_P" - else - printf "${GREEN}yes${STYLE_END}\n" - fi - printf "App password: %s\n" "$APP_PW" - printf "\n" - - printf "\nPress any key to continue (CTRL+C to abort)..." - read -} - -__check_setupvars() { - if ! $GPG -k "$GPG_HEX" 2>/dev/null >/dev/null; then - printf "No GPG key pair are related to your email. Create one and launch - this script again." - self_abort - fi - - if ! id $SCRIPT_USER; then - printf "\nThe user ${BOLD}$SCRIPT_USER${STYLE_END} doesn't exist. Edit - ${UNDL}$self_fullpath${STYLE_END} and search - for the ${BOLD}SCRIPT_USER${STYLE_END} variable.\n\n" - self_abort - fi - - if ! getent group $SCRIPT_GROUP; then - echo "The ${BOLD}$SCRIPT_GROUP${END_STYLE} group doesn't exist. Edit $self_fullpath then modify - the SCRIPT_GROUP variable value." - self_abort - fi - - if [ "$APP_PW" -eq "0" ] || [ -z $APP_PW ] ; then - echo "Please edit $0 with a text editor ($EDITOR I guess?) and change the - APP_PW variable." - self_abort - else - PW_LENGTH=$(echo $APP_PW | wc -L) - if [ $PW_LENGTH -le 8 ]; then - echo "Your password is too short, make it lengthier than 8 characters." - self_abort - fi - fi - - # prevent obscure errors with q{$APP_PW} in perl script - APP_PW_SANE="$(echo $APP_PW | sed s/{/\\\\{/g | sed s/}/\\\\}/g)" - - # password checksum'd so no plaintext - HASHED_PASSWORD=$(printf "%s" "$APP_PW" | sha256sum | cut -d' ' -f1) - - if ! echo "$YOUR_EMAIL" | grep "$emailre" >/dev/null; then - printf "\nYour email address is not a valid one. Edit $self_fullpath and - modify the value of the YOUR_EMAIL variable." - fi -} - -setup_gpigeon() { - apt install perl gcc make cpanminus || self_abort - cpanm Digest::SHA Email::Valid String::Random HTML::Entities CGI CGI::Carp Net::SMTP Net::SMTPS GPG || ( printf "\nInstallation of dependencies failed\n" && self_abort ) - - cp $self_dir/gpigeon-template.cgi $SCRIPT - sed "s/password_hash_goes_here/$HASHED_PASSWORD/g" -i $SCRIPT - sed "s/your_mail_address_goes_here/$YOUR_EMAIL/g" -i $SCRIPT - sed "s/your_mail_address_password_goes_here/$YOUR_EMAIL_PW/g" -i $SCRIPT - sed "s/smtp_domain_goes_here/$SMTP/g" -i $SCRIPT - sed "s/smtp_port_goes_here/$SMTP_P/g" -i $SCRIPT - sed "s/gpgid_goes_here/$gpgidlong/g" -i $SCRIPT - if [ $HAS_MAILSERVER -eq 1 ]; then - sed "s/HAS_MAILSERVER=0/HAS_MAILSERVER=1/g" $SCRIPT - cpamn Mail::Sendmail || ( printf "\nInstallation of Mail::Sendmail failed\n" && self_abort ) - fi - - printf "\nCreating static files directory at $ROOT_DIR" - mkdir -p "$ROOT_DIR" || self_abort - printf "\nCopying static files to $ROOT_DIR ..." - cp -r $self_dir/{merci/,index.html,gpigeon.css,favicon.ico} $ROOT_DIR || self_abort - - printf "\n\nCreating script and links directory at $CGI_DIR ..." - mkdir -p {"$CGI_DIR","$LINKS_DIR"} || self_abort - - printf "\nCopying personalized gpigeon.cgi script to $CGI_DIR ..." - cp $SCRIPT $CGI_DIR/ || self_abort - - printf "\nSetting ownership as $SCRIPT_USER:$SCRIPT_GROUP for directory $CGI_DIR ..." - chown $SCRIPT_GROUP:$SCRIPT_USER $CGI_DIR || self_abort - - printf "\nSetting ownership as $SCRIPT_USER:$SCRIPT_GROUP for static directory $ROOT_DIR ..." - chown $SCRIPT_GROUP:$SCRIPT_USER $ROOT_DIR || self_abort - - printf "\nSetting up the GPG directory for the script ..." - if [[ -z $GPG_DATA_DIR ]]; then - mkdir -p /usr/share/www-data/.gnupg - cp -r ~/.gnupg /usr/share/www-data/ - chown $SCRIPT_USER:$SCRIPT_GROUP /usr/share/www-data/.gnupg - chmod 600 /usr/share/www-data/.gnupg - else - mkdir -p $GPG_DATA_DIR - cp -r ~/.gnupg /usr/share/www-data/ - chown $SCRIPT_USER:$SCRIPT_GROUP $GPG_DATA_DIR - chmod 600 $GPG_DATA_DIR - fi - printf "${BOLD}${GREEN}Congrats, we are done!${END_STYLE} You should now manually configure your web server to execute the CGI scripts in the $CGI_DIR folder. Manuals and - official websites for these softwares should help you.\n\n" - exit 0 -} - -_usage_(){ - printf "\n -c checks variables" - printf "\n -l lists variables" - printf "\n -y checks variables and attempts to install gpigeon" - printf "\n -s install gpigeon" - printf "\n -h print this help" - printf "\n\n" -} - -while getopts "clysh" o; do - case "${o}" in - c) __check_setupvars && exit 0;; - l) list_setupvars && exit 0;; - y) __check_vars && setup_gpigeon;; - s) setup_gpigeon;; - h) _usage_;; - #i) interactive_setup;; - *) __check_vars && list_setupvars && setup_gpigeon - esac -done |