#!/bin/sh # Installation script for amlogic_ARMBIAN_glibc builds # Provide ssh password ## Option 1: uncomment the following line to display entered password #sudo read -sp "Enter ssh password : " PASSWORD_SSH ## Option 2: hide the entered password clear echo "----------------------------------------------------------------------------------" echo "- Welcome to AVDSP installation -" echo "----------------------------------------------------------------------------------" echo "Boot file can boot OPC/OPO with Ethernet/Wifi and boot OPL with wifi" echo "Optical input is selected by default installation" echo "Check sound card settings with alsamixer if no audio after this installation" read -p "Please enter name for new DSP system then press Enter: " DSP_NAME echo "Please enter password for packages server connection then press Enter: " stty -echo read PASSWORD_SSH stty echo echo "$DSP_NAME is installing, please wait" CURRENT_HOST_NAME=$(hostname) # Install basic system usermod -aG audio mgt apt update apt install -y libnss-mdns avahi-daemon alsa-utils ir-keytable triggerhappy evtest apt install -y python3 python3-pip python3-websocket python3-aiohttp python3-jsonschema unzip git apt remove -y smartmontools sysstat haveged plymouth rsync rsyslog openvpn logrotate # sudo systemctl enable irexec ### Khong con dung ir-exect echo 'tmpfs /var/log tmpfs defaults,noatime,nosuid,nodev,noexec 0 0' >> /etc/fstab echo 'tmpfs /var/lib/sudo tmpfs defaults,noatime,nosuid,nodev,noexec,size=1m,mode=0700 0 0' >> /etc/fstab sed -i 's/#Storage=auto/Storage=none/g' /etc/systemd/journald.conf && sed -i 's/SystemMaxUse=20M/SystemMaxUse=10M/g' /etc/systemd/journald.conf # Reserve CPU for camilladsp sed -i '12s/$/ isolcpus=1,2,3 threadirqs mitigations=off irqaffinity=2,3 rcu_nocbs=2,3 nohz_full=2,3 dtoverlay=dwc2/' /boot/extlinux/extlinux.conf # threadirqs and mitigation=off are suggested by rtcps ### NOT OK YET - TEMPORARY FIX by passing "--break-system-packages" at pip install #python3 -m venv .venv #source .venv/bin/activate # Minimize boot time systemctl disable NetworkManager-wait-online.service systemctl disable chrony-wait.service systemctl disable armbian-hardware-optimize.service systemctl disable armbian-hardware-monitor.service systemctl disable armbian-zram-config.service systemctl disable armbian-ramlog.service systemctl disable console-setup.service systemctl disable keyboard-setup.service systemctl disable resolvconf-pull-resolved.service systemctl disable resolvconf.service systemctl disable sysfsutils.service systemctl disable e2scrub_reap.service systemctl disable bootsplash-hide-when-booted.service systemctl disable bootsplash-show-on-shutdown.service systemctl disable sysstat.service systemctl disable cron.service systemctl disable rsync.service systemctl disable rsyslog.service systemctl disable NetworkManager-dispatcher.service systemctl disable systemd-network-generator.service systemctl disable lircd.service systemctl disable triggerhappy.service systemctl disable systemd-pstore.service systemctl disable systemd-sysext.service systemctl disable triggerhappy.service systemctl disable systemd-binfmt.service systemctl mask lircd.socket systemctl mask bootsplash-ask-password-console.path systemctl mask remote-cryptsetup.target systemctl mask triggerhappy.socket mask proc-sys-fs-binfmt_misc.mount systemctl mask apt-daily.timer systemctl mask dpkg-db-backup.timer systemctl mask sysstat-collect.timer systemctl mask sysstat-summary.timer systemctl mask e2scrub_all.timer systemctl mask apt-daily-upgrade.timer systemctl mask logrotate.timer systemctl mask fstrim.timer systemctl mask plymouth systemctl mask lircd-setup systemctl mask systemd-random-seed # sudo echo "sudo systemctl mask systemd-remount-fs.service (dan den read-only, chu y co the su dung de khoa thay doi he thong)" systemctl mask kmod-static-nodes.service systemctl mask modprobe@configfs.service systemctl mask modprobe@fuse.service systemctl mask modprobe@drm.service systemctl mask systemd-update-utmp.service systemctl mask systemd-rfkill chmod -x /etc/cron.d/armbian-check-battery chmod -x /etc/cron.d/armbian-truncate-logs chmod -x /etc/cron.d/armbian-updates chmod -x /etc/cron.d/e2scrub_all chmod -x /etc/cron.d/sysstat chmod -x /etc/cron.daily/sysstat chmod -x /etc/cron.daily/logrotate chmod -x /etc/cron.daily/dpkg chmod -x /etc/cron.daily/cracklib-runtime chmod -x /etc/cron.daily/armbian-ram-logging chmod -x /etc/cron.daily/apt-compat sed -i '/After=/c\#After=systemd-sysusers.service systemd-hwdb-update.service\nStartLimitIntervalSec=0.01\nStartLimitBurst=771' /lib/systemd/system/systemd-udevd.service sed -i '/After=/c\#After=systemd-udevd-kernel.socket systemd-udevd-control.socket\nStartLimitIntervalSec=0.01\nStartLimitBurst=771' /lib/systemd/system/systemd-udev-trigger.service # Set maximum priority for audio mkdir -p /etc/security echo '@audio - rtprio 90 # maximum realtime priority' >> /etc/security/limits.conf echo '@audio - memlock unlimited # maximum locked-in-memory address space (KB)' >> /etc/security/limits.conf # Install audio priority check pip install rtcqs --break-system-packages # Set rtc max resolution echo '#!/bin/sh' >> /etc/init.d/S01_rtcmax echo '' >> /etc/init.d/S01_rtcmax echo '#' >> /etc/init.d/S01_rtcmax echo '# Set RTC max frequency' >> /etc/init.d/S01_rtcmax echo '#' >> /etc/init.d/S01_rtcmax echo '' >> /etc/init.d/S01_rtcmax echo 'echo 2048 > /sys/class/rtc/rtc0/max_user_freq &' >> /etc/init.d/S01_rtcmax # echo 'echo 2048 > /proc/sys/dev/hpet/max-user-freq &' >> /etc/init.d/S01_rtcmax chmod +x /etc/init.d/S01_rtcmax # Install alsa loopback sudo echo -e '# alsa loopback\nsnd\nsnd-timer\nsnd-pcm\nsnd-aloop' >> /etc/modules-load.d/aloop.conf # Create script to config ICUSBAUDIO7D (run once after plug ICUSBAUDIO7D in) amixer cset numid=8 197 # Set playback at full volume for speaker all channel amixer cset numid=16 2 # Set optical as default in amixer cset numid=6 8065 # Set playback at full volume for line-in sources amixer cset numid=4 8065 # Set playback at full volume for mic-in sources echo '#!/bin/sh' >> /home/mgt/LineVol.sh echo 'amixer cset numid=8 197 # Set playback at full volume for speaker all channel' >> /home/mgt/LineVol.sh echo 'amixer cset numid=16 2 # Set optical as default in' >> /home/mgt/LineVol.sh echo 'amixer cset numid=6 8065 # Set playback at full volume for line-in sources' >> /home/mgt/LineVol.sh echo 'amixer cset numid=4 8065 # Set playback at full volume for mic-in sources' >> /home/mgt/LineVol.sh chmod +x /home/mgt/LineVol.sh # Install camilladsp mkdir -p /home/mgt/camilladsp mkdir -p /home/mgt/camilladsp/coeffs mkdir -p /home/mgt/camilladsp/configs echo 'devices:' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' samplerate: 48000' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' chunksize: 2048' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' queuelimit: 4' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' adjust_period: 3' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' capture:' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' channels: 2' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' format: S16LE' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' device: hw:Loopback' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' type: Alsa' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' capture_samplerate: 0' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' enable_rate_adjust: false' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' enable_resampling: false' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' playback:' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' channels: 6' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' device: hw:Loopback' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' format: S16LE' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' type: Alsa' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' rate_measure_interval: 1' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' resampler_type: BalancedAsync' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' silence_threshold: -60' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' silence_timeout: 3' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' stop_on_rate_change: false' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' target_level: 2048' >> /home/mgt/camilladsp/configs/camilladsp.yml echo 'mixers:' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' 2to6channel:' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' channels:' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' in: 2' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' out: 6' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' mapping:' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' - dest: 0' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' mute: false' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' sources:' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' - channel: 0' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' gain: 0' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' inverted: false' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' mute: false' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' - dest: 1' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' mute: false' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' sources:' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' - channel: 1' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' gain: 0' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' inverted: false' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' mute: false' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' - dest: 2' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' mute: false' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' sources:' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' - channel: 0' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' gain: 0' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' inverted: false' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' mute: false' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' - dest: 3' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' mute: false' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' sources:' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' - channel: 1' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' gain: 0' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' inverted: false' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' mute: false' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' - dest: 4' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' mute: false' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' sources:' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' - channel: 0' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' gain: 0' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' inverted: false' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' mute: false' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' - dest: 5' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' mute: false' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' sources:' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' - channel: 1' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' gain: 0' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' inverted: false' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' mute: false' >> /home/mgt/camilladsp/configs/camilladsp.yml echo 'pipeline:' >> /home/mgt/camilladsp/configs/camilladsp.yml echo '- name: 2to6channel' >> /home/mgt/camilladsp/configs/camilladsp.yml echo ' type: Mixer' >> /home/mgt/camilladsp/configs/camilladsp.yml cd /home/mgt/camilladsp # wget http://mgt.dynu.net:8008/CAMILLADSP/camilladsp /home/mgt/camilladsp/camilladsp # curl -L -o /home/mgt/camilladsp/camilladsp http://mgt.dynu.net:8008/CAMILLADSP/camilladsp curl -L -o /home/mgt/camilladsp/camilladsp http://mgt.dynu.net:8008/CAMILLADSP/camilladsp_binaries/CC/camilladsp_1.0.3_aarch64_64bit chmod +x camilladsp ### NOT OK YET - NOT ENABLE YET Setup camilladsp service sudo echo '[Unit]' >> /lib/systemd/system/camilladsp.service sudo echo 'Description=AVDSP (Powered by CamillaDSP)' >> /lib/systemd/system/camilladsp.service sudo echo '#After=sound.target' >> /lib/systemd/system/camilladsp.service sudo echo 'After=local-fs.target' >> /lib/systemd/system/camilladsp.service sudo echo 'StartLimitIntervalSec=0.1' >> /lib/systemd/system/camilladsp.service sudo echo 'StartLimitBurst=771' >> /lib/systemd/system/camilladsp.service sudo echo '[Service]' >> /lib/systemd/system/camilladsp.service sudo echo 'Type=simple' >> /lib/systemd/system/camilladsp.service sudo echo 'ExecStart=taskset -c 2 /home/mgt/camilladsp/camilladsp -p 1234 /home/mgt/camilladsp/active_config.yml' >> /lib/systemd/system/camilladsp.service sudo echo 'Restart=always' >> /lib/systemd/system/camilladsp.service sudo echo 'RestartSec=1' >> /lib/systemd/system/camilladsp.service sudo echo 'User=mgt' >> /lib/systemd/system/camilladsp.service sudo echo 'Group=mgt' >> /lib/systemd/system/camilladsp.service sudo echo 'CPUSchedulingPolicy=fifo' >> /lib/systemd/system/camilladsp.service sudo echo 'CPUSchedulingPriority=99' >> /lib/systemd/system/camilladsp.service sudo echo '[Install]' >> /lib/systemd/system/camilladsp.service sudo echo 'WantedBy=graphical.target' >> /lib/systemd/system/camilladsp.service sudo systemctl enable camilladsp # Install pycamilladsp cd /home/mgt/camilladsp #sudo git clone https://github.com/HEnquist/pycamilladsp curl -L -o /home/mgt/camilladsp/pycamilladsp.zip http://mgt.dynu.net:8008/CAMILLADSP/pycamilladsp.zip unzip pycamilladsp.zip rm pycamilladsp.zip cd pycamilladsp pip install . --break-system-packages cd .. # Install pycamilladsp-plot cd /home/mgt/camilladsp #sudo git clone https://github.com/HEnquist/pycamilladsp-plot curl -L -o /home/mgt/camilladsp/pycamilladsp-plot.zip http://mgt.dynu.net:8008/CAMILLADSP/pycamilladsp-plot.zip unzip pycamilladsp-plot.zip rm pycamilladsp-plot.zip cd pycamilladsp-plot pip install . --break-system-packages cd .. # Install camilladspgui cd /home/mgt/camilladsp #wget https://github.com/HEnquist/camillagui-backend/releases/download/v1.0.1/camillagui.zip #wget http://mgt.dynu.net:8008/CAMILLADSP/camillagui.zip curl -L -o /home/mgt/camilladsp/camillagui.zip http://mgt.dynu.net:8008/CAMILLADSP/camillagui.zip unzip camillagui.zip -d camillagui #sed -i 's%~/camilladsp/default_config.yml%~/camilladsp/active_config.yml%g' /home/mgt/camilladsp/camillagui/config/camillagui.yml #sed -i 's%~/camilladsp/camilladsp.log%~/camilladsp/logs/camilladsp.log%g' /home/mgt/camilladsp/camillagui/config/camillagui.yml sed -i 's%~/camilladsp/configs%/home/mgt/camilladsp/configs%g' /home/mgt/camilladsp/camillagui/config/camillagui.yml sed -i 's%~/camilladsp/coeffs%/home/mgt/camilladsp/coeffs%g' /home/mgt/camilladsp/camillagui/config/camillagui.yml sed -i 's%~/camilladsp/default_config.yml%/home/mgt/camilladsp/active_config.yml%g' /home/mgt/camilladsp/camillagui/config/camillagui.yml sed -i 's%~/camilladsp/active_config.yml%/home/mgt/camilladsp/active_config.yml%g' /home/mgt/camilladsp/camillagui/config/camillagui.yml sed -i 's%~/camilladsp/active_config.txt%/home/mgt/camilladsp/active_config.txt%g' /home/mgt/camilladsp/camillagui/config/camillagui.yml sed -i 's%update_config_symlink: false%update_config_symlink: true%g' /home/mgt/camilladsp/camillagui/config/camillagui.yml sed -i 's%~/camilladsp/camilladsp.log%/home/mgt/camilladsp/logs/camilladsp.log%g' /home/mgt/camilladsp/camillagui/config/camillagui.yml mkdir -p /home/mgt/camilladsp/logs touch /home/mgt/camilladsp/logs/camilladsp.log ln -s /home/mgt/camilladsp/configs/camilladsp.yml /home/mgt/camilladsp/active_config.yml rm camillagui.zip ### NOT OK YET - NOT ENABLE YET Setup camillagui service echo '[Unit]' >> /lib/systemd/system/camillagui.service echo 'Description=AVDSP Backend and GUI (Powered by CamillaDSP Backend & GUI)' >> /lib/systemd/system/camillagui.service echo 'After=multi-user.target' >> /lib/systemd/system/camillagui.service echo '[Service]' >> /lib/systemd/system/camillagui.service echo 'User=mgt' >> /lib/systemd/system/camillagui.service echo 'Type=idle' >> /lib/systemd/system/camillagui.service echo 'ExecStart=python3 /home/mgt/camilladsp/camillagui/main.py' >> /lib/systemd/system/camillagui.service echo '[Install]' >> /lib/systemd/system/camillagui.service echo 'WantedBy=multi-user.target' >> /lib/systemd/system/camillagui.service systemctl enable camillagui ### NOT OK YET Install USB Audio Gadget #echo 'dtoverlay=dwc2' >> /boot/armbianEnv.txt echo 'options g_audio c_chmask=3 p_chmask=3 c_srate=48000 p_srate=48000 c_ssize=2 p_ssize=2 iProduct="AVDSP USB Gadget"' >> /etc/modprobe.d/g_audio.conf echo 'g_audio' >> /etc/modules-load.d/g_audio.conf echo 'dwc2' >> /etc/modules-load.d/dwc2.conf # Change ownership of camilladsp folder to mgt sudo chown -R mgt:mgt /home/mgt/camilladsp # Remove installation script sudo rm /home/mgt/Cam_Ins.sh # Clean up system sudo apt autoremove -y # Change hostname truncate -s 0 /etc/hostname echo "$DSP_NAME" >> /etc/hostname sed -i "s%$CURRENT_HOST_NAME%$DSP_NAME%g" /etc/hosts # Reboot system echo "$DSP_NAME installation completed, reboot in 10 seconds" # Đọc cách làm đếm ngược đơn giản sleep 1 reboot