[QPKG] sherpa: mini package manager (CLI)


sherpa: mini-package-manager untuk QNAP NAS

Manajer paket CLI multi-aksi pertama di dunia!

Manajemen paket melalui sherpa menyediakan fitur seperti backup aplikasi yang mudah, upgrade, manajemen layanan dan daemon, operasi multi-threaded, pemeriksaan dan perbaikan mandiri, dan semua operasi dapat diotomatisasi melalui cron.

Penting: ini adalah manajer paket dan layanan berbasis command-line, masih berstatus beta, dan paket kadang-kadang rusak karena auto-upgrade yang gagal. Jika Anda ingin (dan mampu) membantu dengan mendiagnosa dan menyediakan log, dan tidak keberatan jika terjadi kerusakan sesekali, silakan gunakan paket ini. Jika Anda mencari stabilitas penuh dan ingin solusi “set-and-forget”, itu belum tersedia di sini. Jangan gunakan sherpa di lingkungan produksi, kecuali Anda nyaman dengan CLI dan debugging skrip bash dan Python, dan/atau dapat menerima aplikasi tidak berjalan dalam waktu lama.

Namun: sebagian besar pengembangan kini sudah selesai, dan saya sedang fokus meningkatkan stabilitas selama auto-upgrade paket. Jadi, sherpa akan berjalan dengan baik di sistem yang baru (atau fresh), tetapi bisa mengalami masalah saat update aplikasi individual dirilis.

Klik di sini untuk paket yang dapat diinstal

Instalasi

  • SSH ke NAS Anda, dan instal QPKG secara manual di command-prompt:
    curl -skL https://tinyurl.com/get-sherpa > /share/Public/sherpa.qpkg; sudo sh /share/Public/sherpa.qpkg;

Penggunaan

  • Di command-prompt, jalankan:
    sudo sherpa
    … dan ikuti bantuan yang tersedia di sana.

    Jika ‘sudo’ tidak tersedia di versi QTS Anda, SSH ke NAS Anda sebagai user ‘admin’, lalu jalankan:
    sherpa

Jika Anda punya saran, masukan, komentar, atau kekhawatiran, silakan buat issue baru, atau Anda juga dipersilakan memulai diskusi baru.

Proyek ini adalah hasil kerja komunitas, dan dibangun dari masukan gabungan banyak anggota forum komunitas QNAP. Terima kasih untuk semua yang telah berkontribusi. :nerd_face:

Lihat wiki untuk informasi lebih lanjut: https://github.com/OneCDOnly/sherpa/wiki

Beberapa kabar kurang menyenangkan untuk pengguna Readarr: para pengembang telah berhenti mengerjakannya dan fork saat ini (yang digunakan oleh sherpa) telah diarsipkan: https://www.reddit.com/r/Readarr/comments/1llqji9/announcement_retirement_of_readarr

Jika ada yang mengetahui fork yang masih dipelihara, mohon informasikan dan saya akan mengganti QPKG Readarr untuk menggunakannya. Jika tidak ada, QPKG Readarr akan tetap tersedia, namun tidak akan diperbarui lagi.

Berita buruk lainnya: para pengembang TorrServer sekarang mengompilasi binary mereka agar membutuhkan libc 2.34 yang belum tersedia untuk QTS. :disappointed:

Jadi, untuk saat ini, paket TorrServer tidak dapat dijalankan. Pengguna TorrServer yang sudah ada akan menemukan instalasi mereka rusak saat TorrServer melakukan pembaruan berikutnya, dan TorrServer akan dihapus dari dukungan sherpa pada rilis QPKG stabil berikutnya.

Ada versi lama yang tersedia di repositori myQNAP: https://www.myqnap.org/product/torrserver/ jika Anda ingin tetap menggunakan aplikasi ini.

Anda mungkin dapat mentransfer konfigurasi Anda yang sudah ada ke versi tersebut. Namun, jangan instal versi myQNAP sebelum Anda melakukan backup konfigurasi secara manual.

TorrServer dari sherpa Anda harus dihapus secara manual melalui QTS App Center.

Hai OneCD, semoga kamu baik-baik saja?

Setelah pembaruan Sherpa terbaru, saya mendapatkan error berikut untuk SickGear.

Error
OverflowError('date value out of range')

Traceback
Traceback (most recent call last):
File "/share/CACHEDEV1_DATA/.qpkg/OSickGear/repo-cache/lib/tornado/web.py", line 1848, in _execute result = await result ^^^^^^^^^^^^
File "/share/CACHEDEV1_DATA/.qpkg/OSickGear/repo-cache/lib/tornado/gen.py", line 796, in run yielded = self.gen.throw(exc) ^^^^^^^^^^^^^^^^^^^
File "/share/CACHEDEV1_DATA/.qpkg/OSickGear/repo-cache/sickgear/webserve.py", line 1044, in get yield self.route_method(route, use_404=True)
File "/share/CACHEDEV1_DATA/.qpkg/OSickGear/repo-cache/lib/tornado/gen.py", line 783, in run value = future.result() ^^^^^^^^^^^^^^^
File "/share/CACHEDEV1_DATA/.qpkg/OSickGear/repo-cache/lib/tornado/gen.py", line 796, in run yielded = self.gen.throw(exc) ^^^^^^^^^^^^^^^^^^^
File "/share/CACHEDEV1_DATA/.qpkg/OSickGear/repo-cache/sickgear/webserve.py", line 350, in route_method result = yield self.async_call(method, filter_kwargs) # method(**filter_kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/share/CACHEDEV1_DATA/.qpkg/OSickGear/repo-cache/lib/tornado/gen.py", line 783, in run value = future.result() ^^^^^^^^^^^^^^^
File "/share/CACHEDEV1_DATA/.qpkg/OSickGear/repo-cache/lib/sg_futures/py3.py", line 40, in run result = self.fn(*self.args, **self.kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/share/CACHEDEV1_DATA/.qpkg/OSickGear/repo-cache/sickgear/webserve.py", line 359, in async_call raise e
File "/share/CACHEDEV1_DATA/.qpkg/OSickGear/repo-cache/sickgear/webserve.py", line 357, in async_call return function(**kw) ^^^^^^^^^^^^^^
File "/share/CACHEDEV1_DATA/.qpkg/OSickGear/repo-cache/sickgear/webserve.py", line 1148, in view_shows return Home(self.application, self.request).view_shows() ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/share/CACHEDEV1_DATA/.qpkg/OSickGear/repo-cache/sickgear/webserve.py", line 1758, in view_shows return t.respond() ^^^^^^^^^^^
File "/share/CACHEDEV1_DATA/.qpkg/OSickGear/config/cache/cheetah/_share_CACHEDEV1_DATA__qpkg_OSickGear_repo_cache_gui_slick_interfaces_default_home_tmpl.py", line 441, in respond data_lastdate = VFN(VFN(VFFSL(SL,"SGDatetime",True),"convert_to_setting",False)(VFN(VFFSL(SL,"network_timezones",True),"parse_date_time",False)(VFFSL(SL,"cur_airs_last",True), VFFSL(SL,"cur_show_obj.airs",True), VFFSL(SL,"cur_show_obj.network",True))),"strftime",False)('%Y%m%d%H%M') ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/share/CACHEDEV1_DATA/.qpkg/OSickGear/repo-cache/lib/dateutil/tz/tz.py", line 231, in dst if self._isdst(dt): ^^^^^^^^^^^^^^^
File "/share/CACHEDEV1_DATA/.qpkg/OSickGear/repo-cache/lib/dateutil/tz/tz.py", line 294, in _isdst if self.is_ambiguous(dt): ^^^^^^^^^^^^^^^^^^^^^
File "/share/CACHEDEV1_DATA/.qpkg/OSickGear/repo-cache/lib/dateutil/tz/tz.py", line 256, in is_ambiguous (naive_dst != self._naive_is_dst(dt - self._dst_saved))) ~~~^~~~~~~~~~~~~~~~~
OverflowError: date value out of range

Request Info
method: GET
uri: /view-shows/
version: HTTP/1.1
headers:
body: b''
remote_ip: xxxxxxxxxxxxxxx
protocol: http
host: xxxxxxxxxxxxxxxxxxx
host_name: xxxxxxxxxxxxxxxxxxx
files: {}
connection:
server_connection:
_start_time: 1758182428.793617
_finish_time: None
path: /view-shows/
query:
arguments: {}
query_arguments: {}
body_arguments: {}
_cookies:

Saya sudah mencoba restart dan reinstall, tapi tetap mendapatkan error yang sama. Ada ide solusi?

Hai Shady, dan selamat datang di forum baru. :slight_smile:

Bisakah kamu mulai dengan menjalankan aksi check?

sherpa check

sherpa check
sherpa v250822-stable
selesai: aksi selesai.

• Aksi paket dimulai @ 10:20:15 AM, selesai @ 10:20:41 AM, waktu berlalu = 26 detik

• Aksi paket berikut selesai dengan baik:
instalasi auxiliary PIP dalam 3 detik
reaktivasi nzbToMedia QPKG dalam 1 detik
reaktivasi OSickGear QPKG dalam 16 detik
reaktivasi SABnzbd QPKG dalam 17 detik

• Aksi paket berikut dilewati (dan alasannya):
“sign” Entware QPKG dalam 1 detik (sudah ditandatangani)
“sign” Par2 QPKG dalam 1 detik (arsitektur NAS tidak kompatibel)
“sign” Par2turbo QPKG dalam 1 detik (sudah ditandatangani)
“sign” sherpa QPKG dalam 1 detik (sudah ditandatangani)
“sign” SortMyQPKGs QPKG dalam 1 detik (versi QTS tidak kompatibel)
“sign” Unrar QPKG dalam 1 detik (sudah ditandatangani)
“sign” nzbToMedia QPKG dalam 1 detik (sudah ditandatangani)
“sign” SABnzbd QPKG dalam 1 detik (sudah ditandatangani)
“sign” OSickGear QPKG dalam 1 detik (sudah ditandatangani)
reaktivasi ClamAV QPKG dalam 1 detik (belum terpasang)

Sejauh ini terlihat bagus. :+1:

Selanjutnya: silakan jalankan aksi clean pada SickGear:

/etc/init.d/sickgear.sh clean

… Lalu coba start:

/etc/init.d/sickgear.sh start debug
[~] # /etc/init.d/sickgear.sh clean
> sumber: sickgear.sh, aksi: clean, waktu: Kam 18 Sep 2025 10:56:11 AM BST, beban: 0.20 
- paket: 250822, layanan: 250822, pustaka: 250822
> QPKG diaktifkan: true
> pembaruan aplikasi otomatis: true
- cabang git aktif: main
- PID daemon: 11350
> hentikan daemon PID 11350 dengan SIGTERM (tidak lebih dari 120 detik): 1, 2, OK
- PID daemon: none
> bersihkan repositori lokal: OK
> bersihkan lingkungan virtual Python: OK
> bersihkan cache PyPI: OK
> bersihkan path sementara: OK
- file ada: /opt/bin/git
> buat 'OSickGear' dari repositori remote: OK
- cabang git aktif: main
> buat lingkungan virtual Python baru: OK
> buat konfigurasi QPKG 'pip': OK
> tambahkan lokasi '/share/CACHEDEV1_DATA/.qpkg/OSickGear/pip-cache' sebagai cache 'pip': OK
> tambahkan lokasi '/share/CACHEDEV1_DATA/.qpkg/OSickGear/qpkg-wheels' ke path pencarian 'pip': OK
> kecualikan modul PyPI bermasalah dari pip-requirements.txt: OK
> kecualikan modul PyPI bermasalah dari pip-recommended.txt: OK
> instal modul PyPI dari pip-requirements.txt: OK
> instal modul PyPI dari pip-recommended.txt: OK
> muat port dari file konfigurasi: OK
> mulai daemon: OK
> pantau nama proses daemon muncul (tidak lebih dari 120 detik): 1, OK
> tunggu 10 detik untuk konfirmasi PID masih aktif: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, selesai
- PID daemon: 8916
- alamat listening daemon: 0.0.0.0
> port HTTPS diaktifkan: false
- port HTTP: 7181
> uji respons port 7181 (tidak lebih dari 120 detik): OK
> perbarui ikon QPKG dengan port UI: OK
= sumber: sickgear.sh, aksi: clean, waktu: Kam 18 Sep 2025 10:56:36 AM BST, hasil: OK, waktu berlalu: 0j:00m:26d, beban: 0.45 
[~] # /etc/init.d/sickgear.sh start debug
> sumber: sickgear.sh, aksi: start, waktu: Kam 18 Sep 2025 10:56:56 AM BST, beban: 0.32 
- paket: 250822, layanan: 250822, pustaka: 250822
> QPKG diaktifkan: true
> pembaruan aplikasi otomatis: true
- cabang git aktif: main
- PID daemon: 8916
= sumber: sickgear.sh, aksi: start, waktu: Kam 18 Sep 2025 10:56:56 AM BST, hasil: OK, waktu berlalu: 23ms, beban: 0.32 

Sudah dilakukan. Masih muncul errornya

Clean terlihat bagus, dan start juga (sebenarnya, sepertinya daemon SickGear sudah berjalan). :+1:

Di mana kamu melihat error itu?

http://xxxxxxxxxxxxx:7181/view-shows

Saya berhasil login, tetapi terjadi error saat membuka halaman show.

Apakah Anda sudah melakukan force-refresh pada halaman browser web Anda? CTRL-F5.

Ya, masih belum berhasil

Hmm, saya bertanya-tanya apakah ada nilai tidak valid yang telah ditulis ke dalam database SickGear?

Untuk tujuan pengujian, mari coba mulai SickGear dengan database baru. Kita akan mencadangkan database Anda yang ada terlebih dahulu, lalu mengembalikannya setelahnya. Ini bukan solusi - hanya pengujian saja.

Untuk mencadangkan file database Anda saat ini:

/etc/init.d/sickgear.sh backup

… lalu reset konfigurasi SickGear ke pengaturan default:

/etc/init.d/sickgear.sh reset-config

Sekarang, coba akses kembali halaman web SickGear Anda. Daftar acara TV Anda akan kosong. Apakah ada error yang muncul?

Setelah Anda mencobanya, kembalikan file database SickGear Anda dengan:

/etc/init.d/sickgear.sh restore

SickGear akan dihentikan dan dijalankan ulang secara otomatis sesuai kebutuhan. Tidak perlu memposting output apa pun kali ini.

Sudah saya coba, bro, tapi tetap saja. Masih muncul pesan error yang sama.

Untuk konfirmasi: Anda sudah mencoba mengakses halaman web SickGear setelah mereset konfigurasi Anda dan sebelum memulihkannya? Dan melihat kesalahan yang sama?

Masalah ini mungkin memerlukan bantuan dari pengembang SickGear: [How to] Report Issues · SickGear/SickGear Wiki · GitHub

Ada juga paket SickGear “resmi” yang tersedia, mungkin layak dicoba? Install SickGear 05 QNAP · SickGear/SickGear Wiki · GitHub

Ok, saya curang. Saya menggunakan Claude untuk mendekode error :slight_smile:

Ringkasan Masalah & Solusi SickGear Date Overflow Error

Masalah:

SickGear menampilkan OverflowError('date value out of range') saat mencoba memuat halaman view-shows. Error ini terjadi selama perhitungan zona waktu ketika memproses tanggal tayang acara.

Penyebab Utama:

Database SickGear berisi timestamp dari tahun 1970 (sekitar 9 Januari 1970) alih-alih tanggal terbaru yang benar:

  • Shows: Nilai last_update_indexer sekitar 739435 (berarti 1970-01-09)
  • Episodes: Nilai airdate sekitar 738153-738181 (juga dari 1970)

Tanggal yang sangat lama ini menyebabkan fungsi perhitungan zona waktu Python dateutil gagal saat mencoba memproses transisi daylight saving time dan konversi zona waktu.

Solusi:

Dua perintah SQL UPDATE untuk memperbaiki timestamp yang bermasalah:

sql

-- Memperbaiki timestamp update acara (set ke waktu saat ini)
UPDATE tv_shows SET last_update_indexer = strftime('%s', 'now') WHERE last_update_indexer < 946684800;

-- Memperbaiki tanggal tayang episode (set ke NULL/tidak diketahui)
UPDATE tv_episodes SET airdate = NULL WHERE airdate > 0 AND airdate < 946684800;

Langkah Penyelesaian:

  1. Menghentikan layanan SickGear (PID 31531)
  2. Membackup database (sickbeard.db)
  3. Menerapkan perintah SQL untuk memperbarui tanggal yang bermasalah
  4. Merestart SickGear menggunakan /share/CACHEDEV1_DATA/.qpkg/OSickGear/sickgear.sh start

Solusi ini memperbaiki error overflow dengan memastikan semua tanggal di database berada dalam rentang valid untuk perhitungan zona waktu modern, sehingga antarmuka web SickGear dapat berfungsi dengan baik kembali.

Oh, bagus! :+1:

Dan apakah ini benar-benar memperbaiki masalahnya?

Ya, berfungsi dengan baik. Sebagai seseorang yang bukan programmer, bisa meminta Claude untuk menemukan masalah, menulis kode, dan memberi tahu saya cara memperbaikinya benar-benar sangat cerdas.

Luar biasa!

Namun, tetap saja sebaiknya memberi tahu para pengembang tentang masalah ini dan solusinya. Hal ini mungkin dapat membantu mencegah kejadian serupa di masa mendatang.

Hai, Apa maksud dari error ini?!

[~] # sherpa check
sherpa v250927-stable
selesai: aksi selesai.

• Aksi paket dimulai @ 2:15:17 PM, selesai @ 2:15:24 PM, waktu berlalu = 7 detik

• Aksi paket berikut dilewati (dan alasannya):
    "sign" Entware QPKG dalam 1 detik (sudah ditandatangani)
    "sign" Par2turbo QPKG dalam 1 detik (sudah ditandatangani)
    "sign" sherpa QPKG dalam 1 detik (sudah ditandatangani)
    "sign" OTransmission QPKG dalam 1 detik (sudah ditandatangani)

• Aksi paket berikut gagal (dan alasannya):
    reactivate OTransmission QPKG dalam 2 detik (1)