#!/bin/bash ########################################################### # # Armbian 최적화 스크립트 - https://www.armbian.com/ # Release 2023.05.01. # # 이 스크립트는 반드시 인터넷이 가능한 상태에서 # root/1234 계정으로 SSH 로그인하여 실행해야 한다. # ########################################################### CURRENT_DIR=$(pwd) TIMESTAMP=$(date "+%Y%m%d_%H%M%S") APTCMD="apt" # Let's encrypt LETSENCRYPT_DOMAIN="hasu0707.duckdns.org" # https://download.pydio.com/pub/core/archives/ PYDIO_VERSION="8.2.5" PYDIO_DB_PW="pydio" # http://extplorer.net/projects/extplorer/files EXTPLORER_VERSION="2.1.15" # 설치 스위치 NEW_USER="armbian" NEW_GROUP="${NEW_USER}" NEW_USER_HOME="/home/${NEW_USER}" STORAGE_MOUNT_DIR="/mnt/usbdisk" AUTOFS_DIR="/mnt/usbdisk" WWW_DIR="/var/www" SET_NETWORK_CONFIG=1 USE_APACHE2=1 USE_WEBDAV=1 USE_MARIADB=1 USE_PHP=1 USE_PYDIO=0 USE_EXTPLORER=0 USE_SAMBA=1 USE_TRANSMISSION=0 USE_XWINDOW=1 USE_VSFTPD=1 USE_NFS_SERVER=1 USE_XRDP=1 USE_VNC_SERVER=0 USE_BT_AUDIO=0 USE_PLEXMEDIASERVER=0 USE_LETSENCRYPT=0 USE_DOCKER=1 USE_BITWARDEN=0 # LXDE or XFCE or GNOME DESKTOP_ENVIRONMENT="LXDE" HANGUL_IME="ibus" DOCKER_ARCH="armhf" HTTP_PORT=80 WEBDAV_PORT=5005 WIFI_ENABLE=1 setup_opizero() { echo "###########################################################" echo "#" echo "# Orange PI Zero LTS" echo "#" echo "###########################################################" BOARD_NAME="Orange Pi Zero" BOARD_NAME_SHORT="opizero" USE_BT_AUDIO=1 ETH0_IP=10.10.10.106 ETH0_NM=255.255.255.0 GATEWAY=10.10.10.254 WIFI_SSID="eSecuVali" WIFI_PW="20271095" #ETH0_IP=192.168.1.22 #ETH0_NM=255.255.255.0 #GATEWAY=192.168.1.1 #WIFI_SSID="IEEE_802.11_BGN" #WIFI_PW="01086023358" MY_SITE=${BOARD_NAME_SHORT} DNS_SERVER1="8.8.8.8" DNS_SERVER2="8.8.4.4" } setup_opizero2() { echo "###########################################################" echo "#" echo "# Orange PI Zero2" echo "#" echo "###########################################################" DOCKER_ARCH="arm64" BOARD_NAME="Orange Pi Zero2" BOARD_NAME_SHORT="opizero2" USE_XRDP=0 USE_VNC_SERVER=1 ETH0_IP=10.10.10.108 ETH0_NM=255.255.255.0 GATEWAY=10.10.10.254 WIFI_SSID="eSecuVali_5G" WIFI_PW="20271095" #ETH0_IP=192.168.1.20 #ETH0_NM=255.255.255.0 #GATEWAY=192.168.1.1 #WIFI_SSID="IEEE_802.11_NAC" #WIFI_PW="01086023358" MY_SITE=${BOARD_NAME_SHORT} DNS_SERVER1="8.8.8.8" DNS_SERVER2="8.8.4.4" # 이 패키지를 업데이트하면 부팅 불가하여 업데이트에서 제외한다. apt-mark hold armbian-bsp-cli-orangepizero2 } setup_odroidhc2() { echo "###########################################################" echo "#" echo "# Odroid HC2 설치 준비" echo "#" echo "###########################################################" STORAGE_MOUNT_DIR="/mnt/sata" USE_LETSENCRYPT=1 USE_BITWARDEN=1 BOARD_NAME="ODROID HC2" BOARD_NAME_SHORT="odroid_hc2" WIFI_ENABLE=0 ETH0_IP=192.168.1.10 ETH0_NM=255.255.255.0 GATEWAY=192.168.1.1 WIFI_SSID="IEEE_802.11_BGN" WIFI_PW="01086023358" MY_SITE=${BOARD_NAME_SHORT} DNS_SERVER1="8.8.8.8" DNS_SERVER2="8.8.4.4" } check_board_name() { echo "###########################################################" echo "#" echo "# 어떤 보드인지 체크한다." echo "#" echo "###########################################################" RELEASE_FILE="/etc/armbian-release" grep "Orange Pi Zero2" ${RELEASE_FILE} > /dev/null if [ $? -eq 0 ] then echo "This board is Orange Pi Zero 2" setup_opizero2 return fi grep "Orange Pi Zero" ${RELEASE_FILE} > /dev/null if [ $? -eq 0 ] then echo "This board is Orange Pi Zero LTS" setup_opizero return fi grep "Odroid XU4" ${RELEASE_FILE} > /dev/null if [ $? -eq 0 ] then echo "This board is ODROID HC2" setup_odroidhc2 return else echo "ERROR: Unknown board." exit 1 fi } get_system_ip_addr() { echo "###########################################################" echo "# 시스템 IP주소 알아내기" echo "###########################################################" SYSTEM_IP_ADDR=$(hostname -I | awk '{print $1}') if [ -z ${SYSTEM_IP_ADDR} ] then echo "ERROR: Unknown IP Address." exit fi echo "ip addr: ${SYSTEM_IP_ADDR}" } get_system_if_name() { echo "###########################################################" echo "# 시스템 인터페이스명 알아내기" echo "###########################################################" SYSTEM_IF_NAME=$(ls -1 /sys/class/net/ | awk '{ if ( $1 != "lo" && $1 != "docker0") print $1 }' | head -n 1) if [ -z ${SYSTEM_IF_NAME} ] then echo "ERROR: Unknown interface name." exit fi echo "if name: ${SYSTEM_IF_NAME}" } deb_clean() { echo "###########################################################" echo "#" echo "# apt의 불필요한 패키지 정리 및 디스크 공간 확보" echo "#" echo "###########################################################" sync ${APTCMD} -y clean ${APTCMD} -y -f autoremove --purge ${APTCMD} -y autoclean sync } dpkg_init() { echo "###########################################################" echo "#" echo "# dpkg 패키지 관리자 초기화" echo "#" echo "###########################################################" cd ${CURRENT_DIR} rm -f /var/lib/dpkg/lock dpkg --configure -a } set_ubuntu_repo() { echo "###########################################################" echo "#" echo "# Ubuntu 레포지터리 변경" echo "#" echo "###########################################################" cd ${CURRENT_DIR} cp -f /etc/apt/sources.list /etc/apt/sources.list.${TIMESTAMP} sed -i "s/http:\/\/mirrors.tuna.tsinghua.edu.cn\/ubuntu-ports/http:\/\/ports.ubuntu.com/g" /etc/apt/sources.list } set_locale() { echo "###########################################################" echo "#" echo "# 로케일 설정" echo "#" echo "###########################################################" cd ${CURRENT_DIR} localedef -v -c -i ko_KR -f UTF-8 ko_KR.UTF-8 locale-gen "ko_KR.UTF-8" update-locale LC_ALL="ko_KR.UTF-8" LANG="ko_KR.UTF-8" LANGUAGE="ko_KR:ko:en_US:en" LC_MESSAGES="POSIX" sed -i "s/# set convert-meta off/set convert-meta off/g" /etc/inputrc } init_sdcard() { echo "###########################################################" echo "#" echo "# sdcard 초기화" echo "# /dev/mmcblk0 : sdcard" echo "# dd if=/dev/zero of=/dev/mmcblk1 bs=512 count=1" echo "#" echo "###########################################################" dd if=/dev/zero of=/dev/mmcblk0 bs=4096 count=1 } set_timezone() { echo "###########################################################" echo "#" echo "# 타임존 셋팅" echo "#" echo "###########################################################" cd ${CURRENT_DIR} echo "Asia/Seoul" > /etc/timezone } set_default_user_account() { echo "###########################################################" echo "#" echo "# 사용자 디렉토리 변경 및 /home/${NEW_USER} 삭제" echo "#" echo "###########################################################" cd ${CURRENT_DIR} if [[ ${NEW_USER_HOME} != "/home/${NEW_USER}" ]] then mkdir -p ${NEW_USER_HOME} usermod -d ${NEW_USER_HOME} ${NEW_USER} cp -f /home/${NEW_USER}/.bash_logout ${NEW_USER_HOME} cp -f /home/${NEW_USER}/.bashrc ${NEW_USER_HOME} cp -f /home/${NEW_USER}/.profile ${NEW_USER_HOME} chown -R ${NEW_USER}:${NEW_GROUP} ${NEW_USER_HOME} rm -rf /home/${NEW_USER} fi } copy_skel_profile() { echo "###########################################################" echo "#" echo "# root 프로파일 복사 (일부 없는 경우만 해당)" echo "#" echo "###########################################################" cp -fv /etc/skel/.profile /root/ } set_network() { if [ ${SET_NETWORK_CONFIG} = 1 ] then echo "###########################################################" echo "#" echo "# 네트워크 셋팅 (IP주소 수정 후 실행)" echo "#" echo "# Wifi와 Ethernet은 한가지만 사용가능하며," echo "# 만일 Wifi를 사용하기 위해서는 \"auto eth0\"를 삭제한다." echo "#" echo "###########################################################" echo "# Ethernet" > /etc/network/interfaces.d/eth0 echo "auto eth0" >> /etc/network/interfaces.d/eth0 echo "allow-hotplug eth0" >> /etc/network/interfaces.d/eth0 echo "no-auto-down eth0" >> /etc/network/interfaces.d/eth0 echo "# Wifi를 주 네트워크로 사용할 경우 eth0의 inet을 manual로 설정한다." >> /etc/network/interfaces.d/eth0 echo "iface eth0 inet static" >> /etc/network/interfaces.d/eth0 echo "#iface eth0 inet dhcp" >> /etc/network/interfaces.d/eth0 echo "address ${ETH0_IP}" >> /etc/network/interfaces.d/eth0 echo "netmask ${ETH0_NM}" >> /etc/network/interfaces.d/eth0 echo "gateway ${GATEWAY}" >> /etc/network/interfaces.d/eth0 echo "dns-nameservers ${DNS_SERVER1} ${DNS_SERVER2}" >> /etc/network/interfaces.d/eth0 echo "# WiFi" > /etc/network/interfaces.d/wlan0 echo "auto wlan0" >> /etc/network/interfaces.d/wlan0 echo "allow-hotplug wlan0" >> /etc/network/interfaces.d/wlan0 if [ ${WIFI_ENABLE} = 1 ] then echo "iface wlan0 inet dhcp" >> /etc/network/interfaces.d/wlan0 echo "#iface wlan0 inet manual" >> /etc/network/interfaces.d/wlan0 systemctl enable wpa_supplicant.service else echo "#iface wlan0 inet dhcp" >> /etc/network/interfaces.d/wlan0 echo "iface wlan0 inet manual" >> /etc/network/interfaces.d/wlan0 systemctl disable wpa_supplicant.service fi echo "wireless-mode Managed" >> /etc/network/interfaces.d/wlan0 echo "wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf" >> /etc/network/interfaces.d/wlan0 echo "ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev" > /etc/wpa_supplicant/wpa_supplicant.conf echo "update_config=1" >> /etc/wpa_supplicant/wpa_supplicant.conf echo "" >> /etc/wpa_supplicant/wpa_supplicant.conf echo "network={" >> /etc/wpa_supplicant/wpa_supplicant.conf echo " ssid=\"${WIFI_SSID}\"" >> /etc/wpa_supplicant/wpa_supplicant.conf echo " psk=\"${WIFI_PW}\"" >> /etc/wpa_supplicant/wpa_supplicant.conf echo " key_mgmt=WPA-PSK" >> /etc/wpa_supplicant/wpa_supplicant.conf echo " priority=99" >> /etc/wpa_supplicant/wpa_supplicant.conf echo "}" >> /etc/wpa_supplicant/wpa_supplicant.conf sed -i "s/iface eth0 inet dhcp/#iface eth0 inet dhcp/g" /etc/network/interfaces chmod 644 /etc/network/interfaces.d/eth0 chmod 644 /etc/network/interfaces.d/lo chmod 644 /etc/network/interfaces.d/wlan0 chmod 644 /etc/wpa_supplicant/wpa_supplicant.conf #nmcli radio wifi off echo "" >> /etc/sysctl.conf echo "###########################################################" >> /etc/sysctl.conf echo "#" >> /etc/sysctl.conf echo "# Disable IPv6" >> /etc/sysctl.conf echo "#" >> /etc/sysctl.conf echo "###########################################################" >> /etc/sysctl.conf echo "net.ipv6.conf.all.disable_ipv6=1" >> /etc/sysctl.conf echo "net.ipv6.conf.default.disable_ipv6=1" >> /etc/sysctl.conf fi } set_dns() { echo "###########################################################" echo "#" echo "# 네트워크 셋팅 (DNS)" echo "#" echo "###########################################################" chmod 666 /etc/resolv.conf echo "nameserver ${DNS_SERVER1}" >> /etc/resolv.conf echo "nameserver ${DNS_SERVER2}" >> /etc/resolv.conf chmod 644 /etc/resolv.conf } update_os() { echo "###########################################################" echo "#" echo "# 전체 패키지 업데이트" echo "#" echo "###########################################################" ${APTCMD} update -y ${APTCMD} upgrade -y ${APTCMD} dist-upgrade -y deb_clean } install_additional_repo() { echo "###########################################################" echo "#" echo "# apt repository 관리자 설치" echo "#" echo "###########################################################" ${APTCMD} -y install software-properties-common ${APTCMD} -y install python-software-properties } install_apt_get_pkgs() { echo "###########################################################" echo "#" echo "# 필요한 패키지 설치" echo "# (설치가 안될 수 있으니 리부팅 후 확인 요망)" echo "#" echo "###########################################################" sync ${APTCMD} -y install at ${APTCMD} -y install python ${APTCMD} -y install lrzsz ${APTCMD} -y install vim ${APTCMD} -y install telnet ${APTCMD} -y install ntp ${APTCMD} -y install ntpdate ${APTCMD} -y install lshw ${APTCMD} -y install autofs ${APTCMD} -y install screen ${APTCMD} -y install wireless-tools wpasupplicant hostapd ${APTCMD} -y install expect ${APTCMD} -y install gzip bzip2 tar unrar arj p7zip-full minicom mc ftp lsof ${APTCMD} -y install zip unzip zlib1g-dev ${APTCMD} -y install iptables ipset bridge-utils isc-dhcp-server iperf ${APTCMD} -y install conntrack ${APTCMD} -y install ntfs-3g ${APTCMD} -y install exfat-fuse exfat-utils ${APTCMD} -y install lftp ${APTCMD} -y install git ${APTCMD} -y install subversion subversion-tools ${APTCMD} -y install ffmpeg ${APTCMD} -y install cifs-utils ${APTCMD} -y install tcpdump netcat ${APTCMD} -y install mediainfo sox ${APTCMD} -y install livemedia-utils ${APTCMD} -y install nfs-common ${APTCMD} -y install whois ${APTCMD} -y install net-tools ${APTCMD} -y install wakeonlan ${APTCMD} -y install wget ${APTCMD} -y install cmake ${APTCMD} -y install apt-transport-https ca-certificates curl gnupg lsb-release ${APTCMD} -y install ${NEW_USER}-config ${APTCMD} -y install rpimonitor ${APTCMD} -y install hdparm ${APTCMD} -y install lm_sensors hddtemp ${APTCMD} -y install build-essential ${APTCMD} -y install libtool ${APTCMD} -y install pkg-config sensors-detect --auto # orange pi zero2는 xrdp,xorgxrdp를 컴파일하여 수동설치 if [[ ${BOARD_NAME_SHORT} = "opizero2" ]] then ${APTCMD} -y install xserver-xorg-dev ${APTCMD} -y install libpam0g-dev ${APTCMD} -y install libjpeg-dev ${APTCMD} -y install libfuse-dev ${APTCMD} -y install libmp3lame-dev ${APTCMD} -y install libxfixes-dev ${APTCMD} -y install libxrandr-dev fi # python3 ${APTCMD} -y upgrade python3 ${APTCMD} -y upgrade python3-pip pip install --upgrade pip ${APTCMD} -y upgrade python3-dev # yt_dlp wget https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -O /usr/local/bin/yt-dlp chmod a+rx /usr/local/bin/yt-dlp /usr/local/bin/yt-dlp -U } install_rclone() { echo "###########################################################" echo "#" echo "# rclone 설치 (https://rclone.org/downloads/)" echo "#" echo "###########################################################" mkdir -p /tmp/rclone wget --no-check-certificate "https://downloads.rclone.org/rclone-current-linux-arm.zip" -O /tmp/rclone/rclone.zip unzip /tmp/rclone/rclone.zip -d /tmp/rclone cp -fv /tmp/rclone/rclone-*/rclone /usr/bin chmod 755 /usr/bin/rclone rm -rf /tmp/rclone } install_docker() { echo "###########################################################" echo "#" echo "# docker 설치" echo "#" echo "###########################################################" if [ ${USE_DOCKER} = 1 ] then ${APTCMD} -y install docker ${APTCMD} -y install docker.io ${APTCMD} -y install docker-compose #rm -f /usr/share/keyrings/docker-archive-keyring.gpg /etc/apt/sources.list.d/docker.list* #curl -fsSL "https://download.docker.com/linux/ubuntu/gpg" | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg #echo "deb [arch=${DOCKER_ARCH} signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null #add-apt-repository "deb [arch=${DOCKER_ARCH}] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" #${APTCMD} -y update #${APTCMD} -y install docker-ce docker-ce-cli containerd.io # docker-compose #pip3 install docker-compose fi } install_nfs_server() { echo "###########################################################" echo "#" echo "# NFS Server 설정" echo "#" echo "###########################################################" if [ ${USE_NFS_SERVER} = 1 ] then ${APTCMD} -y install nfs-kernel-server ${APTCMD} -y install rpcbind sync sed -i "s/STATDOPTS=/STATDOPTS=\"--port 4000\"/g" /etc/default/nfs-common sed -i "s/RPCMOUNTDOPTS=\"--manage-gids\"/RPCMOUNTDOPTS=\"--manage-gids -p 4002\"/g" /etc/default/nfs-kernel-server echo "${STORAGE_MOUNT_DIR} *(rw,sync,no_subtree_check,all_squash,anonuid=1000,anongid=1000)" >> /etc/exports echo "" >> /etc/sysctl.conf echo "###########################################################" >> /etc/sysctl.conf echo "#" >> /etc/sysctl.conf echo "# NFS nlockmgr port" >> /etc/sysctl.conf echo "#" >> /etc/sysctl.conf echo "###########################################################" >> /etc/sysctl.conf echo "fs.nfs.nlm_tcpport=4001" >> /etc/sysctl.conf echo "fs.nfs.nlm_udpport=4001" >> /etc/sysctl.conf exportfs -a systemctl daemon-reload systemctl restart nfs-kernel-server systemctl enable nfs-kernel-server systemctl enable rpcbind.service rpcinfo -p else systemctl daemon-reload systemctl stop nfs-kernel-server systemctl disable nfs-kernel-server systemctl disable rpcbind.service fi } set_vim() { echo "###########################################################" echo "#" echo "# vim 설정" echo "#" echo "###########################################################" echo "set encoding=utf-8" >> /etc/vim/vimrc echo "set fencs=utf-8,euc-kr" >> /etc/vim/vimrc echo "set fileencodings=utf-8,euc-kr" >> /etc/vim/vimrc echo "set indentexpr=" >> /etc/vim/vimrc echo "set noautoindent" >> /etc/vim/vimrc echo "set nocindent" >> /etc/vim/vimrc echo "set nosmartindent" >> /etc/vim/vimrc echo "set paste" >> /etc/vim/vimrc } install_apache2() { echo "###########################################################" echo "#" echo "# apache2 패키지 설치" echo "#" echo "###########################################################" if [ ${USE_APACHE2} = 1 ] then ${APTCMD} -y install apache2 ${APTCMD} -y install apache2-utils ${APTCMD} -y install libapache2-mod-fcgid ${APTCMD} -y install libapache2-mod-svn ${APTCMD} -y install libcgi-session-perl rm -rf ${WWW_DIR}/* chown -R www-data:www-data ${WWW_DIR} systemctl daemon-reload a2enmod rewrite a2enmod dav a2enmod dav_fs a2enmod dav_svn a2enmod auth_digest a2enmod ssl a2enmod proxy_wstunnel a2enmod proxy_http a2enmod headers a2enmod env a2enmod alias a2enmod fcgid cp -fv /etc/apache2/apache2.conf /etc/apache2/apache2.conf.${TIMESTAMP} cp -fv /etc/apache2/ports.conf /etc/apache2/ports.conf.${TIMESTAMP} cp -fv /etc/apache2/envvars /etc/apache2/envvars.${TIMESTAMP} fi } install_mariadb() { echo "###########################################################" echo "#" echo "# mariaDB 패키지 설치" echo "#" echo "###########################################################" if [ ${USE_MARIADB} = 1 ] then ${APTCMD} -y install mariadb-server sed -i "s/127.0.0.1/0.0.0.0/g" /etc/mysql/my.cnf sed -i "s/127.0.0.1/0.0.0.0/g" /etc/mysql/mariadb.conf.d/50-server.cnf systemctl stop mysql.service rm -rf /var/lib/mysql/* /usr/bin/mysql_install_db systemctl daemon-reload systemctl enable mysql.service fi } install_php() { echo "###########################################################" echo "#" echo "# php 패키지 설치" echo "#" echo "###########################################################" if [ ${USE_PHP} = 1 ] then ${APTCMD} -y install php ${APTCMD} -y install libapache2-mod-php ${APTCMD} -y install php-cli ${APTCMD} -y install php-curl ${APTCMD} -y install php-gd ${APTCMD} -y install php-gmp ${APTCMD} -y install php-imagick ${APTCMD} -y install php-intl ${APTCMD} -y install php-json ${APTCMD} -y install php-mbstring ${APTCMD} -y install php-mysql ${APTCMD} -y install php-pear ${APTCMD} -y install php-xml ${APTCMD} -y install php-xmlrpc ${APTCMD} -y install php-zip PHP_VER=$(php --version | head -n 1 | cut -d " " -f 2 | cut -c 1-3) cp -fv /etc/php/${PHP_VER}/apache2/php.ini /etc/php/${PHP_VER}/apache2/php.ini.${TIMESTAMP} fi } install_letsencrypt() { echo "###########################################################" echo "#" echo "# Let's encrypt 설치" echo "#" echo "###########################################################" if [ ${USE_LETSENCRYPT} = 1 ] then ${APTCMD} -y install letsencrypt ${APTCMD} -y install python3-certbot-apache fi } install_vsftpd() { echo "###########################################################" echo "#" echo "# vsftpd 패키지 설치" echo "#" echo "###########################################################" if [ ${USE_VSFTPD} = 1 ] then ${APTCMD} -y install vsftpd cp -fv /etc/vsftpd.conf /etc/vsftpd.conf.${TIMESTAMP} fi } install_samba() { echo "###########################################################" echo "#" echo "# samba 패키지 설치" echo "#" echo "###########################################################" if [ ${USE_SAMBA} = 1 ] then echo "samba-common samba-common/workgroup string WORKGROUP" | sudo debconf-set-selections echo "samba-common samba-common/dhcp boolean true" | sudo debconf-set-selections echo "samba-common samba-common/do_debconf boolean true" | sudo debconf-set-selections ${APTCMD} -y install samba ${APTCMD} -y install samba-common-bin ${APTCMD} -y install cifs-utils ${APTCMD} -y install smbclient cp -fv /etc/samba/smb.conf /etc/samba/smb.conf.${TIMESTAMP} fi } install_plexmediaserver() { echo "###########################################################" echo "#" echo "# plex media server 설치" echo "#" echo "###########################################################" if [ ${USE_PLEXMEDIASERVER} = 1 ] then ${APTCMD} -y install apt-transport-https curl https://downloads.plex.tv/plex-keys/PlexSign.key | apt-key add - echo deb https://downloads.plex.tv/repo/deb public main | tee /etc/apt/sources.list.d/plexmediaserver.list ${APTCMD} update ${APTCMD} -y install plexmediaserver sed -i "s/User=plex/User=${NEW_USER}/g" /lib/systemd/system/plexmediaserver.service sed -i "s/Group=plex/Group=${NEW_USER}/g" /lib/systemd/system/plexmediaserver.service chown -R ${NEW_USER}:${NEW_GROUP} /var/lib/plexmediaserver systemctl daemon-reload systemctl stop plexmediaserver ########################################################################## # # 아래 주소로 접속 테스트 # http://192.168.1.20:32400/web/ # ########################################################################## ########################################################################## # # 캐쉬 클리어 # ########################################################################## rm -rf "/var/lib/plexmediaserver/Library/Application Support/Plex Media Server/Cache" rm -rf "/var/lib/plexmediaserver/Library/Application Support/Plex Media Server/Logs" rm -rf "/var/lib/plexmediaserver/Library/Application Support/Plex Media Server/Media" mkdir -p "/var/lib/plexmediaserver/Library/Application Support/Plex Media Server/Cache" mkdir -p "/var/lib/plexmediaserver/Library/Application Support/Plex Media Server/Logs" mkdir -p "/var/lib/plexmediaserver/Library/Application Support/Plex Media Server/Media" chown -R ${NEW_USER}:${NEW_GROUP} /var/lib/plexmediaserver systemctl enable plexmediaserver fi } install_xwindow() { echo "###########################################################" echo "#" echo "# X-Window & LXDE 설치" echo "#" echo "# 설치 후 im-config 를 실행하여 한글입력 환경을 설정한다." echo "#" echo "###########################################################" if [ ${USE_XWINDOW} = 1 ] then ${APTCMD} -y install xorg ${APTCMD} -y install xfonts-base ${APTCMD} -y install xserver-xorg-video-dummy ${APTCMD} -y install policykit-1 if [ ${DESKTOP_ENVIRONMENT} = "LXDE" ] then ${APTCMD} -y install lxde ${APTCMD} -y install lxterminal ${APTCMD} -y install lxde-icon-theme ${APTCMD} -y install lxmusic fi if [ ${DESKTOP_ENVIRONMENT} = "XFCE" ] then ${APTCMD} -y install xfce4 ${APTCMD} -y install xfce4-goodies fi if [ ${DESKTOP_ENVIRONMENT} = "GNOME" ] then ${APTCMD} -y install gnome-session ${APTCMD} -y install gdm3 ${APTCMD} -y install gnome-panel ${APTCMD} -y install metacity ${APTCMD} -y install light-themes fi if [[ ${BOARD_NAME_SHORT} = "opizero2" ]] then echo "Section \"Device\"" > /etc/X11/xorg.conf.d/99-fbdev.conf echo " Identifier \"myfb\"" >> /etc/X11/xorg.conf.d/99-fbdev.conf echo " Driver \"fbdev\"" >> /etc/X11/xorg.conf.d/99-fbdev.conf echo " Option \"fbdev\" \"/dev/fb1\"" >> /etc/X11/xorg.conf.d/99-fbdev.conf echo "EndSection" >> /etc/X11/xorg.conf.d/99-fbdev.conf fi ${APTCMD} -y install wpagui ${APTCMD} -y install language-pack-ko ${APTCMD} -y install korean* ${APTCMD} -y install ubuntu-wallpapers ${APTCMD} -y install xfonts-cyrillic ${APTCMD} -y install xfonts-100dpi ${APTCMD} -y install xfonts-75dpi ${APTCMD} -y install xfonts-tipa ${APTCMD} -y install fonts-unfonts-core fonts-unfonts-extra ${APTCMD} -y install xfonts-baekmuk fonts-baekmuk ${APTCMD} -y install fonts-nanum fonts-nanum-coding fonts-nanum-extra ${APTCMD} -y install fonts-noto-color-emoji ${APTCMD} -y install atril ${APTCMD} -y install filezilla #${APTCMD} -y install chromium-browser ${APTCMD} -y install galculator ${APTCMD} -y install gedit ${APTCMD} -y install gpicview ${APTCMD} -y install putty ${APTCMD} -y install remmina ${APTCMD} -y install remmina-plugin-rdp ${APTCMD} -y install remmina-plugin-secret ${APTCMD} -y install vlc ${APTCMD} -y install thunderbird ${APTCMD} -y install thunderbird-locale-ko ${APTCMD} -y install libreoffice ${APTCMD} -y install libreoffice-l10n-ko ${APTCMD} -y install libreoffice-help-ko update-icon-caches /usr/share/icons/* if [ ${DESKTOP_ENVIRONMENT} = "LXDE" ] then echo "lxsession -s LXDE -e LXDE" > /root/.xsession echo "lxsession -s LXDE -e LXDE" > ${NEW_USER_HOME}/.xsession fi if [ ${DESKTOP_ENVIRONMENT} = "XFCE" ] then echo "xfce4-session" > /root/.xsession echo "xfce4-session" > ${NEW_USER_HOME}/.xsession fi if [ ${DESKTOP_ENVIRONMENT} = "GNOME" ] then echo "gnome-session" > /root/.xsession echo "gnome-session" > ${NEW_USER_HOME}/.xsession fi echo "Section \"ServerFlags\"" > /etc/X11/xorg.conf.d/xorg.conf echo " Option \"BlankTime\" \"0\"" >> /etc/X11/xorg.conf.d/xorg.conf echo " Option \"StandbyTime\" \"0\"" >> /etc/X11/xorg.conf.d/xorg.conf echo " Option \"SuspendTime\" \"0\"" >> /etc/X11/xorg.conf.d/xorg.conf echo " Option \"OffTime\" \"0\"" >> /etc/X11/xorg.conf.d/xorg.conf echo "EndSection" >> /etc/X11/xorg.conf.d/xorg.conf echo "Section \"Device\"" >> /etc/X11/xorg.conf.d/xorg.conf echo " Identifier \"Configured Video Device\"" >> /etc/X11/xorg.conf.d/xorg.conf echo " Driver \"dummy\"" >> /etc/X11/xorg.conf.d/xorg.conf echo "EndSection" >> /etc/X11/xorg.conf.d/xorg.conf echo "Section \"Monitor\"" >> /etc/X11/xorg.conf.d/xorg.conf echo " Identifier \"Configured Monitor\"" >> /etc/X11/xorg.conf.d/xorg.conf echo " HorizSync 31.5-48.5" >> /etc/X11/xorg.conf.d/xorg.conf echo " VertRefresh 50-70" >> /etc/X11/xorg.conf.d/xorg.conf echo " Option \"DPMS\" \"false\"" >> /etc/X11/xorg.conf.d/xorg.conf echo "EndSection" >> /etc/X11/xorg.conf.d/xorg.conf echo "Section \"Screen\"" >> /etc/X11/xorg.conf.d/xorg.conf echo " Identifier \"Default Screen\"" >> /etc/X11/xorg.conf.d/xorg.conf echo " Monitor \"Configured Monitor\"" >> /etc/X11/xorg.conf.d/xorg.conf echo " Device \"Configured Video Device\"" >> /etc/X11/xorg.conf.d/xorg.conf echo " DefaultDepth 24" >> /etc/X11/xorg.conf.d/xorg.conf echo " SubSection \"Display\"" >> /etc/X11/xorg.conf.d/xorg.conf echo " Depth 24" >> /etc/X11/xorg.conf.d/xorg.conf echo " Modes \"1024x800\"" >> /etc/X11/xorg.conf.d/xorg.conf echo " EndSubSection" >> /etc/X11/xorg.conf.d/xorg.conf echo "EndSection" >> /etc/X11/xorg.conf.d/xorg.conf fi } install_xrdp() { echo "###########################################################" echo "#" echo "# xrdp 설치" echo "#" echo "###########################################################" if [ ${USE_XRDP} = 1 ] then ${APTCMD} -y install xrdp ${APTCMD} -y install xorgxrdp cp -f /etc/X11/xrdp/xorg.conf /etc/X11/xrdp/xorg.conf.${TIMESTAMP} cp -f /etc/xrdp/pulse/default.pa /etc/xrdp/pulse/default.pa.${TIMESTAMP} cp -f /etc/xrdp/sesman.ini /etc/xrdp/sesman.ini.${TIMESTAMP} cp -f /etc/xrdp/startwm.sh /etc/xrdp/startwm.sh.${TIMESTAMP} cp -f /etc/xrdp/xrdp.ini /etc/xrdp/xrdp.ini.${TIMESTAMP} cp -f /etc/xrdp/xrdp_keyboard.ini /etc/xrdp/xrdp_keyboard.ini.${TIMESTAMP} sed -i "s/^test -x/#test -x/g" /etc/xrdp/startwm.sh sed -i "s/^exec \/bin\/sh/#exec \/bin\/sh/g" /etc/xrdp/startwm.sh if [ ${DESKTOP_ENVIRONMENT} = "LXDE" ] then echo "lxsession -s LXDE -e LXDE" >> /etc/xrdp/startwm.sh fi if [ ${DESKTOP_ENVIRONMENT} = "XFCE" ] then echo "xfce4-session" >> /etc/xrdp/startwm.sh fi if [ ${DESKTOP_ENVIRONMENT} = "GNOME" ] then echo "gnome-session" >> /etc/xrdp/startwm.sh fi systemctl daemon-reload systemctl enable xrdp.service rm -f /var/log/xrdp* touch /var/log/xrdp.log chown xrdp:adm /var/log/xrdp.log chmod 640 /var/log/xrdp.log fi } install_hangul_ime() { echo "###########################################################" echo "#" echo "# 한글 입력기 설치" echo "#" echo "###########################################################" # 한글 입력기 fcitx if [ ${HANGUL_IME} = "fcitx" ] then ${APTCMD} -y install fcitx-bin ${APTCMD} -y install fcitx-frontend-gtk2 ${APTCMD} -y install fcitx-frontend-gtk3 ${APTCMD} -y install fcitx-frontend-qt5 ${APTCMD} -y install fcitx-hangul ${APTCMD} -y install fcitx-ui-classic ${APTCMD} -y install fonts-noto-cjk ${APTCMD} -y install fonts-noto-cjk-extra ${APTCMD} -y install hunspell-ko ${APTCMD} -y install language-pack-gnome-ko fi # 한글 입력기 ibus if [ ${HANGUL_IME} = "ibus" ] then ${APTCMD} -y install ibus ${APTCMD} -y install ibus-hangul echo "export GTK_IM_MODULE=ibus" >> ${NEW_USER_HOME}/.bashrc echo "export QT_IM_MODULE=ibus" >> ${NEW_USER_HOME}/.bashrc echo "export XMODIFIERS=@im=ibus" >> ${NEW_USER_HOME}/.bashrc echo "export GTK_IM_MODULE=ibus" >> /root/.bashrc echo "export QT_IM_MODULE=ibus" >> /root/.bashrc echo "export XMODIFIERS=@im=ibus" >> /root/.bashrc echo "@ibus-daemon -d" >> /etc/xdg/lxsession/LXDE/autostart fi # 한글 입력기 uim-byeoru if [ ${HANGUL_IME} = "uim" ] then ${APTCMD} -y --install-recommends install uim uim-byeoru ${APTCMD} -y install lxhotkey-plugin-openbox ${APTCMD} -y install im-config fi } install_vncserver() { echo "###########################################################" echo "#" echo "# vncserver설치" echo "#" echo "###########################################################" if [ ${USE_VNC_SERVER} = 1 ] then ${APTCMD} -y install tigervnc-common ${APTCMD} -y install tightvncserver mkdir -p ${NEW_USER_HOME}/.vnc echo '#!/bin/sh' > ${NEW_USER_HOME}/.vnc/xstartup echo "" >> ${NEW_USER_HOME}/.vnc/xstartup echo "# Uncomment the following two lines for normal desktop:" >> ${NEW_USER_HOME}/.vnc/xstartup echo "# unset SESSION_MANAGER" >> ${NEW_USER_HOME}/.vnc/xstartup echo "# exec /etc/X11/xinit/xinitrc" >> ${NEW_USER_HOME}/.vnc/xstartup echo "" >> ${NEW_USER_HOME}/.vnc/xstartup echo "[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup" >> ${NEW_USER_HOME}/.vnc/xstartup echo "[ -r \$HOME/.Xresources ] && xrdb \$HOME/.Xresources" >> ${NEW_USER_HOME}/.vnc/xstartup echo "xsetroot -solid grey -cursor_name left_ptr" >> ${NEW_USER_HOME}/.vnc/xstartup echo "xrdb \$HOME/.Xresources" >> ${NEW_USER_HOME}/.vnc/xstartup if [ ${DESKTOP_ENVIRONMENT} = "LXDE" ] then echo "startlxde &" >> ${NEW_USER_HOME}/.vnc/xstartup fi if [ ${DESKTOP_ENVIRONMENT} = "XFCE" ] then echo "startxfce4 &" >> ${NEW_USER_HOME}/.vnc/xstartup fi if [ ${DESKTOP_ENVIRONMENT} = "GNOME" ] then echo "gnome-session --builtin --session=gnome-flashback-metacity --disable-acceleration-check --debug &" >> ${NEW_USER_HOME}/.vnc/xstartup echo "nautilus &" >> ${NEW_USER_HOME}/.vnc/xstartup echo "gnome-terminal &" >> ${NEW_USER_HOME}/.vnc/xstartup fi chmod 755 ${NEW_USER_HOME}/.vnc/xstartup echo "[Unit]" > /lib/systemd/system/vncserver.service echo "Description=Tight VNC Server" >> /lib/systemd/system/vncserver.service echo "" >> /lib/systemd/system/vncserver.service echo "[Service]" >> /lib/systemd/system/vncserver.service echo "Type=forking" >> /lib/systemd/system/vncserver.service echo "User=${NEW_USER}" >> /lib/systemd/system/vncserver.service echo "ExecStart=/usr/bin/vncserver :1 -deferglyphs all -geometry 1024x768" >> /lib/systemd/system/vncserver.service echo "ExecStop=/usr/bin/vncserver -kill :1" >> /lib/systemd/system/vncserver.service echo "" >> /lib/systemd/system/vncserver.service echo "[Install]" >> /lib/systemd/system/vncserver.service echo "WantedBy=multi-user.target" >> /lib/systemd/system/vncserver.service chown -R ${NEW_USER}:${NEW_GROUP} ${NEW_USER_HOME} chown -R ${NEW_USER}:${NEW_GROUP} ${NEW_USER_HOME}/.vnc systemctl daemon-reload systemctl enable vncserver.service fi } install_transmission_daemon() { echo "###########################################################" echo "#" echo "# transmission-daemon 설치" echo "#" echo "###########################################################" cd ${CURRENT_DIR} if [ ${USE_TRANSMISSION} = 1 ] then ${APTCMD} -y install transmission-daemon cp -fv /etc/transmission-daemon/settings.json /etc/transmission-daemon/settings.json.${TIMESTAMP} sed -i "s/\"rpc-username\": \"transmission\",/\"rpc-username\": \"${NEW_USER}\",/g" /etc/transmission-daemon/settings.json sed -i "s/\"incomplete-dir\": \"\/var\/lib\/transmission-daemon\/Downloads\",/\"incomplete-dir\": \"\\${STORAGE_MOUNT_DIR}\/transmission-daemon\/incomplete\",/g" /etc/transmission-daemon/settings.json sed -i "s/\"download-dir\": \"\/var\/lib\/transmission-daemon\/downloads\",/\"download-dir\": \"\\${STORAGE_MOUNT_DIR}\/transmission-daemon\/downloads\",/g" /etc/transmission-daemon/settings.json sed -i "s/\"rpc-whitelist-enabled\": true,/\"rpc-whitelist-enabled\": false,/g" /etc/transmission-daemon/settings.json invoke-rc.d transmission-daemon reload sed -i "s/USER=debian-transmission/USER=${NEW_USER}/g" /etc/init.d/transmission-daemon sed -i "s/User=debian-transmission/User=${NEW_USER}/g" /lib/systemd/system/transmission-daemon.service mkdir -p ${NEW_USER_HOME}/.config/transmission-daemon cp -fv /etc/transmission-daemon/settings.json ${NEW_USER_HOME}/.config/transmission-daemon/ invoke-rc.d transmission-daemon reload mkdir -p ${STORAGE_MOUNT_DIR}/transmission-daemon/incomplete mkdir -p ${STORAGE_MOUNT_DIR}/transmission-daemon/downloads chown -R ${NEW_USER}:${NEW_GROUP} /etc/transmission-daemon chown -R ${NEW_USER}:${NEW_GROUP} /var/lib/transmission-daemon chown -R ${NEW_USER}:${NEW_GROUP} ${STORAGE_MOUNT_DIR}/transmission-daemon chmod 777 ${STORAGE_MOUNT_DIR}/transmission-daemon/downloads systemctl daemon-reload systemctl enable transmission-daemon.service fi } install_audio() { echo "###########################################################" echo "#" echo "# Install Audio" echo "# TEST)" echo "# aplay -l" echo "# speaker-test" echo "# mpg123 test.mp3" echo "#" echo "###########################################################" cd ${CURRENT_DIR} if [ ${USE_BT_AUDIO} = 1 ] then # 블루투스 패키지 설치 ${APTCMD} -y install bluetooth ${APTCMD} -y install bluez ${APTCMD} -y install bluez-tools ${APTCMD} -y install rfkill ${APTCMD} -y install blueman # 오디오 패키지 설치 ${APTCMD} -y install python-gobject python-gobject-2 ${APTCMD} -y install alsa-base ${APTCMD} -y install alsa-utils ${APTCMD} -y install autoconf ${APTCMD} -y install libasound2 ${APTCMD} -y install libasound2-dev ${APTCMD} -y install libbluetooth-dev ${APTCMD} -y install libdbus-1-dev ${APTCMD} -y install libglib2.0-dev ${APTCMD} -y install libsbc-dev ${APTCMD} -y install libtool ${APTCMD} -y install linux-sound-base ${APTCMD} -y install pavucontrol ${APTCMD} -y install pulseaudio ${APTCMD} -y install mpg123 ${APTCMD} -y install pulseaudio-module-bluetooth echo 'pcm.!default {' > /etc/asound.conf echo ' type hw' >> /etc/asound.conf echo ' card 0' >> /etc/asound.conf echo ' device 0' >> /etc/asound.conf echo '}' >> /etc/asound.conf echo 'ctl.!default {' >> /etc/asound.conf echo ' type hw' >> /etc/asound.conf echo ' card 0' >> /etc/asound.conf echo '}' >> /etc/asound.conf echo "###########################################################" echo "#" echo "# Install Sound-Build bluealsa" echo "#" echo "###########################################################" wget --no-check-certificate -P /tmp "https://github.com/Arkq/bluez-alsa/archive/master.zip" cd /tmp unzip master.zip cd bluez-alsa-master/ autoreconf --install mkdir build && cd build ../configure make -j4 make install rm -rf /tmp/master.zip /tmp/bluez-alsa-master echo '[Unit]' > /lib/systemd/system/bluealsa.service echo 'Description=Bluealsa daemon' >> /lib/systemd/system/bluealsa.service echo 'Documentation=https://github.com/Arkq/bluez-alsa/' >> /lib/systemd/system/bluealsa.service echo 'After=dbus-org.bluez.service' >> /lib/systemd/system/bluealsa.service echo 'Requires=dbus-org.bluez.service' >> /lib/systemd/system/bluealsa.service echo '' >> /lib/systemd/system/bluealsa.service echo '[Service]' >> /lib/systemd/system/bluealsa.service echo 'Type=dbus' >> /lib/systemd/system/bluealsa.service echo 'BusName=org.bluealsa' >> /lib/systemd/system/bluealsa.service echo 'EnvironmentFile=-/etc/default/bluealsa' >> /lib/systemd/system/bluealsa.service echo 'ExecStart=/usr/bin/bluealsa $OPTIONS' >> /lib/systemd/system/bluealsa.service echo 'Restart=on-failure' >> /lib/systemd/system/bluealsa.service echo 'ProtectSystem=strict' >> /lib/systemd/system/bluealsa.service echo 'ProtectHome=true' >> /lib/systemd/system/bluealsa.service echo 'PrivateTmp=true' >> /lib/systemd/system/bluealsa.service echo 'PrivateDevices=true' >> /lib/systemd/system/bluealsa.service echo 'RemoveIPC=true' >> /lib/systemd/system/bluealsa.service echo 'RestrictAddressFamilies=AF_UNIX AF_BLUETOOTH' >> /lib/systemd/system/bluealsa.service echo '; Also non-privileged can user be used' >> /lib/systemd/system/bluealsa.service echo '; this example assumes a user and group called 'bluealsa' exist' >> /lib/systemd/system/bluealsa.service echo ';User=bluealsa' >> /lib/systemd/system/bluealsa.service echo ';Group=bluealsa' >> /lib/systemd/system/bluealsa.service echo ';NoNewPrivileges=true' >> /lib/systemd/system/bluealsa.service echo '' >> /lib/systemd/system/bluealsa.service echo '[Install]' >> /lib/systemd/system/bluealsa.service echo 'WantedBy=bluetooth.target' >> /lib/systemd/system/bluealsa.service systemctl daemon-reload systemctl enable bluealsa.service systemctl start bluealsa.service echo '#!/bin/bash' > ~/bluetooth_autoconnect.sh echo 'MACADDR1="1c:52:16:6d:0a:7b"' >> ~/bluetooth_autoconnect.sh echo 'bluetoothctl << EOF' >> ~/bluetooth_autoconnect.sh echo 'connect ${MACADDR1}' >> ~/bluetooth_autoconnect.sh echo 'EOF' >> ~/bluetooth_autoconnect.sh chmod 755 ~/bluetooth_autoconnect.sh # 오디오 디바이스 활성화 armbian-config main=System selection=Hardware selection=analog-codec fi #bluetoothctl #[bluetooth]# scan on #... #[bluetooth]# scan off #[bluetooth]# pair 1c:52:16:6d:0a:7b #[bluetooth]# connect 1c:52:16:6d:0a:7b #[bluetooth]# quit #aplay -D bluealsa:DEV=1c:52:16:6d:0a:7b,PROFILE=a2dp test.wav } get_pydiouser_pw() { echo "###########################################################" echo "#" echo "# pydio DB 비밀번호 설정" echo "#" echo "###########################################################" if [ ${USE_PYDIO} = 1 ] then echo -n ">> Input 'pydiouser' DB Password: " read PYDIO_DB_PW echo "'pydiouser' DB Password: ${PYDIO_DB_PW}" echo "" fi } setup_pydio_db() { echo "###########################################################" echo "#" echo "# pydio DB 설정" echo "#" echo "###########################################################" if [ ${USE_PYDIO} = 1 ] then cd ${CURRENT_DIR} systemctl restart mysql echo "DROP DATABASE IF EXISTS pydio;" > _pydio_tmp_ echo "DROP USER IF EXISTS 'pydiouser'@'localhost';" >> _pydio_tmp_ echo "DROP USER IF EXISTS 'pydiouser'@'%';" >> _pydio_tmp_ echo "CREATE DATABASE pydio CHARACTER SET utf8 COLLATE utf8_bin;" >> _pydio_tmp_ echo "GRANT ALL PRIVILEGES ON pydio.* TO 'pydiouser'@'localhost' IDENTIFIED BY '${PYDIO_DB_PW}' WITH GRANT OPTION;" >> _pydio_tmp_ echo "GRANT ALL PRIVILEGES ON pydio.* TO 'pydiouser'@'%' IDENTIFIED BY '${PYDIO_DB_PW}' WITH GRANT OPTION;" >> _pydio_tmp_ echo "FLUSH PRIVILEGES;" >> _pydio_tmp_ mysql -u root < _pydio_tmp_ rm -f _pydio_tmp_ fi } install_pydio() { echo "###########################################################" echo "#" echo "# pydio 설치" echo "#" echo "###########################################################" if [ ${USE_PYDIO} = 1 ] then cd ${CURRENT_DIR} wget --no-check-certificate "https://download.pydio.com/pub/core/archives/pydio-core-${PYDIO_VERSION}.tar.gz" tar -C ${WWW_DIR} -xzf pydio-core-${PYDIO_VERSION}.tar.gz mv ${WWW_DIR}/pydio-core-${PYDIO_VERSION} ${WWW_DIR}/pydio rm -f pydio-core-${PYDIO_VERSION}.tar.gz # php.ini 수정 PHP_VER=$(php --version | head -n 1 | cut -d " " -f 2 | cut -c 1-3) cp -f /etc/php/${PHP_VER}/apache2/php.ini /etc/php/${PHP_VER}/apache2/php.ini.${TIMESTAMP} sed -i "s/^output_buffering = 4096/output_buffering = off/g" /etc/php/${PHP_VER}/apache2/php.ini # Session 경로 설정 cp -f ${WWW_DIR}/pydio/conf/bootstrap_conf.php ${WWW_DIR}/pydio/conf/bootstrap_conf.php.${TIMESTAMP} sed -i "s/^\/\/\$AJXP_INISET\[\"session\.save_path\"\] = AJXP_DATA_PATH\.\"\/tmp\/sessions\"/\$AJXP_INISET\[\"session\.save_path\"\] = \"\/tmp\"/g" ${WWW_DIR}/pydio/conf/bootstrap_conf.php # 코드셋 설정 sed -i "s/^\/\/define(\"AJXP_LOCALE\", \"en_EN\.UTF-8\")/define(\"AJXP_LOCALE\", \"ko_KR\.UTF-8\")/g" ${WWW_DIR}/pydio/conf/bootstrap_conf.php # "Deprecated: Function get_magic_quotes_gpc() in PHP 7.4" 오류 수정 sync cp -f ${WWW_DIR}/pydio/core/src/pydio/Tests/PHP_magic_quotes.php ${WWW_DIR}/pydio/core/src/pydio/Tests/PHP_magic_quotes.php.${TIMESTAMP} cp -f ${WWW_DIR}/pydio/core/src/pydio/Core/Utils/Vars/InputFilter.php ${WWW_DIR}/pydio/core/src/pydio/Core/Utils/Vars/InputFilter.php.${TIMESTAMP} sed -i "s/get_magic_quotes_gpc()/false/g" ${WWW_DIR}/pydio/core/src/pydio/Tests/PHP_magic_quotes.php sed -i "s/get_magic_quotes_gpc()/false/g" ${WWW_DIR}/pydio/core/src/pydio/Core/Utils/Vars/InputFilter.php # 공용파일 디렉토리 링크 rm -rf ${WWW_DIR}/pydio/data/files ln -sf ${STORAGE_MOUNT_DIR} ${WWW_DIR}/pydio/data/files chown -R www-data:www-data ${WWW_DIR} fi } install_vaultwarden() { echo "###########################################################" echo "#" echo "# vaultwarden(bitwarden unofficial 버전) 설치" echo "# https://github.com/dani-garcia/vaultwarden" echo "#" echo "###########################################################" if [ ${USE_BITWARDEN} = 1 ] then # docker 이미지 정리 및 제거 docker stop $(docker ps -a -q) docker rm -f $(docker ps -a -q) docker rmi -f $(docker images -a -q) # vaultwarden 설치 이미지 정리 docker pull vaultwarden/server:latest mkdir -p /var/lib/vaultwarden rm -rf /var/lib/vaultwarden/* # Let's encrypt 인증서를 사용하여 5443포트로 실행한다. # Let's encrypt 사용시 cert.pem은 fullchain.pem으로 교체하여 사용 docker run -d --name vaultwarden -e ROCKET_TLS="{certs=\"/ssl/live/hasu0707.duckdns.org/cert.pem\",key=\"/ssl/live/hasu0707.duckdns.org/privkey.pem\"}" -v /etc/letsencrypt/:/ssl/ -v /var/lib/vaultwarden/:/data/ -p 5443:80 vaultwarden/server:latest # systemd 서비스 등록 echo "[Unit]" > /lib/systemd/system/docker-vaultwarden.service echo "Wants=docker.service" >> /lib/systemd/system/docker-vaultwarden.service echo "After=docker.service" >> /lib/systemd/system/docker-vaultwarden.service echo "" >> /lib/systemd/system/docker-vaultwarden.service echo "[Service]" >> /lib/systemd/system/docker-vaultwarden.service echo "RemainAfterExit=yes" >> /lib/systemd/system/docker-vaultwarden.service echo "ExecStart=/usr/bin/docker start vaultwarden" >> /lib/systemd/system/docker-vaultwarden.service echo "ExecStop=/usr/bin/docker stop vaultwarden" >> /lib/systemd/system/docker-vaultwarden.service echo "" >> /lib/systemd/system/docker-vaultwarden.service echo "[Install]" >> /lib/systemd/system/docker-vaultwarden.service echo "WantedBy=multi-user.target" >> /lib/systemd/system/docker-vaultwarden.service ln -sf /lib/systemd/system/docker-vaultwarden.service /etc/systemd/system/docker-vaultwarden.service systemctl daemon-reload systemctl enable docker-vaultwarden.service fi } install_extplorer() { echo "###########################################################" echo "#" echo "# eXtplorer 설치" echo "#" echo "###########################################################" if [ ${USE_EXTPLORER} = 1 ] then cd ${CURRENT_DIR} wget "http://extplorer.net/attachments/download/94/eXtplorer_${EXTPLORER_VERSION}.zip" mkdir -p ${WWW_DIR}/extplorer unzip -d ${WWW_DIR}/extplorer eXtplorer_${EXTPLORER_VERSION}.zip rm -f eXtplorer_${EXTPLORER_VERSION}.zip tar -C ${WWW_DIR}/extplorer -xzf ${WWW_DIR}/extplorer/scripts.tar.gz chown -R www-data:www-data ${WWW_DIR} fi } setup_apache2_index() { echo "###########################################################" echo "#" echo "# index.html, phpinfo.php 작성" echo "#" echo "###########################################################" echo '<!DOCTYPE html>' > ${WWW_DIR}/index.php echo "<html lang=\"ko\">" >> ${WWW_DIR}/index.php echo " <head>" >> ${WWW_DIR}/index.php echo " <meta charset=\"UTF-8\">" >> ${WWW_DIR}/index.php echo " <title>${BOARD_NAME}</title>" >> ${WWW_DIR}/index.php echo " </head>" >> ${WWW_DIR}/index.php echo " <body><ul>" >> ${WWW_DIR}/index.php if [ ${USE_PYDIO} = 1 ] then echo " <li><a href=\"/pydio/\" target=\"_blank\">Pydio - Enterprise File Sharing & Sync Platform</a></li>" >> ${WWW_DIR}/index.php fi if [ ${USE_EXTPLORER} = 1 ] then echo " <li><a href=\"/extplorer/\" target=\"_blank\">eXtplorer - a PHP-based File Manager</a></li>" >> ${WWW_DIR}/index.php fi echo " </ul></body>" >> ${WWW_DIR}/index.php echo "</html>" >> ${WWW_DIR}/index.php if [ ${USE_PHP} = 1 ] then echo '<?php phpinfo(); ?>' > ${WWW_DIR}/phpinfo.php fi } make_working_dir() { echo "###########################################################" echo "#" echo "# 디폴트 외장하드 마운트 디렉토리 생성" echo "#" echo "###########################################################" mkdir -p ${NEW_USER_HOME} chmod 755 ${NEW_USER_HOME} chown -R ${NEW_USER}:${NEW_GROUP} ${NEW_USER_HOME} mkdir -p ${STORAGE_MOUNT_DIR} chmod 755 ${STORAGE_MOUNT_DIR} chown -R ${NEW_USER}:${NEW_GROUP} ${STORAGE_MOUNT_DIR} mkdir ${AUTOFS_DIR} } set_fstab() { echo "###########################################################" echo "#" echo "# 외장 하드디스크 마운트 등록" echo "#" echo "###########################################################" mkdir -p ${STORAGE_MOUNT_DIR} echo "" >> /etc/fstab echo "# Storage" >> /etc/fstab echo "#/dev/disk/by-id/ata-ST4000DM004-2CV104_WFN5L8WV-part1 ${STORAGE_MOUNT_DIR} ntfs-3g defaults 0 5" >> /etc/fstab echo "#/dev/sda1 ${STORAGE_MOUNT_DIR} ntfs-3g defaults 0 5" >> /etc/fstab echo "#/dev/sda1 ${STORAGE_MOUNT_DIR} ext4 defaults 0 6" >> /etc/fstab echo "" >> /etc/fstab echo "# samba CIFS" >> /etc/fstab echo "#//192.168.1.10/odroid_hc2 ${STORAGE_MOUNT_DIR} cifs _netdev,username=armbian,password=MYPASSWD,uid=1000,gid=1000,rw,iocharset=utf8 0 0" >> /etc/fstab echo "#//10.10.10.1/hasu0707 ${STORAGE_MOUNT_DIR}/hasu0707@www.esvali.com cifs _netdev,username=hasu0707,password=MYPASSWD,uid=1000,gid=1000,rw,iocharset=utf8,vers=1.0 0 0" >> /etc/fstab echo "#//10.10.10.2/share ${STORAGE_MOUNT_DIR}/share@nas.esvali.com cifs _netdev,username=share,password=MYPASSWD,uid=1000,gid=1000,rw,iocharset=utf8,vers=1.0 0 0" >> /etc/fstab echo "" >> /etc/fstab echo "# NFS" >> /etc/fstab echo "#hasu0707.duckdns.org:${STORAGE_MOUNT_DIR} ${STORAGE_MOUNT_DIR}/armbian@hasu0707.duckdns.org nfs defaults,_netdev 0 0" >> /etc/fstab } set_default_mount_dir() { echo "###########################################################" echo "#" echo "# 외장 하드디스크 기본 마운트 디렉토리 생성" echo "#" echo "###########################################################" if [ ! -d ${STORAGE_MOUNT_DIR}/0_tmp ] then mkdir -p ${STORAGE_MOUNT_DIR} #mkdir -p "${STORAGE_MOUNT_DIR}/armbian@hasu0707.duckdns.org" #mkdir -p "${STORAGE_MOUNT_DIR}/hasu0707@www.esvali.com" #mkdir -p "${STORAGE_MOUNT_DIR}/share@nas.esvali.com" chown -R ${NEW_USER}:${NEW_GROUP} ${STORAGE_MOUNT_DIR} fi } set_samba() { echo "###########################################################" echo "#" echo "# samba 설정" echo "#" echo "###########################################################" sync if [ ${USE_SAMBA} = 1 ] then echo "" >> /etc/samba/smb.conf echo "[global]" >> /etc/samba/smb.conf echo "netbios name = ${BOARD_NAME_SHORT}" >> /etc/samba/smb.conf echo "workgroup = WORKGROUP" >> /etc/samba/smb.conf echo "hosts allow = 127. 10.10.10. 192.168.1." >> /etc/samba/smb.conf echo "#socket options = IPTOS_LOWDELAY SO_RCVBUF=131072 SO_SNDBUF=131072 TCP_NODELAY" >> /etc/samba/smb.conf echo "#max xmit = 16644" >> /etc/samba/smb.conf echo "#read raw = no" >> /etc/samba/smb.conf echo "#write raw = no" >> /etc/samba/smb.conf echo "log level = 0" >> /etc/samba/smb.conf echo "" >> /etc/samba/smb.conf echo "client ipc min protocol = NT1" >> /etc/samba/smb.conf echo "client ipc max protocol = SMB3" >> /etc/samba/smb.conf echo "client min protocol = NT1" >> /etc/samba/smb.conf echo "client max protocol = SMB3" >> /etc/samba/smb.conf echo "server min protocol = NT1" >> /etc/samba/smb.conf echo "server max protocol = SMB3" >> /etc/samba/smb.conf echo "" >> /etc/samba/smb.conf echo "[homes]" >> /etc/samba/smb.conf echo " comment = Home Directories" >> /etc/samba/smb.conf echo " browseable = no" >> /etc/samba/smb.conf echo " writable = yes" >> /etc/samba/smb.conf echo "" >> /etc/samba/smb.conf echo "[${BOARD_NAME_SHORT}]" >> /etc/samba/smb.conf echo " comment = ${BOARD_NAME}" >> /etc/samba/smb.conf echo " path = ${STORAGE_MOUNT_DIR}" >> /etc/samba/smb.conf echo " browseble = yes" >> /etc/samba/smb.conf echo " writable = yes" >> /etc/samba/smb.conf echo " share modes = yes" >> /etc/samba/smb.conf echo " valid users = ${NEW_USER}" >> /etc/samba/smb.conf echo " read only = no" >> /etc/samba/smb.conf echo " create mode = 0660" >> /etc/samba/smb.conf echo " directory mode = 0770" >> /etc/samba/smb.conf echo " guest ok = no" >> /etc/samba/smb.conf echo "" >> /etc/samba/smb.conf echo "[media]" >> /etc/samba/smb.conf echo " comment = /media directory" >> /etc/samba/smb.conf echo " path = /media" >> /etc/samba/smb.conf echo " browseble = yes" >> /etc/samba/smb.conf echo " writable = yes" >> /etc/samba/smb.conf echo " share modes = yes" >> /etc/samba/smb.conf echo " valid users = ${NEW_USER}" >> /etc/samba/smb.conf echo " read only = no" >> /etc/samba/smb.conf echo " create mode = 0660" >> /etc/samba/smb.conf echo " directory mode = 0770" >> /etc/samba/smb.conf echo " guest ok = no" >> /etc/samba/smb.conf sed -i 's/read only = yes/read only = no/g' /etc/samba/smb.conf sed -i 's/create mask = 0700/create mask = 0755/g' /etc/samba/smb.conf sed -i 's/directory mask = 0700/directory mask = 0755/g' /etc/samba/smb.conf sed -i 's/# This might need tweaking when using external authentication schemes/ writable = yes/g' /etc/samba/smb.conf mkdir -p ${STORAGE_MOUNT_DIR} chown -R ${NEW_USER}:${NEW_GROUP} ${STORAGE_MOUNT_DIR} chown -R ${NEW_USER}:${NEW_GROUP} /media chmod 755 ${STORAGE_MOUNT_DIR} chmod 755 /media systemctl daemon-reload systemctl enable nmbd.service systemctl enable smbd.service fi } set_dhcpd() { echo "###########################################################" echo "#" echo "# dhcpd 설정" echo "#" echo "###########################################################" sync echo "ddns-update-style none;" > /etc/dhcp/dhcpd.conf echo "default-lease-time 86400;" >> /etc/dhcp/dhcpd.conf echo "max-lease-time 172800;" >> /etc/dhcp/dhcpd.conf echo "" >> /etc/dhcp/dhcpd.conf echo "subnet 192.168.1.0 netmask 255.255.255.248 {" >> /etc/dhcp/dhcpd.conf echo " range 192.168.1.2 192.168.1.6;" >> /etc/dhcp/dhcpd.conf echo " option domain-name \"local\";" >> /etc/dhcp/dhcpd.conf echo " option domain-name-servers ${DNS_SERVER1}, ${DNS_SERVER2};" >> /etc/dhcp/dhcpd.conf echo " option subnet-mask 255.255.255.248;" >> /etc/dhcp/dhcpd.conf echo " option routers 192.168.1.1;" >> /etc/dhcp/dhcpd.conf echo " option broadcast-address 192.168.1.7;" >> /etc/dhcp/dhcpd.conf echo " default-lease-time 86400;" >> /etc/dhcp/dhcpd.conf echo " max-lease-time 172800;" >> /etc/dhcp/dhcpd.conf echo "}" >> /etc/dhcp/dhcpd.conf } set_vsftpd() { echo "###########################################################" echo "#" echo "# vsftpd 설정" echo "#" echo "###########################################################" if [ ${USE_VSFTPD} = 1 ] then echo "allow_writeable_chroot=YES" >> /etc/vsftpd.conf echo "anon_mkdir_write_enable=NO" >> /etc/vsftpd.conf echo "anon_upload_enable=NO" >> /etc/vsftpd.conf echo "anonymous_enable=NO" >> /etc/vsftpd.conf echo "chroot_local_user=YES" >> /etc/vsftpd.conf echo "file_open_mode=0644" >> /etc/vsftpd.conf echo "force_dot_files=NO" >> /etc/vsftpd.conf echo "listen=YES" >> /etc/vsftpd.conf echo "listen_ipv6=NO" >> /etc/vsftpd.conf echo "local_enable=YES" >> /etc/vsftpd.conf echo "local_umask=0002" >> /etc/vsftpd.conf echo "write_enable=YES" >> /etc/vsftpd.conf echo >> /etc/vsftpd.conf echo "# Passive Mode" >> /etc/vsftpd.conf echo "pasv_enable=YES" >> /etc/vsftpd.conf echo "pasv_min_port=5500" >> /etc/vsftpd.conf echo "pasv_max_port=5532" >> /etc/vsftpd.conf echo >> /etc/vsftpd.conf echo "# Setup the virtual users config folder" >> /etc/vsftpd.conf echo "user_config_dir=/etc/vsftpd/user_config_dir/" >> /etc/vsftpd.conf mkdir -p /etc/vsftpd/user_config_dir echo "local_root=${STORAGE_MOUNT_DIR}" > /etc/vsftpd/user_config_dir/${NEW_USER} echo "write_enable=YES" >> /etc/vsftpd/user_config_dir/${NEW_USER} systemctl daemon-reload systemctl enable vsftpd.service echo "nf_conntrack_ftp" >> /etc/modules fi } set_apache2() { echo "###########################################################" echo "#" echo "# apache2 설정" echo "#" echo "###########################################################" if [ ${USE_APACHE2} = 1 ] then echo "" >> /etc/apache2/apache2.conf echo "IndexOptions IgnoreCase FancyIndexing FoldersFirst NameWidth=* DescriptionWidth=* SuppressHTMLPreamble" >> /etc/apache2/apache2.conf echo "# opizero2에서 Mutex 옵션이 없으면 작동하지 않는다." >> /etc/apache2/apache2.conf echo "Mutex posixsem" >> /etc/apache2/apache2.conf # 포트 변경 및 추가 sed -i "s/Listen 80/Listen ${HTTP_PORT}/g" /etc/apache2/ports.conf if [ ${USE_WEBDAV} = 1 ] then echo "Listen ${WEBDAV_PORT}" >> /etc/apache2/ports.conf fi # /etc/apache2/sites-available/${MY_SITE}-webdav.conf if [ ${USE_WEBDAV} = 1 ] then echo "DavLockDB ${NEW_USER_HOME}/DavLock" > /etc/apache2/sites-available/${MY_SITE}-webdav.conf echo "<VirtualHost _default_:${WEBDAV_PORT}>" >> /etc/apache2/sites-available/${MY_SITE}-webdav.conf echo " ServerAdmin ${NEW_USER}@localhost" >> /etc/apache2/sites-available/${MY_SITE}-webdav.conf echo " DocumentRoot \"${STORAGE_MOUNT_DIR}\"" >> /etc/apache2/sites-available/${MY_SITE}-webdav.conf echo " ErrorLog \${APACHE_LOG_DIR}/webdav_error.log" >> /etc/apache2/sites-available/${MY_SITE}-webdav.conf echo " CustomLog \${APACHE_LOG_DIR}/webdav_access.log combined" >> /etc/apache2/sites-available/${MY_SITE}-webdav.conf echo " Alias /webdav ${STORAGE_MOUNT_DIR}" >> /etc/apache2/sites-available/${MY_SITE}-webdav.conf echo " <Directory \"${STORAGE_MOUNT_DIR}\">" >> /etc/apache2/sites-available/${MY_SITE}-webdav.conf echo " DAV On" >> /etc/apache2/sites-available/${MY_SITE}-webdav.conf echo " Options Indexes FollowSymLinks MultiViews" >> /etc/apache2/sites-available/${MY_SITE}-webdav.conf echo " AuthType Digest" >> /etc/apache2/sites-available/${MY_SITE}-webdav.conf echo " AuthName webdav" >> /etc/apache2/sites-available/${MY_SITE}-webdav.conf echo " AuthUserFile /etc/apache2/users.password" >> /etc/apache2/sites-available/${MY_SITE}-webdav.conf echo " Require valid-user" >> /etc/apache2/sites-available/${MY_SITE}-webdav.conf echo " </Directory>" >> /etc/apache2/sites-available/${MY_SITE}-webdav.conf echo " # SSL" >> /etc/apache2/sites-available/${MY_SITE}-webdav.conf echo " SSLEngine on" >> /etc/apache2/sites-available/${MY_SITE}-webdav.conf if [ ${USE_LETSENCRYPT} = 1 ] then echo " SSLCertificateFile /etc/letsencrypt/live/${LETSENCRYPT_DOMAIN}/cert.pem" >> /etc/apache2/sites-available/${MY_SITE}-webdav.conf echo " SSLCertificateKeyFile /etc/letsencrypt/live/${LETSENCRYPT_DOMAIN}/privkey.pem" >> /etc/apache2/sites-available/${MY_SITE}-webdav.conf echo " SSLCertificateChainFile /etc/letsencrypt/live/${LETSENCRYPT_DOMAIN}/chain.pem" >> /etc/apache2/sites-available/${MY_SITE}-webdav.conf else echo " SSLCertificateFile /etc/apache2/ssl/certs/ssl-cert-${MY_SITE}.crt" >> /etc/apache2/sites-available/${MY_SITE}-webdav.conf echo " SSLCertificateKeyFile /etc/apache2/ssl/private/ssl-cert-${MY_SITE}.key" >> /etc/apache2/sites-available/${MY_SITE}-webdav.conf fi echo " SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire" >> /etc/apache2/sites-available/${MY_SITE}-webdav.conf echo " <FilesMatch \"\\.(cgi|shtml|phtml|php)\$\">" >> /etc/apache2/sites-available/${MY_SITE}-webdav.conf echo " SSLOptions +StdEnvVars" >> /etc/apache2/sites-available/${MY_SITE}-webdav.conf echo " </FilesMatch>" >> /etc/apache2/sites-available/${MY_SITE}-webdav.conf echo " <Directory /usr/lib/cgi-bin>" >> /etc/apache2/sites-available/${MY_SITE}-webdav.conf echo " SSLOptions +StdEnvVars" >> /etc/apache2/sites-available/${MY_SITE}-webdav.conf echo " </Directory>" >> /etc/apache2/sites-available/${MY_SITE}-webdav.conf echo "</VirtualHost>" >> /etc/apache2/sites-available/${MY_SITE}-webdav.conf a2ensite ${MY_SITE}-webdav fi # /etc/apache2/sites-available/${MY_SITE}-http.conf echo "<VirtualHost _default_:80>" > /etc/apache2/sites-available/${MY_SITE}-http.conf echo " ServerAdmin ${NEW_USER}@localhost" >> /etc/apache2/sites-available/${MY_SITE}-http.conf echo " DocumentRoot \"${WWW_DIR}\"" >> /etc/apache2/sites-available/${MY_SITE}-http.conf echo " ErrorLog \${APACHE_LOG_DIR}/error.log" >> /etc/apache2/sites-available/${MY_SITE}-http.conf echo " CustomLog \${APACHE_LOG_DIR}/access.log combined" >> /etc/apache2/sites-available/${MY_SITE}-http.conf echo " <Directory \"${WWW_DIR}\">" >> /etc/apache2/sites-available/${MY_SITE}-http.conf echo " Options Indexes FollowSymLinks MultiViews ExecCGI" >> /etc/apache2/sites-available/${MY_SITE}-http.conf echo " AllowOverride FileInfo AuthConfig Limit" >> /etc/apache2/sites-available/${MY_SITE}-http.conf echo " Order Deny,Allow" >> /etc/apache2/sites-available/${MY_SITE}-http.conf echo " Allow from all" >> /etc/apache2/sites-available/${MY_SITE}-http.conf echo " Require all granted" >> /etc/apache2/sites-available/${MY_SITE}-http.conf echo " </Directory>" >> /etc/apache2/sites-available/${MY_SITE}-http.conf echo "</VirtualHost>" >> /etc/apache2/sites-available/${MY_SITE}-http.conf a2dissite 000-default a2ensite ${MY_SITE}-http # /etc/apache2/sites-available/${MY_SITE}-https.conf echo "<IfModule mod_ssl.c>" > /etc/apache2/sites-available/${MY_SITE}-https.conf echo " <VirtualHost _default_:443>" >> /etc/apache2/sites-available/${MY_SITE}-https.conf echo " ServerAdmin ${NEW_USER}@localhost" >> /etc/apache2/sites-available/${MY_SITE}-https.conf echo " DocumentRoot \"${WWW_DIR}\"" >> /etc/apache2/sites-available/${MY_SITE}-https.conf echo " ErrorLog \${APACHE_LOG_DIR}/error.log" >> /etc/apache2/sites-available/${MY_SITE}-https.conf echo " CustomLog \${APACHE_LOG_DIR}/access.log combined" >> /etc/apache2/sites-available/${MY_SITE}-https.conf echo " <Directory \"${WWW_DIR}\">" >> /etc/apache2/sites-available/${MY_SITE}-https.conf echo " Options Indexes FollowSymLinks MultiViews ExecCGI" >> /etc/apache2/sites-available/${MY_SITE}-https.conf echo " AllowOverride FileInfo AuthConfig Limit" >> /etc/apache2/sites-available/${MY_SITE}-https.conf echo " Order Deny,Allow" >> /etc/apache2/sites-available/${MY_SITE}-https.conf echo " Allow from all" >> /etc/apache2/sites-available/${MY_SITE}-https.conf echo " Require all granted" >> /etc/apache2/sites-available/${MY_SITE}-https.conf echo " </Directory>" >> /etc/apache2/sites-available/${MY_SITE}-https.conf echo " SSLEngine on" >> /etc/apache2/sites-available/${MY_SITE}-https.conf if [ ${USE_LETSENCRYPT} = 1 ] then echo " SSLCertificateFile /etc/letsencrypt/live/${LETSENCRYPT_DOMAIN}/cert.pem" >> /etc/apache2/sites-available/${MY_SITE}-https.conf echo " SSLCertificateKeyFile /etc/letsencrypt/live/${LETSENCRYPT_DOMAIN}/privkey.pem" >> /etc/apache2/sites-available/${MY_SITE}-https.conf echo " SSLCertificateChainFile /etc/letsencrypt/live/${LETSENCRYPT_DOMAIN}/chain.pem" >> /etc/apache2/sites-available/${MY_SITE}-https.conf else echo " SSLCertificateFile /etc/apache2/ssl/certs/ssl-cert-${MY_SITE}.crt" >> /etc/apache2/sites-available/${MY_SITE}-https.conf echo " SSLCertificateKeyFile /etc/apache2/ssl/private/ssl-cert-${MY_SITE}.key" >> /etc/apache2/sites-available/${MY_SITE}-https.conf fi echo " <FilesMatch \"\\.(cgi|shtml|phtml|php)\$\">" >> /etc/apache2/sites-available/${MY_SITE}-https.conf echo " SSLOptions +StdEnvVars" >> /etc/apache2/sites-available/${MY_SITE}-https.conf echo " </FilesMatch>" >> /etc/apache2/sites-available/${MY_SITE}-https.conf echo " <Directory /usr/lib/cgi-bin>" >> /etc/apache2/sites-available/${MY_SITE}-https.conf echo " SSLOptions +StdEnvVars" >> /etc/apache2/sites-available/${MY_SITE}-https.conf echo " </Directory>" >> /etc/apache2/sites-available/${MY_SITE}-https.conf echo " </VirtualHost>" >> /etc/apache2/sites-available/${MY_SITE}-https.conf echo "</IfModule>" >> /etc/apache2/sites-available/${MY_SITE}-https.conf a2dissite default-ssl a2ensite ${MY_SITE}-https sed -i "s/ServerName/#ServerName/g" /etc/apache2/apache2.conf echo "" >> /etc/apache2/apache2.conf if [ ${USE_LETSENCRYPT} = 1 ] then echo "ServerName ${LETSENCRYPT_DOMAIN}" >> /etc/apache2/apache2.conf else echo "ServerName localhost" >> /etc/apache2/apache2.conf fi chown -R www-data:www-data ${WWW_DIR} chown www-data:www-data /etc/apache2/users.password fi } set_letsencrypt() { echo "###########################################################" echo "#" echo "# Let's encrypt 설정파일 생성" echo "#" echo "###########################################################" if [ ${USE_LETSENCRYPT} = 1 ] then echo "archive_dir = /etc/letsencrypt/archive/${LETSENCRYPT_DOMAIN}" > /etc/letsencrypt/renewal/${LETSENCRYPT_DOMAIN}.conf echo "cert = /etc/letsencrypt/live/${LETSENCRYPT_DOMAIN}/cert.pem" >> /etc/letsencrypt/renewal/${LETSENCRYPT_DOMAIN}.conf echo "privkey = /etc/letsencrypt/live/${LETSENCRYPT_DOMAIN}/privkey.pem" >> /etc/letsencrypt/renewal/${LETSENCRYPT_DOMAIN}.conf echo "chain = /etc/letsencrypt/live/${LETSENCRYPT_DOMAIN}/chain.pem" >> /etc/letsencrypt/renewal/${LETSENCRYPT_DOMAIN}.conf echo "fullchain = /etc/letsencrypt/live/${LETSENCRYPT_DOMAIN}/fullchain.pem" >> /etc/letsencrypt/renewal/${LETSENCRYPT_DOMAIN}.conf fi } set_timezone_locale() { echo "###########################################################" echo "#" echo "# timezone & locale" echo "#" echo "###########################################################" ${APTCMD} -y install language-pack-ko locale-gen ko_KR.UTF-8 update-locale LC_ALL="ko_KR.UTF-8" LANG="ko_KR.UTF-8" LANGUAGE="ko_KR:ko:en_US:en" LC_MESSAGES="POSIX" timedatectl set-timezone "Asia/Seoul" } set_sshd() { echo "###########################################################" echo "#" echo "# /etc/ssh/sshd_config 수정" echo "#" echo "###########################################################" sed -i "s/PermitRootLogin without-password/PermitRootLogin yes/g" /etc/ssh/sshd_config } set_os_default_systemd() { echo "###########################################################" echo "#" echo "# 불필요한 서비스 제거" echo "#" echo "# enable 되어있는 서비스 보기" echo "# ls -1 /etc/rc\$(runlevel| cut -d\" \" -f2).d/S* | awk -F'[0-9][0-9]' '{print \"Startup :-> \" \$2}'" echo "# systemctl -t service -a" echo "# systemctl list-unit-files" echo "#" echo "###########################################################" cd ${CURRENT_DIR} # rc.local 활성화 echo "" >> /lib/systemd/system/rc-local.service echo "[Install]" >> /lib/systemd/system/rc-local.service echo "WantedBy=multi-user.target" >> /lib/systemd/system/rc-local.service systemctl daemon-reload systemctl disable acpid.service systemctl disable alsa-utils.service systemctl disable ${NEW_USER}-hardware-monitor.service systemctl disable ${NEW_USER}-ramlog.service systemctl disable avahi-daemon.service systemctl disable bluetooth.service systemctl disable hddtemp.service systemctl disable hostapd.service systemctl disable isc-dhcp-server.service systemctl disable isc-dhcp-server6.service systemctl disable pppd-dns.service systemctl disable rsync.service systemctl disable samba-ad-dc.service systemctl disable sysstat.service systemctl disable udhcpd.service systemctl disable ureadahead.service systemctl enable cron.service systemctl enable dbus.service systemctl enable rc-local.service systemctl enable resolvconf.service systemctl enable rsyslog.service systemctl enable ssh.service systemctl daemon-reload } set_ntpd() { echo "###########################################################" echo "#" echo "# ntp 서비스 설정" echo "#" echo "###########################################################" sed -i "s/0.ubuntu.pool.ntp.org/3.kr.pool.ntp.org/g" /etc/ntp.conf sed -i "s/1.ubuntu.pool.ntp.org/0.asia.pool.ntp.org/g" /etc/ntp.conf sed -i "s/2.ubuntu.pool.ntp.org/3.asia.pool.ntp.org/g" /etc/ntp.conf sed -i "s/3.ubuntu.pool.ntp.org/1.kr.pool.ntp.org/g" /etc/ntp.conf systemctl daemon-reload systemctl enable ntp.service } set_eth0_device_name() { echo "###########################################################" echo "#" echo "# 이더넷 인터페이스 명을 eth0로 바꾼다." echo "#" echo "###########################################################" # ODROID-HC2 (enx*602) if [[ ${BOARD_NAME_SHORT} = "odroid_hc2" ]] then echo "SUBSYSTEM==\"net\", ACTION==\"add\", DRIVERS==\"?*\", ATTR{dev_id}==\"0x0\", ATTR{type}==\"1\", KERNEL==\"eth*|enx*\", NAME=\"eth0\"" > /lib/udev/rules.d/70-persistent-net.rules fi } set_board_name() { echo "###########################################################" echo "#" echo "# Login ASCII Art를 변경하기 위해 보드명을 수정한다." echo "#" echo "###########################################################" sed -i "s/BOARD_NAME=/#BOARD_NAME=/g" /etc/${NEW_USER}-release echo "BOARD_NAME=\"${BOARD_NAME}\"" >> /etc/${NEW_USER}-release } set_usb_device_name() { echo "###########################################################" echo "#" echo "# USB 네트워크 인터페이스 이름변경 금지" echo "#" echo "###########################################################" mv /lib/udev/rules.d/73-usb-net-by-mac.rules /lib/udev/rules.d/73-usb-net-by-mac.rules.no_run } set_hostname() { echo "###########################################################" echo "#" echo "# 호스트명 설정" echo "#" echo "###########################################################" echo "${BOARD_NAME_SHORT}" > /etc/hostname } set_insserv() { echo "###########################################################" echo "#" echo "# insserv를 /usr/bin으로 복사" echo "#" echo "###########################################################" cp -f /usr/lib/insserv/insserv /usr/bin } set_mount_opt() { echo "###########################################################" echo "#" echo "# 마운트 옵션 변경" echo "#" echo "###########################################################" sed -i "s/noatime,nodiratime,commit=600,/sync,dirsync,/g" /etc/fstab } resize_partition() { echo "###########################################################" echo "#" echo "# Resize Partition" echo "#" echo "###########################################################" cd ${CURRENT_DIR} systemctl enable resize2fs update-rc.d resize2fs defaults } clean_tmps() { cd ${CURRENT_DIR} echo "###########################################################" echo "#" echo "# 불필요한 파일들 삭제" echo "#" echo "###########################################################" deb_clean rm -f /var/log/*.gz rm -f /var/log/*.log.* rm -f /var/log/*log rm -f /var/log/syslog rm -f /var/swap rm -rf /tmp/* rm -f /var/log/xrdp* touch /var/log/xrdp.log chown xrdp:adm /var/log/xrdp.log chmod 640 /var/log/xrdp.log sync } set_inittab() { echo "###########################################################" echo "#" echo "# 초기 부팅모드 설정 (inittab 3 or 5 ?)" echo "#" echo "###########################################################" cd ${CURRENT_DIR} systemctl disable lightdm.service systemctl set-default multi-user.target } set_rclocal() { echo "###########################################################" echo "#" echo "# rc.local 셋팅" echo "#" echo "###########################################################" cd ${CURRENT_DIR} grep "firewall_${BOARD_NAME_SHORT}.sh" /etc/rc.local > /dev/null if [ $? -ne 0 ] then sed -i "/exit 0/d" /etc/rc.local echo "###########################################################" >> /etc/rc.local echo "#" >> /etc/rc.local echo "# Run Firewall Script" >> /etc/rc.local echo "#" >> /etc/rc.local echo "###########################################################" >> /etc/rc.local echo "if [ -f /root/scripts/firewall_${BOARD_NAME_SHORT}.sh ]; then" >> /etc/rc.local echo " /root/scripts/firewall_${BOARD_NAME_SHORT}.sh start" >> /etc/rc.local echo "fi" >> /etc/rc.local echo "" >> /etc/rc.local echo "# Enable Wifi Device" >> /etc/rc.local echo "#/usr/sbin/rfkill unblock all" >> /etc/rc.local echo "#/usr/sbin/ifup wlan0" >> /etc/rc.local echo "" >> /etc/rc.local echo "exit 0" >> /etc/rc.local else echo "이미 편집 되었습니다." fi } set_apache2_ssl() { cd ${CURRENT_DIR} echo "###########################################################" echo "#" echo "# apache2의 80포트를 disable 하고 SSL을 적용한다." echo "#" echo "###########################################################" echo "######################################################################" echo "# apache SSL 초기화" echo "######################################################################" rm -rf /etc/apache2/ssl/* echo "######################################################################" echo "# ntpdate 시간 동기화" echo "######################################################################" ntpdate -v kr.pool.ntp.org echo "######################################################################" echo "# 32바이트짜리 랜덤 파일 생성" echo "######################################################################" head -c 32 < /dev/random > ~/.rnd echo "######################################################################" echo "# 개인키를 생성한다." echo "# (생성 시 해당 키의 비밀번호를 2번 입력해 준다)" echo "######################################################################" openssl genrsa -des3 -out ssl-cert-${MY_SITE}.key 2048 echo "######################################################################" echo "# 서버 인증서 발급을 위한 요청 파일인" echo "# CSR(Certificate Sinning Request-인증서 서명 요청)을 생성" echo "# (개인키의 비밀번호를 입력한다)" echo "######################################################################" openssl req -new -days 18250 -key ssl-cert-${MY_SITE}.key -out ssl-cert-${MY_SITE}.csr -subj "/C=KR/ST=Seoul/L=Guro-gu/O=My Office/OU=Web Server/CN=${MY_SITE}" echo "######################################################################" echo "# 편의를 위해 개인키 암호 제거" echo "# (개인키의 비밀번호를 입력한다)" echo "######################################################################" cp -fv ssl-cert-${MY_SITE}.key ssl-cert-${MY_SITE}.key.orig openssl rsa -in ssl-cert-${MY_SITE}.key.orig -out ssl-cert-${MY_SITE}.key echo "######################################################################" echo "# 서버 개인키와 CSR을 사용해서 인증서에 서명" echo "######################################################################" openssl x509 -req -days 18250 -in ssl-cert-${MY_SITE}.csr -signkey ssl-cert-${MY_SITE}.key -out ssl-cert-${MY_SITE}.crt mkdir -p /etc/apache2/ssl/private mkdir -p /etc/apache2/ssl/certs mv -fv ${CURRENT_DIR}/ssl-cert-${MY_SITE}.key* /etc/apache2/ssl/private/ mv -fv ${CURRENT_DIR}/ssl-cert-${MY_SITE}.crt /etc/apache2/ssl/certs/ mv -fv ${CURRENT_DIR}/ssl-cert-${MY_SITE}.csr /etc/apache2/ssl/certs/ } set_sshd_ciphers() { clear cd ${CURRENT_DIR} echo "###########################################################" echo "#" echo "# sshd 암호화 알고리즘 낮은 보안수준으로 변경" echo "#" echo "###########################################################" echo "HostKeyAlgorithms ssh-dss,ssh-rsa" > /etc/ssh/sshd_config.d/lowlevel_ciphers.conf echo "KexAlgorithms diffie-hellman-group-exchange-sha1,diffie-hellman-group1-sha1" >> /etc/ssh/sshd_config.d/lowlevel_ciphers.conf } set_passwords() { clear cd ${CURRENT_DIR} echo "###########################################################" echo "#" echo "# 패스워드 설정" echo "#" echo "###########################################################" rm -f /etc/apache2/users.password if [ ${USE_WEBDAV} = 1 ] then echo "###########################################################" echo "#" echo "# ENTER WEBDAV PASSWORD (USER:${NEW_USER})" echo "#" echo "###########################################################" htdigest -c /etc/apache2/users.password webdav ${NEW_USER} chown www-data:www-data /etc/apache2/users.password fi if [ ${USE_SAMBA} = 1 ] then echo "###########################################################" echo "#" echo "# ENTER SAMBA PASSWORD (USER:${NEW_USER})" echo "#" echo "###########################################################" smbpasswd -a ${NEW_USER} fi if [ ${USE_VNC_SERVER} = 1 ] then echo "###########################################################" echo "#" echo "# ENTER vncserver PASSWORD (vncserver :1)" echo "#" echo "###########################################################" su - -c /usr/bin/vncpasswd ${NEW_USER} fi if [ ${USE_TRANSMISSION} = 1 ] then systemctl stop transmission-daemon echo "###########################################################" echo "#" echo "# ENTER transmission-daemon PASSWORD" echo "# ${NEW_USER_HOME}/.config/transmission-daemon/settings.json" echo "#" echo "###########################################################" echo -n "NEW PASSWORD: " read TRANSMISSIONPW sed -i '/\"rpc-password\":/d' ${NEW_USER_HOME}/.config/transmission-daemon/settings.json sed -i "s/}/ ,\"rpc-password\": \"${TRANSMISSIONPW}\"\n}/g" ${NEW_USER_HOME}/.config/transmission-daemon/settings.json fi mkdir -p /var/log/apache2 chown ${NEW_USER}:${NEW_GROUP} /var/log/apache2 } set_keyboard_layout() { echo "###########################################################" echo "#" echo "# 키보드 레이아웃 설정" echo "#" echo "###########################################################" sed -i "s/XKBMODEL/#XKBMODEL/g" /etc/default/keyboard sed -i "s/XKBLAYOUT/#XKBLAYOUT/g" /etc/default/keyboard sed -i "s/XKBVARIANT/#XKBVARIANT/g" /etc/default/keyboard sed -i "s/XKBOPTIONS/#XKBOPTIONS/g" /etc/default/keyboard sed -i "s/BACKSPACE/#BACKSPACE/g" /etc/default/keyboard echo "" >> /etc/default/keyboard echo 'XKBMODEL="pc105"' >> /etc/default/keyboard echo 'XKBLAYOUT="kr(kr104)"' >> /etc/default/keyboard echo 'XKBVARIANT=""' >> /etc/default/keyboard echo 'XKBOPTIONS=""' >> /etc/default/keyboard dpkg-reconfigure keyboard-configuration } set_optimize_systemd() { echo "###########################################################" echo "#" echo "# 보드 용도에 맞게 systemd 서비스 셋팅" echo "#" echo "###########################################################" cd ${CURRENT_DIR} systemctl daemon-reload case ${BOARD_NAME_SHORT} in "opizero") echo "이 보드는 opizero 입니다." systemctl disable autofs.service systemctl disable bluetooth.service systemctl enable apache2.service systemctl enable mysql.service systemctl disable nfs-kernel-server systemctl disable nmbd.service systemctl disable rpcbind.service systemctl disable smbd.service systemctl disable vsftpd.service systemctl disable transmission-daemon.service systemctl disable docker systemctl disable plexmediaserver systemctl disable rpimonitor ;; "opizero2") echo "이 보드는 opizero2 입니다." systemctl disable autofs.service systemctl disable bluetooth.service systemctl enable apache2.service systemctl enable mysql.service systemctl disable nfs-kernel-server systemctl enable nmbd.service systemctl disable rpcbind.service systemctl enable smbd.service systemctl disable vsftpd.service systemctl enable transmission-daemon.service systemctl disable docker systemctl disable plexmediaserver systemctl disable rpimonitor ;; "odroid_hc2") echo "이 보드는 odroid_hc2 입니다." systemctl disable autofs.service systemctl disable bluetooth.service systemctl enable apache2.service systemctl enable mysql.service systemctl enable nfs-kernel-server systemctl enable nmbd.service systemctl enable rpcbind.service systemctl enable smbd.service systemctl disable transmission-daemon.service systemctl enable vsftpd.service systemctl enable docker systemctl disable plexmediaserver systemctl disable rpimonitor ;; *) echo "ERROR: Unknown board name." ;; esac systemctl daemon-reload } set_min_systemd() { echo "###########################################################" echo "#" echo "# 설치된 중요 서비스의 실행을 disable 하여 서비스 최소화" echo "#" echo "###########################################################" cd ${CURRENT_DIR} systemctl daemon-reload systemctl disable autofs.service systemctl disable apache2.service systemctl disable mysql.service systemctl disable transmission-daemon.service systemctl disable nmbd.service systemctl disable smbd.service systemctl disable bluetooth.service systemctl disable nfs-kernel-server systemctl disable rpcbind.service systemctl disable vsftpd.service systemctl disable docker.service systemctl disable vncserver.service systemctl disable rpimonitor.service systemctl daemon-reload } set_max_systemd() { echo "###########################################################" echo "#" echo "# 설치된 중요 서비스의 실행을 enable 하여 서비스 최대화" echo "#" echo "###########################################################" cd ${CURRENT_DIR} systemctl daemon-reload systemctl disable autofs.service systemctl enable apache2.service systemctl enable mysql.service systemctl enable transmission-daemon.service systemctl enable nmbd.service systemctl enable smbd.service systemctl enable bluetooth.service systemctl enable nfs-kernel-server systemctl enable rpcbind.service systemctl enable vsftpd.service systemctl enable docker systemctl daemon-reload } run_install() { echo "###########################################################" echo "#" echo "# Install" echo "#" echo "###########################################################" get_pydiouser_pw set_ubuntu_repo dpkg_init update_os install_additional_repo install_apt_get_pkgs set_locale set_timezone set_default_user_account set_network set_eth0_device_name set_dns set_vim install_rclone install_apache2 install_mariadb install_php install_letsencrypt install_vsftpd install_samba install_transmission_daemon install_nfs_server install_xwindow install_vncserver install_xrdp install_hangul_ime install_audio setup_pydio_db install_pydio install_extplorer install_docker setup_apache2_index make_working_dir set_fstab set_samba set_dhcpd set_vsftpd set_apache2 set_timezone_locale set_sshd set_os_default_systemd set_ntpd set_usb_device_name set_hostname set_insserv set_mount_opt set_board_name set_rclocal set_sshd_ciphers set_letsencrypt update_os set_keyboard_layout resize_partition set_inittab set_default_mount_dir install_plexmediaserver install_vaultwarden apt purge unattended-upgrades -y clean_tmps copy_skel_profile sync if [ ${USE_APACHE2} = 1 ] then set_apache2_ssl fi set_passwords # iptables 선택 (iptables-legacy로 선택한다) update-alternatives --config iptables } echo "###########################################################" echo "#" echo "# Single Board Computer 최적화 스크립트 시작" echo "#" echo "###########################################################" check_board_name case "$1" in install) run_install set_optimize_systemd ;; min) set_min_systemd ;; max) set_max_systemd ;; systemd) set_optimize_systemd ;; ssl) set_apache2_ssl ;; update) update_os ;; test) # 함수 테스트는 아래를 수정한다. systemctl restart apache2 ;; *) echo "Usage: $0 install|min|max|systemd|ssl|update" >&2 exit 1 ;; esac sync sync