팁 : 일괄 업데이트 스크립트

This entry is part 43 of 48 in the series FreeNAS 서버 만들기

FreeNAS 는 여러 개의 Jail 을 통해 다양한 서비스를 동작시키게 됨으로 여러 개의 서버를 운용하는 것과 비슷하게 관리됩니다. 그런데 문제가 있는데, 여러 개의 서버가 있으면 업데이트도 여러 번 해야 한다는 겁니다. 이건 좋지 않습니다. 관리자의 부담을 높이고 시간을 많이 잡아 먹으니깐요. 그러니 일괄 업데이트 스크립트를 만들어보도록 하겠습니다.

감옥의 업데이트는 아래와 같이 진행됩니다.

  1. 감옥 안의 서비스를 중지하고
  2. iocage update 를 실행하고 (freebsd 업데이트)
  3. 패키지를 업데이트 한 다음
  4. 필요하다면 포트를 업데이트하고
  5. 필요한 작업을 한 다음
  6. 서비스를 시작합니다.

플러그인 감옥의 경우 3~4 작업이 생략됩니다.

iocage update 나 iocage upgrade 를 실행할 때 스냅샷이 찍힙니다.

용어 설명

iocage snapshot 감옥

감옥의 스냅샷을 찍습니다. 찍은 스냅샷은 명령어나 WebUI 로 복구할 수 있습니다.

iocage update 감옥

감옥 내에서 freebsd-update 를 실행합니다.

iocage upgrade 감옥

감옥의 FreeBSD 버전을 업그레이드 합니다. iocage update 가 업데이트 패치를 받는 것이라면, iocage upgrade 는 감옥의 FreeBSD OS 를 업그레이드 하는 것입니다.

업데이트 스크립트 작성

20191220 수정
업데이트 스크립트를 업데이트 하였습니다. 누락된 부분과 잘못 된 부분을 수정하고, 플러그인 업데이트를 정상적으로 처리하도록 변경하였습니다.

vi /mnt/System/data/script/update_jail.sh

#!/bin/bash

iocage exec Nginx_WAF 'service fail2ban stop'
iocage exec Nginx_WAF 'service ddclient stop'
iocage exec Nginx_WAF 'service nginx stop'
iocage update Nginx_WAF
iocage exec Nginx_WAF 'portsnap auto'
iocage exec Nginx_WAF 'pkg update && pkg upgrade -y'
iocage exec Nginx_WAF 'fetch https://raw.githubusercontent.com/SpiderLabs/ModSecurity/v3/master/unicode.mapping -o /usr/local/etc/modsecurity/unicode.mapping'
iocage exec Nginx_WAF 'pkg unlock -y nginx'
iocage exec Nginx_WAF 'portupgrade nginx'
iocage exec Nginx_WAF 'pkg lock -y nginx'
iocage exec Nginx_WAF 'service ipfw restart'
iocage exec Nginx_WAF 'service fail2ban start'
iocage exec Nginx_WAF 'service ddclient start'
iocage exec Nginx_WAF 'service nginx start'

iocage exec technitium_dns 'service technitiumdns stop'
iocage update technitium_dns
iocage exec technitium_dns 'pkg update && pkg upgrade -y'
iocage exec technitium_dns 'cp -r /usr/local/technitiumdns/config /tmp/'
iocage exec technitium_dns 'fetch https://download.technitium.com/dns/DnsServerPortable.zip -o /tmp/technitiumdnsdns.zip'
iocage exec technitium_dns 'unzip /tmp/technitiumdnsdns.zip -o -d /usr/local/technitiumdns'
iocage exec technitium_dns 'rm /tmp/technitiumdnsdns.zip'
iocage exec technitium_dns 'service technitiumdns start'
echo "remove config file (/tmp/config/) menualy"

iocage exec Media 'service gt stop'
iocage exec Media 'service radarr stop'
iocage exec Media 'service sonarr stop'
iocage exec Media 'service transmission stop'
#kill jackett
iocage exec Media 'killall mono-sgen'
iocage update Media
iocage exec Media 'pkg update && pkg upgrade -y'
iocage exec Media 'chown -R radarr /usr/local/radarr/'
iocage exec Media 'chown -R sonarr /usr/local/sonarr/'
iocage exec Media 'chown -R jackett:jackett /usr/local/jackett/'
iocage exec Media 'npm install -g npm'
iocage exec Media 'npm update green-tunnel'
iocage exec Media 'service gt start'
iocage exec Media 'service radarr start'
iocage exec Media 'service sonarr sart'
iocage exec Media 'service jackett start'
iocage exec Media 'service transmission start'

iocage exec TVHeadend 'service tvheadend stop'
iocage update TVHeadend
iocage exec TVHeadend 'pkg update && pkg upgrade -y'
iocage exec TVHeadend 'service tvheadend start'

iocage exec SoftEther_VPN 'service softether_server stop'
iocage update SoftEther_VPN
iocage exec SoftEther_VPN 'pkg update && pkg upgrade -y'
iocage exec SoftEther_VPN 'service softether_server start'

iocage exec SFTP 'service ipfw stop'
iocage exec SFTP 'service fail2ban stop'
iocage update SFTP
iocage exec SFTP 'pkg update && pkg upgrade -y'
iocage exec SFTP 'service ipfw start'
iocage exec SFTP 'service fail2ban start'

iocage exec FEP 'service php-fpm stop'
iocage exec FEP 'service nginx stop'
#tt-rss 를 설치하였을 시에 ttrssd 중지
iocage exec FEP 'service ttrssd stop'
iocage update FEP

iocage exec FEP 'pkg update && pkg upgrade -y'

#미디어위키를 설치하였을 경우
iocage exec FEP 'chown -R www:www /usr/local/www/mediawiki'
iocage exec FEP 'su -m www -c "php /usr/local/www/mediawiki/maintenance/update.php"'

#워드프레스를 설치하였을 경우
iocage exec FEP 'chown -R www:www /usr/local/www/wordpress'

#TTRSS 를 설치하였을 경우
iocage exec FEP 'chown -R www:www /usr/local/www/tt-rss/'
iocage exec FEP 'service ttrssd restart'

iocage exec FEP 'service php-fpm start'
iocage exec FEP 'service nginx start'

iocage exec nextcloud 'service php-fpm stop'
iocage exec nextcloud 'service nginx stop'
iocage update nextcloud
iocage exec nextcloud chown -R www:www /mnt/data /usr/local/www/nextcloud/
iocage exec nextcloud 'service php-fpm start'
iocage exec nextcloud 'service nginx start'

iocage exec Guacamole 'service guacd stop'
iocage exec Guacamole 'service tomcat9 stop'
iocage update Guacamole
iocage exec Guacamole 'pkg update && pkg upgrade -y'
iocage exec Guacamole 'bash /root/update.sh'
iocage exec Guacamole 'service guacd start'
iocage exec Guacamole 'service tomcat9 start'

iocage exec downloader 'service jdownloader stop'
iocage update downloader 
iocage exec downloader 'pkg update && pkg upgrade -y'
iocage exec downloader 'service jdownloader start'

chmod 550 /mnt/System/data/script/update_jail.sh

실행 가능하도록 만들어 줍니다.

이제 업데이트 시에는 여러 개의 명령어를 입력하는 대신

bash /mnt/System/data/script/update_jail.sh

를 실행하는 것으로 감옥의 업데이트를 한번에 진행할 수 있습니다.

업그레이드 스크립트 작성

20191220 수정
업그레이드 스크립트를 작성하였습니다.

jail 마이너 버전 업그레이드 에서 감옥의 업그레이드를 하는 방법에 대해 작성하였습니다. 감옥을 업그레이드 하는 것은 한 번만 하면 되지만, 시간이 오래 걸리고 귀찮은건 매한가지입니다. 그러니 업그레이드 스크립트도 작성하도록 하겠습니다.

vi /mnt/System/data/script/jail_upgrade.sh

iocage exec Nginx_WAF 'service fail2ban stop'
iocage exec Nginx_WAF 'service ddclient stop'
iocage exec Nginx_WAF 'service nginx stop'
iocage upgrade -r 11.3-RELEASE Nginx_WAF
iocage exec Nginx_WAF 'portsnap auto'
iocage exec Nginx_WAF 'pkg update && pkg upgrade -yf'
iocage exec Nginx_WAF 'fetch https://raw.githubusercontent.com/SpiderLabs/ModSecurity/v3/master/unicode.mapping -o /usr/local/etc/modsecurity/unicode.mapping'
iocage exec Nginx_WAF 'pkg unlock -y nginx'
iocage exec Nginx_WAF 'portupgrade -f nginx'
iocage exec Nginx_WAF 'pkg lock -y nginx'
iocage restart Nginx_WAF

iocage exec technitium_dns 'service technitiumdns stop'
iocage upgrade -r 11.3-RELEASE technitium_dns
iocage exec technitium_dns 'pkg update && pkg upgrade -yf'
iocage exec technitium_dns 'cp -r /usr/local/technitiumdns/config /tmp/'
iocage exec technitium_dns 'fetch https://download.technitium.com/dns/DnsServerPortable.zip -o /tmp/technitiumdnsdns.zip'
iocage exec technitium_dns 'unzip /tmp/technitiumdnsdns.zip -o -d /usr/local/technitiumdns'
iocage exec technitium_dns 'rm /tmp/technitiumdnsdns.zip'
echo "remove config file (/tmp/config/) menualy"
iocage restart technitium_dns

iocage exec Media 'service gt stop'
iocage exec Media 'service radarr stop'
iocage exec Media 'service sonarr stop'
iocage exec Media 'service transmission stop'
#kill jackett
iocage exec Media 'killall mono-sgen'
iocage upgrade -r 11.3-RELEASE Media
iocage exec Media 'pkg update && pkg upgrade -yf'
iocage exec Media 'chown -R radarr /usr/local/radarr/'
iocage exec Media 'chown -R sonarr /usr/local/sonarr/'
iocage exec Media 'chown -R jackett:jackett /usr/local/jackett/'
iocage exec Media 'npm install -g npm'
iocage exec Media 'npm update green-tunnel'
iocage restart Media

iocage upgrade -r 11.3-RELEASE TVHeadend
iocage exec TVHeadend 'pkg update && pkg upgrade -yf'
iocage restart TVHeadend

iocage upgrade -r 11.3-RELEASE SoftEther_VPN
iocage exec SoftEther_VPN 'pkg update && pkg upgrade -yf'
iocage restart SoftEther_VPN

iocage upgrade -r 11.3-RELEASE SFTP
iocage exec SFTP 'pkg update && pkg upgrade -y'
iocage restart SFTP

iocage exec FEP 'service php-fpm stop'
iocage exec FEP 'service nginx stop'
#tt-rss 를 설치하였을 시에 ttrssd 중지
iocage exec FEP 'service ttrssd stop'
iocage upgrade -r 11.3-RELEASE FEP
iocage exec FEP 'pkg update && pkg upgrade -yf'
#미디어위키를 설치하였을 경우
iocage exec FEP 'chown -R www:www /usr/local/www/mediawiki'
iocage exec FEP 'su -m www -c "php /usr/local/www/mediawiki/maintenance/update.php"'
#워드프레스를 설치하였을 경우
iocage exec FEP 'chown -R www:www /usr/local/www/wordpress'
#TTRSS 를 설치하였을 경우
iocage exec FEP 'chown -R www:www /usr/local/www/tt-rss/'
iocage restart FEP

iocage upgrade -r 11.3-RELEASE Guacamole
iocage exec Guacamole 'pkg update && pkg upgrade -yf'
iocage exec Guacamole 'bash /root/update.sh'
iocage restart Guacamole

iocage upgrade -r 11.3-RELEASE downloader
iocage exec downloader 'pkg update && pkg upgrade -yf'
iocage restart downloader

chmod 550 /mnt/System/data/script/jail_upgrade.sh/

실행 가능하게 만들어 줍니다.

주의

업데이트 시 스냅샷이 찍히게 되는데, 업데이트 이후 문제가 없음을 확인하였다면 스냅샷을 지워 주세요. 그대로 놔 두면 시스템에 부하가 걸립니다.

cron 에 업데이트 스크립트를 집어넣는 것은 추천하지 않습니다. 업데이트 과정에서 문제가 발생하였을 때 문제가 발생하였음을 알아채는데 시간이 걸리고, 원인을 알아내기 어렵습니다.

업데이트는 가능하면 수동으로 해 주세요.

시리즈 네비게이션<< GNU Tar 을 이용해 백업하기FreeBSD jail 마이너 버전 업그레이드 >>

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다