Created
August 31, 2018 03:03
-
-
Save ginokent/a03dc100fb523d9748bd267594ec5ee8 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# reference | |
# https://gogs.io/docs/installation/install_from_source/ | |
# https://linode.com/docs/development/version-control/install-gogs-on-debian/ | |
# https://discuss.gogs.io/t/how-to-backup-restore-and-migrate/991/ | |
# validate | |
sudo -v || exit 1 | |
# selinux | |
test -r /etc/selinux/config && sudo su -c '(grep -q ^SELINUX=enforcing /etc/selinux/config && { sed "s/^\(SELINUX=\)\(enforcing\)/$(date +\#\ \%Y\%m\%d\ \#)\1\2\n\1disabled/g" $_ -i_$(date +\%Y\%m\%d_\%H\%M\%S).backup ; setenforce 0 ; })' | |
# firewall | |
type -p ufw && sudo ufw allow 3000/tcp | |
type -p firewall-cmd && sudo firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 1000 -p tcp --dport 3000 -j ACCEPT && sudo systemctl restart firewalld | |
# git user | |
sudo useradd -c "Gogs git service user" -d /home/git -m -r -s /bin/bash git | |
# dependency | |
type -p apt && { sudo apt update ; sudo apt -y install gcc git libpam0g-dev sqlite unzip wget zip ; } | |
type -p yum && { sudo yum makecache fast ; sudo yum -y install gcc git pam-devel sqlite unzip wget zip ; } | |
# validate | |
sudo -v || exit 1 | |
# install git latest from source | |
type -p apt && sudo su -c '(apt -y install {libcurl4-gnutls,libcurl4-openssl,libexpat1,libssl,libz}-dev gcc gettext make wget ; cd /usr/local/src ; wget -cSv https://www.kernel.org/pub/software/scm/git/git-2.16.1.tar.gz ; tar vxzf $(basename $_) ; cd $(basename -s .tar.gz $_) ; make prefix=/usr/local all ; make prefix=/usr/local install)' | |
type -p yum && sudo su -c '(yum -y install {curl,expat,gettext,openssl,zlib}-devel gcc make perl-ExtUtils-MakeMaker wget ; cd /usr/local/src ; wget -cSv https://www.kernel.org/pub/software/scm/git/git-2.16.1.tar.gz ; tar vxzf $(basename $_) ; cd $(basename -s .tar.gz $_) ; make prefix=/usr/local all ; make prefix=/usr/local install)' | |
# validate | |
sudo -v || exit 1 | |
# install go and gogs | |
sudo su - git -s /bin/bash -c '( | |
(mkdir -p $HOME/local && cd $_ ; wget -cSv $(wget -qO- https://golang.org/dl/ | egrep "https://dl.google.com/go/go[0-9]\.[0-9]\.[0-9]\.$(uname -s | tr "[A-Z]" "[a-z]")-$([ "$(uname -m)" = x86_64 ] && echo amd64)" | sed "s@.*href=\"\([^\"]*\)\".*@\1@g" | sort -n | tail -n 1) && tar vxzf $(basename $_) && printf "export GOROOT=\$HOME/local/go\nexport GOPATH=\$HOME/go\nexport PATH=\$PATH:\$GOROOT/bin:\$GOPATH/bin\n" >> $HOME/.bashrc && source $HOME/.bashrc) | |
$HOME/local/go/bin/go get -v -tags "sqlite pam cert" -u github.com/gogits/gogs | |
cd $HOME/go/src/github.com/gogits/gogs | |
$HOME/local/go/bin/go build -v -tags "sqlite pam cert" | |
cat << "__EOF__" > $HOME/backup-gogs.sh | |
#!/bin/bash | |
[ "$USER" = "git" ] || { printf "$(date +\%Y/\%m/\%d\ \%H:\%M:\%S) \033[31m[ERROR] run as git.\033[00m\n" ; exit 1 ; } | |
mkdir -p /home/git ; cd $_ | |
/home/git/go/src/github.com/gogits/gogs/gogs backup --config=/home/git/go/src/github.com/gogits/gogs/custom/conf/app.ini | |
__EOF__ | |
cat << "__EOF__" > $HOME/restore-gogs.sh | |
#!/bin/bash | |
[ "$USER" = "git" ] || { printf "$(date +\%Y/\%m/\%d\ \%H:\%M:\%S) \033[31m[ERROR] run as git.\033[00m\n" ; exit 1 ; } | |
mkdir -p /home/git ; cd $_ | |
_ARC=$(ls /home/git/gogs-backup-*.zip | tail -n 1) | |
test -f ${_ARC:?} && /home/git/go/src/github.com/gogits/gogs/gogs restore --from $_ARC && printf "$(date +\%Y/\%m/\%d\ \%H:\%M:\%S) \033[32m[ INFO] Please restart gogs.\033[00m\n" | |
__EOF__ | |
chmod -v 755 $HOME/backup-gogs.sh $HOME/restore-gogs.sh | |
)' # end sudo | |
# validate | |
sudo -v || exit 1 | |
# cron | |
(sudo crontab -u git -l ; echo '1 5 * * * PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:$PATH" /home/git/backup-gogs.sh >> /home/git/backup-gogs.log 2>&1') | sudo crontab -u git - | |
# service | |
cat << "__EOF__" | sudo tee /lib/systemd/system/gogs.service > /dev/null | |
[Unit] | |
Description=Gogs (Go Git Service) | |
After=network.target | |
[Service] | |
Type=simple | |
User=git | |
Group=git | |
WorkingDirectory=/home/git/go/src/github.com/gogits/gogs | |
ExecStart=/home/git/go/src/github.com/gogits/gogs/gogs web | |
Restart=always | |
Environment=USER=git HOME=/home/git | |
[Install] | |
WantedBy=multi-user.target | |
__EOF__ | |
# start gogs | |
sudo systemctl enable gogs | |
sudo systemctl start gogs |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment