Skip to content

Instantly share code, notes, and snippets.

@ginokent
Created August 31, 2018 03:03
Show Gist options
  • Save ginokent/a03dc100fb523d9748bd267594ec5ee8 to your computer and use it in GitHub Desktop.
Save ginokent/a03dc100fb523d9748bd267594ec5ee8 to your computer and use it in GitHub Desktop.
#!/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