[SCRIPT] create-autorun.sh

Deskripsi

Ini adalah skrip BASH sekali jalan untuk membuat lingkungan autorun di QNAP NAS Anda. Skrip ini dapat digunakan untuk secara otomatis menjalankan skrip Anda sendiri saat NAS dinyalakan.

Tujuan dari proyek ini adalah untuk mendukung semua model QNAP NAS dan semua versi QTS & QuTS hero. Silakan beri tahu jika Anda mengalami kesalahan saat menjalankannya di NAS Anda.

Apa yang dilakukan

Skrip installer ini menulis prosesor autorun.sh ke volume default Anda, di bawah direktori .system. Kemudian skrip ini membuat symlink dari DOM kembali ke volume data default Anda sehingga dijalankan saat NAS startup. Ini berarti Anda tidak perlu memuat partisi DOM setiap kali ingin mengubah isi autorun.sh.

Perangkat dan partisi autorun akan ditentukan secara otomatis oleh skrip ini.

Cara membuat autorun.sh Anda

curl -skL https://git.io/create-autorun | sudo bash

Catatan

  • Jika Anda belum memiliki file autorun.sh sebelumnya, maka file autorun.sh yang dibuat oleh utilitas ini akan berisi prosesor direktori skrip, dan akan membuat direktori skrip tersedia untuk shell-script Anda sendiri. Semua yang ada di direktori skrip ini akan dijalankan (berurutan) selama startup NAS oleh file autorun.sh default yang hanya dibuat. Catatan di bawah ini hanya berlaku untuk autorun.sh yang ditulis oleh utilitas ini. Jika Anda sudah memiliki file autorun.sh lain, maka file tersebut akan tetap digunakan, dan catatan berikut tidak berlaku.

  • Lokasi sistem autorun akan bergantung pada nama volume default Anda. Misalnya: jika volume default Anda adalah CACHEDEV1_DATA, maka prosesor skrip otomatis akan dibuat di:

/share/CACHEDEV1_DATA/.system/autorun/autorun.sh

… dan direktori skrip akan dibuat di:

/share/CACHEDEV1_DATA/.system/autorun/scripts/
  • autorun.sh akan dipicu pada suatu titik selama bootup NAS, yang kemudian menjalankan setiap file eksekusi di direktori skrip sesuai urutan daftar nama file default. Jika Anda perlu menjalankan satu skrip sebelum yang lain, beri awalan dengan angka seperti:

10-example.sh 20-example.sh 25-example.sh 30-example.sh

  • File log akan dibuat selama eksekusi autorun.sh. File ini berada di /var/log/autorun.log dan berisi tanggal-waktu serta nama setiap skrip eksekusi yang ditemukan di direktori skrip saat dijalankan, beserta stdout dan stderr yang dihasilkan oleh skrip tersebut.

  • Sumber proyek ini dapat ditemukan di GitHub

Instalasi pada QTS 5.2.5 berhasil, tetapi jika saya mencoba menjalankan skrip saya, saya mendapatkan error “command not found”. Sepertinya autorun.sh berjalan sebelum semua QPKG, sehingga tidak menemukan perintah terkait. Jika saya menjalankannya secara manual nanti, semuanya berjalan seperti yang diharapkan. Perintah “sleep” di awal tidak berpengaruh (kecuali “sleep” itu sendiri).

Salam hormat …

Benar. autorun.sh dieksekusi sebelum QPKG dimulai.

sleep tidak akan membantu karena hanya menahan proses boot sampai autorun selesai, yang termasuk memulai QPKG.

Saya kemudian membuat QPKG RunLast untuk membantu mengatasi masalah ini, tetapi sekarang tidak lagi berfungsi sejak QTS 5.2.0 karena perubahan yang dilakukan oleh QNAP untuk memulai QPKG secara asinkron.

Saat ini tidak ada cara untuk menjalankan skrip setelah startup yang bergantung pada QPKG.

Ini belum sepenuhnya benar.
Saya sekarang telah menemukan solusi dengan menggunakan “RunLast” dari repositori “MyQNAP”. Saya terkejut karena awalnya juga menghasilkan error yang sama. Jadi saya melakukan sedikit riset. Saya menemukan bahwa layanan QNAP tidak selalu dijalankan secara asinkron dan terutama bahwa mereka tidak selalu menunggu keberhasilan start dari dependensinya.
Jadi saya memodifikasi skrip start saya agar mempertimbangkan hal ini.
Hal ini sebagian berkaitan dengan cara QNAP menghubungkan (link) binary dan library-nya, tergantung pada aplikasi yang terpasang.
Sebagai contoh, “autostart.sh” biasanya gagal karena sebagian besar library dan binary belum “terhubung (linked)”. Hal yang sama juga berlaku sebagian untuk “RunLast”.
Namun, mohon jangan berhenti mengembangkan “RunLast”. Pendekatannya sudah benar, terutama karena struktur skrip start SysV yang bagus. Anda bisa menjalankan hampir semua hal dengan itu jika mempertimbangkan dependensi aplikasi Anda pada QPGG lain dan sedikit meniru skrip start mereka. Saya punya contoh sederhana untuk ClamD saya, yang saya gunakan untuk Xeams saya:

Salam hangat,

Mandragor59

***** Tidak ada masalah, hanya ada tantangan *****

#!/bin/sh
# Nama: /share/CACHEDEV1_DATA/.qpkg/RunLast/init.d/S10-ClamD_Service
# pastikan daemon membuat file clamd.pid di /var/run dan modifikasi Socket serta IP di clamd.conf untuk pemindaian instream
# Tujuan: Skrip ini untuk memulai, menghentikan, dan me-restart layanan ClamD.
# Penulis: Mandragor59 (A.Lechte)
# ------------------------------------------------------------------------------

# pengaturan ENV ClamAV

export QNAP_QPKG=ClamAV
QPKG_NAME=$QNAP_QPKG
QPKG_DIR=`/sbin/getcfg $QPKG_NAME Install_Path -d NULL -f /etc/config/qpkg.conf`

# Jika belum terpasang, tidak melakukan apa-apa

if [ ! -d ${QPKG_DIR} ]
	then
        exit 1
fi

# Ayo, lanjut atau tidak

case "$1" in
  
  start)
	
	echo -n $"Memulai ClamAV Daemon: "
	
# Memeriksa dependensi dan membuat tautan file yang diperlukan (disalin dari startup clamav)

	/bin/ln -sf ${QPKG_DIR}/usr/lib/libclamav.so.9.0.5 /usr/lib/libclamav.so.9.0.5 >/dev/null 2>&1
    /bin/ln -sf ${QPKG_DIR}/usr/lib/libclammspack.so.0.1.0 /usr/lib/libclammspack.so.0.1.0 >/dev/null 2>&1
    /bin/ln -sf ${QPKG_DIR}/usr/lib/libclamunrar.so.9.0.5 /usr/lib/libclamunrar.so.9.0.5 >/dev/null 2>&1
    /bin/ln -sf ${QPKG_DIR}/usr/lib/libclamunrar_iface.so.9.0.5 /usr/lib/libclamunrar_iface.so.9.0.5 >/dev/null 2>&1
    /bin/ln -sf ${QPKG_DIR}/usr/lib/libfreshclam.so.2.0.1 /usr/lib/libfreshclam.so.2.0.1 >/dev/null 2>&1
    /bin/ln -sf ${QPKG_DIR}/usr/lib/libcharset.so.1.0.0 /usr/lib/libcharset.so.1.0.0 >/dev/null 2>&1
	
    /sbin/ldconfig
    
	/bin/ln -sf ${QPKG_DIR}/usr/local/bin/freshclam /usr/local/bin/freshclam >/dev/null 2>&1
    /bin/ln -sf ${QPKG_DIR}/usr/local/bin/clamscan /usr/local/bin/clamscan >/dev/null 2>&1
    /bin/ln -sf ${QPKG_DIR}/usr/local/bin/sigtool /usr/local/bin/sigtool >/dev/null 2>&1
    /bin/ln -sf ${QPKG_DIR}/usr/local/sbin/clamd /usr/local/sbin/clamd >/dev/null 2>&1
    /bin/ln -sf ${QPKG_DIR}/usr/local/bin/clamscan_cli /usr/local/bin/clamscan_cli >/dev/null 2>&1
    /bin/ln -sf ${QPKG_DIR}/usr/local/bin/clamav_cli /usr/local/bin/clamav_cli >/dev/null 2>&1
    /bin/ln -sf ${QPKG_DIR}/etc/init.d/antivirus_qpkg.sh /etc/init.d/antivirus_qpkg.sh >/dev/null 2>&1

# memulai ClamD
	
    /usr/local/sbin/clamd 2>/var/log/clamd.log
	
	echo $"..... selesai."
	
    ;;
	
  stop)
  
    echo -n $"Mematikan ClamAV Daemon: "
	
	killall -9 clamd
	rm /var/run/clamd.pid >/dev/null 2>&1
	
	echo $"..... selesai."
	
    ;;

  status)
	
    PROC_PID=`cat /var/run/clamd.pid`
	if [ -e /proc/$PROC_PID/status ]
		then
			cat /proc/$PROC_PID/status | grep State
		else
			echo $"ClamAV Daemon tidak berjalan !"
	fi
	
    ;;
	
  *)
  
    echo "Penggunaan: $0 {start|stop|status}"
    exit 1
  
	;;

esac

Tidak, ini benar sekali. Karena saat ini belum ada dukungan umum untuk menjalankan skrip setelah QPKG.

Siapa pun bisa membuat solusi khusus untuk paket tertentu, tapi itu hanya membantu sebagian kecil komunitas yang menggunakan paket tersebut. :nerd_face:

Anda menjawab:

“Siapa pun bisa membuat solusi khusus untuk paket tertentu, tetapi itu hanya membantu sebagian komunitas yang menggunakan paket tersebut.” :nerd_face:

… dan karena itu memang belum SEPENUHNYA benar! :stuck_out_tongue_winking_eye:

Meh… mungkin aku harus berdebat tentang semantik bahasa Jerman saja? Jerman bukan bahasa utama saya, tapi mengikuti contohmu, sepertinya itu bukan halangan. :wink: