FreeNAS 는 여러 개의 Jail 을 통해 다양한 서비스를 동작시키게 됨으로 여러 개의 서버를 운용하는 것과 비슷하게 관리됩니다. 그런데 문제가 있는데, 여러 개의 서버가 있으면 업데이트도 여러 번 해야 한다는 겁니다. 이건 좋지 않습니다. 관리자의 부담을 높이고 시간을 많이 잡아 먹으니깐요. 그러니 일괄 업데이트 스크립트를 만들어보도록 하겠습니다.
감옥의 업데이트는 아래와 같이 진행됩니다.
- 감옥 안의 서비스를 중지하고
- iocage update 를 실행하고 (freebsd 업데이트)
- 패키지를 업데이트 한 다음
- 필요하다면 포트를 업데이트하고
- 필요한 작업을 한 다음
- 서비스를 시작합니다.
플러그인 감옥의 경우 3~4 작업이 생략됩니다.
iocage update 나 iocage upgrade 를 실행할 때 스냅샷이 찍힙니다.
용어 설명
iocage snapshot 감옥
감옥의 스냅샷을 찍습니다. 찍은 스냅샷은 명령어나 WebUI 로 복구할 수 있습니다.
iocage update 감옥
감옥 내에서 freebsd-update 를 실행합니다.
iocage upgrade 감옥
감옥의 FreeBSD 버전을 업그레이드 합니다. iocage update 가 업데이트 패치를 받는 것이라면, iocage upgrade 는 감옥의 FreeBSD OS 를 업그레이드 하는 것입니다.
업데이트 스크립트 작성
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
를 실행하는 것으로 감옥의 업데이트를 한번에 진행할 수 있습니다.
업그레이드 스크립트 작성
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 에 업데이트 스크립트를 집어넣는 것은 추천하지 않습니다. 업데이트 과정에서 문제가 발생하였을 때 문제가 발생하였음을 알아채는데 시간이 걸리고, 원인을 알아내기 어렵습니다.
업데이트는 가능하면 수동으로 해 주세요.