diff --git a/.gitignore b/.gitignore index 1075bf5..9907910 100644 --- a/.gitignore +++ b/.gitignore @@ -13,5 +13,5 @@ history.* *~ .install/errors .install/log -shell/init.sh.old +.install/.OS .profile diff --git a/.install/1-install_requirements.sh b/.install/1-install_requirements.sh index 3cc5068..bb13f9b 100755 --- a/.install/1-install_requirements.sh +++ b/.install/1-install_requirements.sh @@ -2,50 +2,99 @@ MY_PATH="`dirname \"$0\"`" # relative MY_PATH="`( cd \"$MY_PATH\" && pwd )`" # absolutized and normalized -isARM=$(uname -a | grep arm) + +OS=$(head -n1 $MY_PATH/.OS) +isARM=$(cat $MY_PATH/.OS | grep YES) +unset err # Basics sudo apt update -sudo apt install curl jq zip unzip htop tree ntpdate gnupg ssmtp mpack imagemagick qrencode bc libttspico-utils libttspico0 libttspico-data -y +echo -e "${c_yellow}Mise à jours des prérequis...$c_" +sudo apt install curl jq zip unzip htop tree ntpdate gnupg ssmtp mpack imagemagick qrencode bc -y # Silkaj + Duniterpy -libsodium=$(sudo apt search libsodium | grep -v "header" | grep -v "debug symbols" | grep "Network communication" -B1 | head -n1 | awk -F '/' '{ print $1 }') -sudo apt install python3-pip $libsodium -y -pip3 install duniterpy -pip3 install silkaj --user +silkaj() { + echo -e "${c_yellow}Installation de Silkaj...$c_" + libsodium=$(sudo apt search libsodium 2>/dev/null | grep -v -E "header|debug symbols" | grep "Network communication" -B1 | head -n1 | awk -F '/' '{ print $1 }') + [[ $libsodium =~ " " ]] && libsodium=$(echo $libsodium | awk '{ print $2 }') + sudo apt install python3-pip $libsodium -y || err+="Install python3 and $libsodium" + pip3 install duniterpy || err+="Install duniterpy" + pip3 install silkaj --user || err+="Install Silkaj" +} # Install IPFS -[[ -f /usr/local/bin/ipfs ]] && sudo service ipfs stop -if [[ -z $isARM ]]; then - wget https://dist.ipfs.io/ipfs-update/v1.5.2/ipfs-update_v1.5.2_linux-amd64.tar.gz -O $MY_PATH/ipfs-update.tar.gz -else - wget https://dist.ipfs.io/ipfs-update/v1.5.2/ipfs-update_v1.5.2_linux-arm.tar.gz -O $MY_PATH/ipfs-update.tar.gz -fi +ipfs() { + echo -e "${c_yellow}Installation d'IPFS...$c_" + [[ -f /usr/local/bin/ipfs ]] && sudo service ipfs stop + if [[ $isARM ]]; then + wget https://dist.ipfs.io/ipfs-update/v1.5.2/ipfs-update_v1.5.2_linux-arm.tar.gz -O $MY_PATH/ipfs-update.tar.gz || err+="Download ipfs-update" + else + wget https://dist.ipfs.io/ipfs-update/v1.5.2/ipfs-update_v1.5.2_linux-amd64.tar.gz -O $MY_PATH/ipfs-update.tar.gz || err+="Download ipfs-update" + fi -echo "INSTALL ipfs-update" -sudo tar -xvzf $MY_PATH/ipfs-update.tar.gz -C /usr/src/ -rm $MY_PATH/ipfs-update.tar.gz -cd /usr/src/ipfs-update/ -sudo ./install.sh -cd $MY_PATH + echo "INSTALL ipfs-update" + sudo tar -xvzf $MY_PATH/ipfs-update.tar.gz -C /usr/src/ || err+="Untar ipfs-update" + rm $MY_PATH/ipfs-update.tar.gz + cd /usr/src/ipfs-update/ + sudo ./install.sh || err+="Install ipfs-update" + cd $MY_PATH -echo "INSTALL latest ipfs" -sudo ipfs-update install latest + echo "INSTALL latest ipfs" + sudo ipfs-update install latest || err+="Install IPFS" -echo "CREATE SYSTEMD ipfs SERVICE" -[[ -f /etc/systemd/system/ipfs.service ]] && sudo rm /etc/systemd/system/ipfs.service -sudo cp -f $MY_PATH/templates/ipfs.service /etc/systemd/system/ -sudo sed -i "s/_USER/$USER/g" /etc/systemd/system/ipfs.service - -sudo systemctl daemon-reload -sudo systemctl enable ipfs + echo "CREATE SYSTEMD ipfs SERVICE" + [[ -f /etc/systemd/system/ipfs.service ]] && sudo rm /etc/systemd/system/ipfs.service + sudo cp -f $MY_PATH/templates/1/ipfs.service /etc/systemd/system/ + sudo sed -i "s/_USER/$USER/g" /etc/systemd/system/ipfs.service + sudo systemctl daemon-reload || err+="Restart IPFS" + sudo systemctl enable ipfs || err+="Enable IPFS daemon" +} # Install gammu -sudo apt install ppp screen git minicom gammu -y -sleep 1 -sudo apt install gammu-smsd -y || sudo apt install -f +gammu() { + echo -e "${c_yellow}Installation de gammu...$c_" + sudo apt install ppp screen git minicom gammu -y || err+="Install gammu requirements" + sleep 1 + sudo apt install gammu-smsd -y || sudo apt install -f || err+="Install gammu" -sudo usermod -aG gammu $USER + sudo usermod -aG gammu $USER +} -exit 0 +# Install PHP + MySQL +php() { + echo -e "${c_yellow}Installation de PHP et MySQL$c_" + if [[ $OS == "buster" ]]; then + sudo apt -y install software-properties-common nginx php php-common php-fpm php-gettext php-gd php-mysql php-curl php-imap php-mbstring php-xml php-cli mariadb-server || err+="Install PHP and MySQL" + elif [[ $OS == "stretch" ]]; then + sudo apt -y install lsb-release apt-transport-https ca-certificates || err+="Install apt-transport-https" + sudo wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg || err+="Download PHP key" + echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/php7.3.list + sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8 || err+="Download PHP key" + sudo apt update + sudo apt -y install software-properties-common dirmngr nginx php7.3 php7.3-common php7.3-gettext php7.3-fpm php7.3-gd php7.3-mysql php7.3-curl php7.3-imap php7.3-mbstring php7.3-xml php7.3-cli mariadb-server || err+="Install PHP and MySQL" + else + echo "${c_red}Votre système n'est pas pris en charge par ce script d'installation.$c_" + exit 1 + fi + + isLocalhostUsers=$(sudo mysql -e "select user from mysql.user;" | grep "localhost") + isTestDB=$(sudo mysql -e "show databases" | grep "test") + [[ -n $isLocalhostUsers ]] && sudo mysql -e "DROP USER ''@'localhost'; DROP USER ''@'$(hostname)'" + [[ -n $isTestDB ]] && sudo mysql -e "DROP DATABASE test" + sudo mysql -e "FLUSH PRIVILEGES" +} + +# Read arguments +for i in $@; do + echo -e "${c_yellow}Installation de $c_light$i$c_" + $i +done + +if [[ $err ]]; then + echo -e "${c_red}Installation des prérequis incomplète: $err$c_" + exit 1 +else + echo -e "${c_green}Les prérequis ont été correctement installés$c_" + exit 0 +fi diff --git a/.install/2-configure_ipfs_layer.sh b/.install/2-configure_ipfs_layer.sh index b1b3981..0839556 100755 --- a/.install/2-configure_ipfs_layer.sh +++ b/.install/2-configure_ipfs_layer.sh @@ -8,7 +8,7 @@ MY_PATH="`dirname \"$0\"`" # relative MY_PATH="`( cd \"$MY_PATH\" && pwd )`" # absolutized and normalized stamp=$(date +%s) -templates="$MY_PATH/templates" +templates="$MY_PATH/templates/2" ####################################### # CONFIGURE IPFS for G1sms+ Pi NODES diff --git a/.install/3-install_copylaradio.sh b/.install/3-install_copylaradio.sh index d12e12e..e45c776 100755 --- a/.install/3-install_copylaradio.sh +++ b/.install/3-install_copylaradio.sh @@ -2,43 +2,49 @@ MY_PATH="`dirname \"$0\"`" # relative MY_PATH="`( cd \"$MY_PATH\" && pwd )`" # absolutized and normalized -templates="$MY_PATH/templates" +templates="$MY_PATH/templates/3" -isARM=$(uname -a | grep arm) +isARM=$(cat $MY_PATH/.OS | grep YES) ################################## ## INSTALL TOOLS ######## YOUTUBE-DL ########## -sudo wget https://yt-dl.org/downloads/latest/youtube-dl -O /usr/local/bin/youtube-dl +sudo wget https://yt-dl.org/downloads/latest/youtube-dl -O /usr/local/bin/youtube-dl || err=1 sudo chmod a+rx /usr/local/bin/youtube-dl -sudo apt install libid3-tools mpd mpc lame -y + +## TODO FOR DEBIAN STRETCH + +wget -q https://ftp-master.debian.org/keys/release-10.asc -O- | sudo apt-key add - +echo "deb http://deb.debian.org/debian buster non-free" | sudo tee -a /etc/apt/sources.list +sudo apt update +sudo apt install libid3-tools mpd mpc lame -y libttspico-utils -y || err=1 ## CONFIG MPD sudo cp -f $templates/mpd.conf /etc/mpd.conf -sudo sed -i "s/_USER/$USER/g" /etc/mpd.conf +sudo sed -i "s/_USER/$USER/g" /etc/mpd.conf || err=1 sudo chown -R $USER /var/lib/mpd/ /var/run/mpd /run/mpd /var/log/mpd -sudo service mpd restart +sudo service mpd restart || err=1 -sudo apt-get install nginx php-curl php-sqlite3 php-gd php-json php-xml php-mbstring php-fpm sqlite -y -sudo apt-get install lame sox libsox-fmt-mp3 eyed3 python-chardet imagemagick curl -y #libav-tools -sudo apt-get install ca-certificates git-core binutils rsync alsa-utils bc libid3-tools espeak mpg321 fuse atomicparsley -y #libttspico-utils +sudo apt-get install nginx php-curl php-sqlite3 php-gd php-json php-xml php-mbstring php-fpm sqlite -y || err=1 +sudo apt-get install lame sox libsox-fmt-mp3 eyed3 python-chardet imagemagick curl -y #libav-tools || err=1 +sudo apt-get install ca-certificates git-core binutils rsync alsa-utils bc libid3-tools espeak mpg321 fuse atomicparsley -y || err=1 wget http://launchpadlibrarian.net/339874908/libav-tools_3.3.4-2_all.deb -O $MY_PATH/libav-tools.deb wget http://ftp.fr.debian.org/debian/pool/non-free/s/svox/libttspico-data_1.0+git20130326-3_all.deb -O $MY_PATH/libttspico-data.deb -if [[ -z $isARM ]]; then - wget http://ftp.fr.debian.org/debian/pool/non-free/s/svox/libttspico0_1.0+git20130326-5_amd64.deb -O $MY_PATH/libttspico0.deb - wget http://ftp.fr.debian.org/debian/pool/non-free/s/svox/libttspico-utils_1.0+git20130326-9_amd64.deb -O $MY_PATH/libttspico-utils.deb -else +if [[ $isARM ]]; then wget http://ftp.fr.debian.org/debian/pool/non-free/s/svox/libttspico0_1.0+git20130326-3_armhf.deb -O $MY_PATH/libttspico0.deb wget http://ftp.fr.debian.org/debian/pool/non-free/s/svox/libttspico-utils_1.0+git20130326-3_armhf.deb -O $MY_PATH/libttspico-utils.deb +else + wget http://ftp.fr.debian.org/debian/pool/non-free/s/svox/libttspico0_1.0+git20130326-5_amd64.deb -O $MY_PATH/libttspico0.deb + wget http://ftp.fr.debian.org/debian/pool/non-free/s/svox/libttspico-utils_1.0+git20130326-9_amd64.deb -O $MY_PATH/libttspico-utils.deb fi -sudo dpkg -i $MY_PATH/libttspico-data.deb -sudo dpkg -i $MY_PATH/libttspico0.deb -sudo dpkg -i $MY_PATH/libttspico-utils.deb -sudo dpkg -i $MY_PATH/libav-tools.deb || sudo apt --fix-broken install -y +sudo dpkg -i $MY_PATH/libttspico-data.deb || err=1 +sudo dpkg -i $MY_PATH/libttspico0.deb || err=1 +sudo dpkg -i $MY_PATH/libttspico-utils.deb || err=1 +sudo dpkg -i $MY_PATH/libav-tools.deb || sudo apt --fix-broken install -y || err=1 rm $MY_PATH/libttspico-data.deb $MY_PATH/libttspico0.deb $MY_PATH/libttspico-utils.deb $MY_PATH/libav-tools.deb @@ -46,7 +52,7 @@ rm $MY_PATH/libttspico-data.deb $MY_PATH/libttspico0.deb $MY_PATH/libttspico-uti sudo cp -f $templates/default /etc/nginx/sites-available/ sudo sed -i "s/_USER/$USER/g" /etc/nginx/sites-available/default -sudo systemctl restart nginx +sudo systemctl restart nginx || err=1 ################################# ## Get _CopyLaRadio distrib @@ -61,4 +67,11 @@ sudo systemctl restart nginx #sudo chmod 777 /home/$USER/_CopyLaRadio/www/rompr/albumart #sudo chmod 777 /home/$USER/_CopyLaRadio/www/rompr/prefs -exit 0 +if [[ $err ]]; then + echo -e "${c_red}Installation de copylaradio incomplète$c_" + exit 1 +else + echo -e "${c_green}CopyLaRadio a été installé avec succès$c_" + exit 0 +fi + diff --git a/.install/4-install_playsms.sh b/.install/4-install_playsms.sh deleted file mode 100755 index 377fd2d..0000000 --- a/.install/4-install_playsms.sh +++ /dev/null @@ -1,157 +0,0 @@ -#!/bin/bash - -MY_PATH="`dirname \"$0\"`" # relative -MY_PATH="`( cd \"$MY_PATH\" && pwd )`" # absolutized and normalized - -[[ -f $MY_PATH/../.profile ]] && source $MY_PATH/../.profile -unset err -pwdDB=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 42 | head -n 1) - -args=$@ -[[ $args =~ noask ]] && noask=o && askSSL=o - -[[ ! $PSMS_DOMAIN ]] && echo -e "${c_yellow}Choisissez un nom de domain pour playsms: $c_" && read PSMS_DOMAIN - -sudo apt -y update -sudo apt -y install unzip zip -if [[ $(grep buster /etc/os-release) ]]; then - sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xF1656F24C74CD1D8 - sudo add-apt-repository 'deb [arch=amd64] http://mariadb.mirror.liquidtelecom.com/repo/10.4/debian buster main' - sudo apt -y update - sudo apt -y install software-properties-common nginx php php-common php-fpm php-gettext php-gd php-mysql php-curl php-imap php-mbstring php-xml php-cli mariadb-server -elif [[ $(grep stretch /etc/os-release) ]]; then - sudo apt -y install lsb-release apt-transport-https ca-certificates - sudo wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg - echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/php7.3.list - sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8 - echo -e "deb [arch=amd64,i386,ppc64el] http://sfo1.mirrors.digitalocean.com/mariadb/repo/10.4/debian stretch main\ndeb-src http://sfo1.mirrors.digitalocean.com/mariadb/repo/10.4/debian stretch main" | sudo tee /etc/apt/sources.list.d/mariadb.list - sudo apt -y update - sudo apt -y install software-properties-common dirmngr nginx php7.3 php7.3-common php7.3-gettext php7.3-fpm php7.3-gd php7.3-mysql php7.3-curl php7.3-imap php7.3-mbstring php7.3-xml php7.3-cli mariadb-server -else - echo "${c_red}Votre système n'est pas pris en charge par ce script d'installation.$c_" - exit 1 -fi - -## Create database - -if [[ ! $(sudo mysql -e "show databases;" | grep playsms) ]]; then - sudo mysql -e "CREATE DATABASE playsms" - sudo mysql -e "CREATE USER 'playsms'@'localhost' IDENTIFIED BY '$pwdDB';" - sudo mysql -e "GRANT ALL PRIVILEGES ON playsms.* TO 'playsms'@'localhost';" - sudo mysql -e "FLUSH PRIVILEGES;" -else - sudo mysql -e "ALTER USER 'playsms'@'localhost' IDENTIFIED BY '$pwdDB';" -fi - -## Clone repo playSMS -[[ -d $MY_PATH/playsms ]] && sudo rm -rf $MY_PATH/playsms -git clone https://github.com/antonraharja/playSMS.git $MY_PATH/playsms - -cp $MY_PATH/templates/install-playsms.conf $MY_PATH/playsms/install.conf -sed -i "s/_pwdDB/$pwdDB/g" $MY_PATH/playsms/install.conf - -[[ -d /var/www/playsms ]] && sudo rm -rf /var/www/playsms -sudo chmod u+x $MY_PATH/playsms/install-playsms.sh -cd $MY_PATH/playsms -sed -i "s/read /confirm=y; #read /g" install-playsms.sh -sudo ./install-playsms.sh -sudo sed -i "/ishttps/d" /var/www/playsms/config.php -sudo sed -i "/http or https*/a \$core_config['ishttps'] = true;" /var/www/playsms/config.php -[[ -d $MY_PATH/playsms ]] && sudo rm -rf $MY_PATH/playsms -cd $MY_PATH - -## Start playsmsd on boot -sudo /usr/local/bin/playsmsd start - -if [[ -f /etc/rc.local ]]; then - [[ ! $(grep playsmsd /etc/rc.local) ]] && sudo sed -i '/^exit 0.*/i /usr/local/bin/playsmsd start' /etc/rc.local -else - echo "/usr/local/bin/playsmsd start" | sudo tee /etc/rc.local -fi - -## Tests -if [[ $(sudo playsmsd status) =~ "is running" ]]; then - echo -e "${c_green}playSMS a été installé correctement et le daemon est démarré =)$c_" -else - echo -e "${c_red}Une erreur est survenu$c_" - err=1 -fi - -## Config NGINX - -[[ ! -d /etc/nginx/def_conf ]] && sudo mkdir /etc/nginx/def_conf/ -sudo cp $MY_PATH/templates/proxypass.conf /etc/nginx/def_conf/ -sudo cp $MY_PATH/templates/playsms.conf /etc/nginx/conf.d/ -sudo sed -i "s/_PSMS_DOMAIN/$PSMS_DOMAIN/" /etc/nginx/conf.d/playsms.conf - -## Active SSL - -manageSSL() { - - local action=$1 - [[ ! $action =~ ^(on|off|certif)$ ]] && echo "Veuillez choisir ssl, nonssl ou certif pour créer un certificat ssl" && exit 1 - - install_certbot(){ - sudo apt update - if [[ $(grep -E 'stretch|buster' /etc/os-release) ]]; then - sudo apt install certbot python-certbot-nginx -y - elif [[ $(grep -E '16.|17.|18.|19.' /etc/os-release) ]]; then - sudo apt install software-properties-common - sudo add-apt-repository universe - sudo add-apt-repository ppa:certbot/certbot - sudo apt update - sudo apt install certbot python-certbot-nginx - else - echo "OS non supporté pour certbot." && exit 1 - fi - } - - create_certificate() { - sudo certbot --nginx certonly --non-interactive --agree-tos -m $USER@$PSMS_DOMAIN -d $PSMS_DOMAIN && echo "Le certificat de $PSMS_DOMAIN a bien été déployé" || echo "Une erreur s'est produite lors de la création du certificat SSL" - - ## Cronification - [[ ! -e /opt/scripts ]] && sudo mkdir /opt/scripts - sudo cp $MY_PATH/templates/ssl_renew.sh /opt/scripts/ - [[ -z $(sudo crontab -l | grep "/opt/scripts/ssl_renew.sh") ]] && (sudo crontab -l ; sudo echo "12 2 * * 1 /opt/scripts/ssl_renew.sh") | sudo crontab -u root - - } - - - case $action in - on) - sudo sed -i 's/ #if/ if/' /etc/nginx/conf.d/playsms.conf - - sudo sed -i "s/listen 443;/listen 443 ssl;/" /etc/nginx/conf.d/playsms.conf - [[ ! -d /etc/nginx/includes ]] && sudo mkdir /etc/nginx/includes - sudo cp $MY_PATH/templates/ssl.conf /etc/nginx/includes/ - sudo sed -i "/Content-Security-Policy/a \ include includes/ssl.conf;\n ssl_certificate /etc/letsencrypt/live/$PSMS_DOMAIN/fullchain.pem;\n ssl_certificate_key /etc/letsencrypt/live/$PSMS_DOMAIN/privkey.pem;" /etc/nginx/conf.d/playsms.conf - ;; - - off) - sudo sed -i 's/ if/ #if/' /etc/nginx/conf.d/playsms.conf - sudo sed -i '/ssl.conf;/d' /etc/nginx/conf.d/playsms.conf - sudo sed -i '/ssl_certificate/d' /etc/nginx/conf.d/playsms.conf - ;; - certif) - [[ -z $(which certbot) ]] && install_certbot - [[ -n /etc/letsencrypt/live/$PSMS_DOMAIN/fullchain.pem ]] && create_certificate - ;; - - esac -} - -echo -e "${c_yellow}playSMS ne fonctionne pas sans certifcat SSL.$c_" -[[ ! $noask ]] && printf "${c_yellow}Voulez-vous installer et activer un certificat SSL maintenant pour $PSMS_DOMAIN ? (o/n) $c_" && read askSSL -if [[ $askSSL =~ ^(o|y|yes|oui|Y|O|YES)$ ]]; then - manageSSL certif - if sudo test -f /etc/letsencrypt/live/$PSMS_DOMAIN/fullchain.pem; then manageSSL on; else manageSSL off && echo "Une erreur s'est produite, basculement vers le mode non SSL"; fi - http=https -else - manageSSL off - http=http -fi - -sudo service nginx restart - -[[ ! $err ]] && echo -e "${c_green}Félicitation ! playSMS est accessible via l'URL $http://$PSMS_DOMAIN" || echo -e "${c_red}Installation incomplète$c_" - -exit 0 diff --git a/.install/4a-install_kalkun.sh b/.install/4a-install_kalkun.sh new file mode 100755 index 0000000..15f4872 --- /dev/null +++ b/.install/4a-install_kalkun.sh @@ -0,0 +1,113 @@ +#!/bin/bash + +MY_PATH="`dirname \"$0\"`" # relative +MY_PATH="`( cd \"$MY_PATH\" && pwd )`" # absolutized and normalized + +[[ -f $MY_PATH/../.profile ]] && source $MY_PATH/../.profile +unset err + +args=$@ +[[ $args =~ noask ]] && noask=o && askSSL=o + +IP=$(ifconfig | grep "inet " | grep -v "127.0.0.1" | awk '{ print $2 }') +[[ ! $KSMS_DOMAIN ]] && echo -e "${c_yellow}Choisissez un nom de domaine pour KALKUN (Sinon $IP sera choisi): $c_" && read KSMS_DOMAIN +[[ ! $KSMS_DOMAIN ]] && KSMS_DOMAIN=$IP && askSSL=n && noask=o + +DOMAIN=$KSMS_DOMAIN + +## Install PHP + MySQL +$MY_PATH/1-install_requirements.sh php + +## Create database +if [[ $(sudo mysql -e "select * from mysql.user;" | grep gammu) ]]; then + pwdDB=$(cat /etc/gammu-smsdrc | grep "password" | grep -v "# " | awk '{ print $3 }') +else + pwdDB=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 42 | head -n 1) + sudo mysql -e "CREATE USER 'gammu'@'localhost' IDENTIFIED BY '$pwdDB';" +fi + +if [[ ! $(sudo mysql -e "show databases;" | grep gammu) ]]; then + echo -e "${c_yellow}Création de la base de donnée...$c_" + sudo mysql -e "CREATE DATABASE gammu" + sudo mysql -e "GRANT ALL PRIVILEGES ON gammu.* TO 'gammu'@'localhost';" + sudo mysql -e "FLUSH PRIVILEGES;" +fi +if [[ -z $(sudo mysql gammu -e "SHOW TABLES LIKE 'outbox';") ]]; then + echo -e "${c_yellow}Importation du dump gammu...$c_" + sudo mysql gammu < $MY_PATH/templates/4a/mysql.sql || err+="Import dump MySQL" +fi +if [[ -z $(sudo mysql gammu -e "SHOW TABLES LIKE 'kalkun';") ]]; then + echo -e "${c_yellow}Importation du dump kalkun...$c_" + sudo mysql gammu < $MY_PATH/templates/4a/kalkun.sql || err+="Import dump Kalkun" +fi + +## Clone repo KALKUN + +[[ -d $MY_PATH/kalkun ]] && sudo rm -rf $MY_PATH/kalkun +echo -e "${c_yellow}Clonage du dépot de Kalkun...$c_" +git clone https://github.com/back2arie/Kalkun.git $MY_PATH/kalkun + +cp $MY_PATH/templates/4a/database.php $MY_PATH/kalkun/application/config/ +cp $MY_PATH/templates/4a/daemon.sh $MY_PATH/templates/4a/daemon.php $MY_PATH/kalkun/scripts +sed -i "s/_PWD/$pwdDB/g" $MY_PATH/kalkun/application/config/database.php || err+="Sed database password" +sed -i "s/_DOMAIN/$DOMAIN/g" $MY_PATH/templates/4a/daemon.php || err+="Sed domaine to daemon.php" + +# touch $MY_PATH/kalkun/install + +## Place le dossier kalkun dans /var/www/ +[[ -d /var/www/kalkun ]] && sudo rm -rf /var/www/kalkun +sudo mv $MY_PATH/kalkun /var/www/ || err+="Move kalkun to /var/www" +sudo chown -R www-data:www-data /var/www/kalkun || err+="Chown www-data to kalkun" +sudo chmod u+x /var/www/kalkun/scripts/* + +## Add daemon launcher in sms_received.sh +[[ ! $(grep "Execute Kalkun daemon" $MY_PATH/../sms_received.sh) ]] && sed -i "/^export YOU/i # Execute Kalkun daemon\n/var/www/kalkun/scripts/daemon.sh &\n" $MY_PATH/../sms_received.sh + +## Active gammu in MySQL mode +if [[ $(grep "service = files" /etc/gammu-smsdrc) ]]; then + echo -e "${c_yellow}Activation de gammu-smsd en mode MySQL...$c_" + sudo sed -i "/^service = files/a service = sql\ndriver = native_mysql\nhost = localhost\nuser = gammu\npassword = $pwdDB\ndatabase = gammu" /etc/gammu-smsdrc || err+="Sed gammu-smsd" + sudo sed -i "/service = files/d" /etc/gammu-smsdrc || err+="Sed delete in gammu-smsd" + $MY_PATH/../debug/gammu-restart.sh || err+="Restart gammu" +fi + +## Config NGINX + +echo -e "${c_yellow}Configuration de Nginx...$c_" +[[ ! -d /etc/nginx/def_conf ]] && sudo mkdir /etc/nginx/def_conf/ +sudo cp $MY_PATH/templates/rproxy/proxypass.conf /etc/nginx/def_conf/ || err+="Copy proxypass.conf" +sudo cp $MY_PATH/templates/4a/kalkun.conf /etc/nginx/conf.d/ || err+="Copy kalkun.conf" +sudo sed -i "s/_DOMAIN/$DOMAIN/g" /etc/nginx/conf.d/kalkun.conf || err+="Sed domain in kalkun.conf" + +## Active SSL + +[[ ! $noask ]] && printf "${c_yellow}Voulez-vous installer et activer un certificat SSL maintenant pour $DOMAIN ? (o/n) $c_" && read askSSL +if [[ $askSSL =~ ^(o|y|yes|oui|Y|O|YES)$ ]]; then + if sudo test ! -f /etc/letsencrypt/live/$DOMAIN/fullchain.pem; then + $MY_PATH/ssl.sh certif APP=kalkun DOMAIN=$DOMAIN || err+="Create SSL certification" + fi + if sudo test -f /etc/letsencrypt/live/$DOMAIN/fullchain.pem; then + $MY_PATH/ssl.sh on APP=kalkun DOMAIN=$DOMAIN || err+="Enable SSL certification" + else + echo -e "${c_red}Une erreur s'est produite, basculement vers le mode non SSL$c_" + $MY_PATH/ssl.sh off APP=kalkun DOMAIN=$DOMAIN || err+="Disable SSL certification" + fi + http=https + sudo sed -i "s/http/https/g" /var/www/kalkun/scripts/daemon.php || err+="Sed http to https in daemon.php" +else + $MY_PATH/ssl.sh off APP=kalkun DOMAIN=$DOMAIN || err+="Disable SSL certification" + http=http +fi + +echo -e "${c_yellow}Redémarrage de Nginx...$c_" +sudo service nginx restart || err+="Restart Nginx" +echo -e "${c_yellow}Redémarrage de gammu-smsd...$c_" +$MY_PATH/../debug/gammu-restart.sh || err+="Restart gammu" + +if [[ $err ]]; then + echo -e "${c_red}Installation incomplète: $err$c_" + exit 1 +else + echo -e "${c_green}Kalkun est accessible via l'URL $http://$DOMAIN$c_" + exit 0 +fi diff --git a/.install/4b-install_playsms.sh b/.install/4b-install_playsms.sh new file mode 100755 index 0000000..594d638 --- /dev/null +++ b/.install/4b-install_playsms.sh @@ -0,0 +1,102 @@ +#!/bin/bash + +MY_PATH="`dirname \"$0\"`" # relative +MY_PATH="`( cd \"$MY_PATH\" && pwd )`" # absolutized and normalized + +[[ -f $MY_PATH/../.profile ]] && source $MY_PATH/../.profile +unset err +pwdDB=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 42 | head -n 1) + +args=$@ +[[ $args =~ noask ]] && noask=o && askSSL=o + +IP=$(ifconfig | grep "inet " | grep -v "127.0.0.1" | awk '{ print $2 }') +[[ ! $PSMS_DOMAIN ]] && echo -e "${c_yellow}Choisissez un nom de domaine pour PlaySMS (Sinon $IP sera choisi): $c_" && read PSMS_DOMAIN +[[ ! $PSMS_DOMAIN ]] && PSMS_DOMAIN=$IP && askSSL=n && noask=o + + +DOMAIN=$PSMS_DOMAIN + +## Install PHP + MySQL +$MY_PATH/1-install_requirements.sh php + +## Create database + +if [[ $(sudo mysql -e "show databases;" | grep gammu) ]]; then + pwdDB=$(cat /etc/gammu-smsdrc | grep "password" | grep -v "# " | awk '{ print $3 }') +else + sudo mysql -e "CREATE DATABASE gammu" + sudo mysql -e "CREATE USER 'gammu'@'localhost' IDENTIFIED BY '$pwdDB';" + sudo mysql -e "GRANT ALL PRIVILEGES ON gammu.* TO 'gammu'@'localhost';" + sudo mysql -e "FLUSH PRIVILEGES;" +fi + +## Clone repo playSMS +[[ -d $MY_PATH/playsms ]] && sudo rm -rf $MY_PATH/playsms +git clone https://github.com/antonraharja/playSMS.git $MY_PATH/playsms + +cp $MY_PATH/templates/4b/install-playsms.conf $MY_PATH/playsms/install.conf +sed -i "s/_pwdDB/$pwdDB/g" $MY_PATH/playsms/install.conf + +[[ -d /var/www/playsms ]] && sudo rm -rf /var/www/playsms +sudo chmod u+x $MY_PATH/playsms/install-playsms.sh +cd $MY_PATH/playsms +sed -i "s/read /confirm=y; #read /g" install-playsms.sh +sudo ./install-playsms.sh +sudo sed -i "/ishttps/d" /var/www/playsms/config.php +sudo sed -i "/http or https*/a \$core_config['ishttps'] = true;" /var/www/playsms/config.php +[[ -d $MY_PATH/playsms ]] && sudo rm -rf $MY_PATH/playsms +cd $MY_PATH + +## Start playsmsd on boot +sudo /usr/local/bin/playsmsd start + +if [[ -f /etc/rc.local ]]; then + [[ ! $(grep playsmsd /etc/rc.local) ]] && sudo sed -i '/^exit 0.*/i /usr/local/bin/playsmsd start' /etc/rc.local +else + echo "/usr/local/bin/playsmsd start" | sudo tee /etc/rc.local +fi + +## Tests +if [[ $(sudo playsmsd status) =~ "is running" ]]; then + echo -e "${c_green}playSMS a été installé correctement et le daemon est démarré =)$c_" +else + echo -e "${c_red}Une erreur est survenu$c_" + err=1 +fi + +## Config NGINX + +[[ ! -d /etc/nginx/def_conf ]] && sudo mkdir /etc/nginx/def_conf/ +sudo cp $MY_PATH/templates/rproxy/proxypass.conf /etc/nginx/def_conf/ +sudo cp $MY_PATH/templates/4b/playsms.conf /etc/nginx/conf.d/ +sudo sed -i "s/_DOMAIN/$DOMAIN/" /etc/nginx/conf.d/playsms.conf + +## Active SSL + +echo -e "${c_yellow}playSMS ne fonctionne pas sans certifcat SSL.$c_" +[[ ! $noask ]] && printf "${c_yellow}Voulez-vous installer et activer un certificat SSL maintenant pour $DOMAIN ? (o/n) $c_" && read askSSL +if [[ $askSSL =~ ^(o|y|yes|oui|Y|O|YES)$ ]]; then + $MY_PATH/ssl.sh certif APP=playsms DOMAIN=$DOMAIN + if sudo test -f /etc/letsencrypt/live/$DOMAIN/fullchain.pem; then + $MY_PATH/ssl.sh on APP=playsms DOMAIN=$DOMAIN + else + echo -e "${c_red}Une erreur s'est produite, basculement vers le mode non SSL$c_" + $MY_PATH/ssl.sh off APP=playsms DOMAIN=$DOMAIN + fi + http=https +else + $MY_PATH/ssl.sh off APP=playsms DOMAIN=$DOMAIN + http=http +fi + +sudo service nginx restart + +if [[ $err ]]; then + echo -e "${c_red}Installation incomplète$c_" + exit 1 +else + echo -e "${c_green}PlaySMS est accessible via l'URL $http://$DOMAIN$c_" + exit 0 +fi + diff --git a/.install/ssl.sh b/.install/ssl.sh new file mode 100755 index 0000000..84ea3aa --- /dev/null +++ b/.install/ssl.sh @@ -0,0 +1,71 @@ +#!/bin/bash + +MY_PATH="`dirname \"$0\"`" # relative +MY_PATH="`( cd \"$MY_PATH\" && pwd )`" # absolutized and normalized + +### Vars +args=$(echo $@ | tr " " "\n") + +if [[ "$args" =~ "DOMAIN=" ]]; then + DOMAIN=$(echo "$args" | grep "\ diff --git a/.install/templates/4a/daemon.sh b/.install/templates/4a/daemon.sh new file mode 100755 index 0000000..37cac37 --- /dev/null +++ b/.install/templates/4a/daemon.sh @@ -0,0 +1,8 @@ +#!/bin/sh + +# Configure this (use absolute path) +PHP=/usr/bin/php # php cli path +DAEMON=/var/www/kalkun/scripts/daemon.php # daemon.php path + +# Execute +$PHP $DAEMON diff --git a/.install/templates/4a/database.php b/.install/templates/4a/database.php new file mode 100644 index 0000000..1b25db5 --- /dev/null +++ b/.install/templates/4a/database.php @@ -0,0 +1,58 @@ + .install/.OS + unset err +## Vérifie si le script est en lancé par root if [ "$EUID" -eq 0 ] then echo -e "${c_red}Veuillez ne pas executez ce script en root. Choisissez un utilisateur pour votre serveur G1sms+ (nous recommandons l'utilisateur pi)$c_" exit 1 fi ## Update G1sms+ code -git pull || err=1 +git pull || err+=1 chmod u+x $MY_PATH/.install/*.sh @@ -34,8 +46,8 @@ $MY_PATH/.install/export_colors.sh ## Vérifie si IPFS est installé if [[ $force_req == "o" || -z $(which ipfs) || -z $(which gammu) ]];then echo -e "${c_yellow}IPFS ou gammu n'ont pas été détectés sur votre machine, nous allons installer tous les prérequis...$c_" - $MY_PATH/.install/1-install_requirements.sh || err=1 - $MY_PATH/.install/2-configure_ipfs_layer.sh || err=1 + $MY_PATH/.install/1-install_requirements.sh silkaj ipfs gammu || err+=1 + $MY_PATH/.install/2-configure_ipfs_layer.sh || err+=1 else echo -e "${c_green}IPFS et gammu sont déjà installé !$c_" fi @@ -59,7 +71,7 @@ if [[ -f $MY_PATH/.install/templates/init.sh ]]; then [[ $noask != "o" ]] && echo -e "${c_light}${c_blue}LES PARAMETRES SONT BONS? Appliquer? ENTER ou CTRL-C ?$c_" && read [[ -f shell/init.sh ]] && mv shell/init.sh shell/init.sh.old - cp $MY_PATH/.install/templates/init.sh shell/init.sh || err=1 + cp $MY_PATH/.install/templates/init.sh shell/init.sh || err+=1 sed -i s/pi/$YOU/g $init_loc sed -i s/+33600000000/$MASTERPHONE/g $init_loc @@ -68,7 +80,7 @@ if [[ -f $MY_PATH/.install/templates/init.sh ]]; then sed -i s/Fred/$ADMINPSEUDO/g $init_loc else echo -e "${c_red}init.sh introuvable...$c_" - err=1 + err+=1 exit 1 fi @@ -76,13 +88,15 @@ fi repOld=$repOption [[ -z $repOption ]] && echo -e "${c_yellow}Voulez-vous installer les modules complémentaires de copylaradio ? (o/n)$c_" && read repOption -[[ $repOption =~ ^(o|1|yes|options|a|all)$ ]] && .install/3-install_copylaradio.sh; repOption=$repOld -[[ -z $repOption ]] && echo -e "${c_yellow}Voulez-vous installer l'interface web playSMS ? (o/n)$c_" && read repOption -[[ $repOption =~ ^(o|1|yes|options|a|all)$ ]] && .install/4-install_playsms.sh; repOption=$repOld +if [[ $repOption =~ ^(o|1|yes|options|a|all)$ ]]; then $MY_PATH/.install/3-install_copylaradio.sh || err+=1; fi; repOption=$repOld +[[ -z $repOption ]] && echo -e "${c_yellow}Voulez-vous installer l'interface web Kalkun ? (o/n)$c_" && read repOption +if [[ $repOption =~ ^(o|1|yes|options|a|all)$ ]]; then isKalkun=1; $MY_PATH/.install/4a-install_kalkun.sh || err+=1; fi; repOption=$repOld +[[ -z $repOption && -z $isKalkun ]] && echo -e "${c_yellow}Voulez-vous installer l'interface web playSMS ? (o/n)$c_" && read repOption +if [[ $repOption =~ ^(o|1|yes|options|a|all)$ ]]; then $MY_PATH/.install/4b-install_playsms.sh || err+=1; fi; repOption=$repOld if [[ $err ]]; then - echo -e "---\n${c_red}L'installation n'est mal déroulé =($c_" + echo -e "---\n${c_red}L'installation générale n'est mal déroulé =($c_" else - echo -e "---\n${c_green}L'installation de votre noeud G1SMS est terminé !\nBienvenue à bord =)$c_" + echo -e "---\n${c_green}Félécitation ! L'installation de votre noeud G1SMS s'est terminé avec succès !\nBienvenue à bord =)$c_" fi exit 0 diff --git a/test.sh b/tests/test.sh similarity index 100% rename from test.sh rename to tests/test.sh