Dietpi: Ada masalah dengan cron dan auto backup (dari v6.10-6.11)?

Dibuat pada 6 Jul 2018  Β·  24Komentar  Β·  Sumber: MichaIng/DietPi

Membuat laporan / masalah bug:

Informasi yang dibutuhkan:

  • Versi DietPi | 6.11
  • Versi distro | 9.4
  • Versi kernel | # 1123 SMP Rab 27 Jun 17:35:49 BST 2018
  • Perangkat SBC | RPi 3 Model B + (arm7l)
  • Catu daya digunakan | 5V 3.1A
  • SDcard digunakan | Melampaui Kelas 10 UHS-I

Informasi Tambahan (jika ada):

  • Judul perangkat lunak | dietpi-cron, crontab, dietpi-backup

Langkah-langkah untuk mereproduksi:


Saya menggunakan mulai otomatis khusus ke X dengan kromium dalam mode kios (24/7) dan melakukan ini: https://www.youtube.com/watch?v=P9Sk9bNrzeg
Saya mengatur cadangan (ke google drive) yang dibuat oleh cron di folder cron.daily - Saya menulis skrip:

#!/bin/sh

G_USER_INPUT=0
/DietPi/dietpi/dietpi-backup 1 > /mnt/rpi/backup.log && tar zcfv /mnt/rpi/backup.tar.gz /mnt/backup/dietpi-backup/ >> /mnt/rpi/backup.log && rclone copy /mnt/rpi/backup.tar.gz dysk: -L >> /mnt/rpi/backup.log && rm -r /mnt/rpi/backup.tar.gz >> /mnt/rpi/backup.log && reboot

Perilaku yang diharapkan:


Skrip ini bekerja dengan baik hingga versi 6.9 dari DietPi ketika dijalankan dari cron.daily.
Script berfungsi dengan baik ketika saya menjalankannya secara manual.

Perilaku sebenarnya:


Setelah memperbarui ke v.6.10 dan v.6.11, skrip tidak berfungsi dari cron.daily, tetapi berfungsi dengan baik saat memulai secara manual.

Detail tambahan:


Di backup.log saya memiliki string karakter yang tidak dapat dipahami dengan string seperti ini: memeriksa akses root elevasi.
Juga tidak dimulai dari crontab.

Bug Solution available

Komentar yang paling membantu

@Fourdee OpenSSH_7.7p1, OpenSSL 1.1.0h di Arch Linux

@MichaIng terima kasih senang saya bisa membantu secara kebetulan!

Harap diingat bahwa saya adalah seorang sysadmin yang buruk dan dengan mengikuti artikel ini oleh Tom Ryder, saya telah mengetahui bahwa saya memiliki konfigurasi terminal "deklarasi" yang salah konfigurasi.

Pada akhirnya yang memperbaiki masalah saya adalah

  • mengekspor $ TERM yang benar di /root/.bashrc
  • menyalin entri terminfo yang benar dari instalasi arch saya di folder pi /root/.terminfo

Saya tidak dapat memindai file terminfo ke pi saya, karena scp tidak diinstal (mungkin pertimbangkan untuk menginstalnya bersama dengan server dropbear?), Jadi saya mengunggahnya ke server yang saya miliki dan hanya mendownloadnya dari pi.

Senang bisa membantu, bersorak dan minta maaf lagi atas kekacauannya - lanjutkan!

Semua 24 komentar

@elot
Terima kasih atas laporannya.

G_USER_INPUT=0 seharusnya benar-benar terdeteksi otomatis pada eksekusi cron, jadi tidak perlu ditetapkan. Tetapi jika Anda ingin mempengaruhi, Anda perlu mengekspornya, yang tentunya patut untuk dicoba:
export G_USER_INPUT=0

Pada eksekusi non-interaktif, skrip akan keluar, jika (hampir) ruang kosong yang tidak mencukupi terdeteksi pada drive target: https://github.com/Fourdee/DietPi/blob/master/dietpi/dietpi-backup#L456
Tapi Anda katakan, eksekusi manual berfungsi dengan baik? Jika ruang kosong tidak mencukupi, Anda akan melihat prompt whiptail maka itu memberi Anda pilihan untuk mengabaikan atau keluar.

Tentang entri log, beberapa kode warna samar + checking for elevation root access diharapkan. Mencoba:
cat /mnt/rpi/backup.log
agar kode warna aktif dan log dengan demikian diformat. Berikan juga keluaran ini di sini, sehingga kami dapat memeriksa pada tahap mana masalah tersebut terjadi.

Script berfungsi dengan baik ketika saya menjalankannya secara manual.

Aneh.

Coba jalankan tugas cron dan tempel hasil log /mnt/rpi/backup.log

NB: dietpi-backup secara otomatis mengeluarkan rsync ke logfile /var/log/dietpi-backup.log , Anda dapat menggunakannya juga.

Jadi, saya mencoba menjalankan tugas cron tanpa G_USER_INPUT = 0 (Saya menghapus ini dari skrip) dan ...

File log cadangan saya dari /mnt/rpi/backup.log
[90m[[0m[33m......[90m][0m Checking for (elevated) root access[0m

dietpi-backup.log kosong

Saya tidak melihat proses aktif setelah waktu cron dimulai.

Jadi, saya menambahkan untuk menguji skrip lain, untuk melihat output dalam file setelah cron start:

#!/bin/sh

echo 'Cron works!' > /mnt/rpi/cronworks.log

tetapi skrip ini belum dimulai - tidak ada file "cronworks.log" di / mnt / rpi /
itu aneh karena ada file keluaran (backup.log) dari skrip saya dengan cadangan (dari 1 posting saya), tetapi tidak dari yang sederhana ini

@elot
Oke, setidaknya ada juga kesalahan dengan cron. Perhatikan bahwa cron memulai skrip melalui run-parts /etc/cron.X/script dan ada beberapa aturan, misalnya skrip harus dimiliki oleh root (AFAIK) dan yang lebih pasti skrip tidak boleh memiliki akhiran file. Itu berarti /etc/cron.daily/script.sh akan dilewati, namanya harus /etc/cron.daily/script sebagai gantinya.

Juga tidak diperlukan, tapi coba gunakan #!/bin/bash sebagai shebang saat menggunakan dengan skrip DietPi. Mereka sendiri memiliki #!/bin/bash , tetapi agar gagal, coba gunakan juga di dalam skrip cron.

Script selalu memiliki nama "backup" (tanpa .sh), saya mengubah "#! / Bin / sh" menjadi "#! / Bin / bash" di script juga, dan script ini sudah dimiliki oleh root. Skrip "test" saya dari posting terakhir sekarang juga berfungsi.

Saya mencoba segalanya, tetapi tetap tidak berhasil. Saya mengubah skrip untuk mencetak ke file log setelah menyelesaikan satu pekerjaan dan saya melihat skrip itu dimulai, tetapi pencadangan tidak dimulai atau selesai (dietpi-backup.log kosong), karena tidak dapat pergi ke pekerjaan berikutnya seperti tar, rclone dll Dan juga setelah menjalankan cron saya melihat proses / usr / sbin / cron -f bekerja dan -bash - apakah normal?

Skrip masih berfungsi jika saya menjalankannya secara manual - tetapi ketika pencadangan selesai, saya harus mengklik OK dan Batal (layar whiptail), dan setelah itu - pekerjaan berikutnya dimulai.

Saya pikir masalahnya adalah dengan menggunakan dietpi-backup ke auto backup yang dimulai oleh cron. Ini bekerja pada versi 6.9, tetapi tidak berfungsi setelah menulis ulang dietpi-backup.

@elot
Sekali lagi, untuk memastikan:

  • Jika Anda mengeksekusi secara manual /DietPi/dietpi/dietpi-backup 1 berhasil dijalankan?
  • Jika Anda menjalankan G_USER_INPUTS=0 /DietPi/dietpi/dietpi-backup 1 berfungsi tanpa kesalahan juga, menunjukkan sesuatu seperti:
root@VM-Jessie:~# G_USER_INPUTS=0 /DietPi/dietpi/dietpi-backup 1
[  OK  ] Root access verified.
[  OK  ] DietPi-Drive_Manager | RootFS R/W access verified.

[  OK  ] DietPi-Backup | Checking for pre-req APT packages: rsync
[ INFO ] DietPi-Backup | Flagged for installation: rsync
[  OK  ] DietPi-Backup | APT installation for: rsync, please wait...
Selecting previously unselected package rsync.
(Reading database ... 36227 files and directories currently installed.)
Preparing to unpack .../rsync_3.1.1-3+deb8u1_amd64.deb ...
Unpacking rsync (3.1.1-3+deb8u1) ...
Processing triggers for systemd (215-17+deb8u7) ...
Setting up rsync (3.1.1-3+deb8u1) ...
Processing triggers for systemd (215-17+deb8u7) ...

[  OK  ] DietPi-Backup | G_AGI: rsync

 DietPi-Backup
─────────────────────────────────────────────────────
 Mode: Backup

[  OK  ] DietPi-Backup | DietPi-Userdata validation: /mnt/dietpi_userdata
[ SUB1 ] DietPi-Services > stop
[  OK  ] DietPi-Services | occ maintenance:mode --on
[  OK  ] DietPi-Services | stop : cron
[  OK  ] DietPi-Services | stop : sonarr
[  OK  ] DietPi-Services | stop : lighttpd
[  OK  ] DietPi-Services | stop : php5-fpm
[  OK  ] DietPi-Services | stop : mysql
[ SUB1 ] DietPi-Services > stop
[  OK  ] DietPi-Services | stop : cron
[  OK  ] DietPi-Services | stop : sonarr
[  OK  ] DietPi-Services | stop : lighttpd
[  OK  ] DietPi-Services | stop : php5-fpm
[  OK  ] DietPi-Services | stop : mysql
[ INFO ] DietPi-Backup | Backing up to: /mnt/dietpi-backup
[  OK  ] DietPi-Backup | Free space check: path=/mnt/dietpi-backup/data | available=5695 MB | required=1861 MB
[  OK  ] DietPi-Backup | rsync -aH --delete --delete-excluded --exclude-from=/tmp/.dietpi-backup_filter_inc_exc -v --log-file=/var/log/dietpi-backup.log / /mnt/dietpi-backup/data/
[ INFO ] DietPi-Backup | Backup Completed:

Backup was saved to:
- /mnt/dietpi-backup
- Log file: /var/log/dietpi-backup.log
[ SUB1 ] DietPi-Services > start
[  OK  ] DietPi-Services | start : mysql
[  OK  ] DietPi-Services | start : php5-fpm
[  OK  ] DietPi-Services | start : lighttpd
[  OK  ] DietPi-Services | start : sonarr
[  OK  ] DietPi-Services | start : cron
[ SUB2 ] DietPi-Process_tool > Apply
[  OK  ] DietPi-Process_tool | Completed
[  OK  ] DietPi-Services | occ maintenance:mode --off

  • Menjalankan baris perintah yang tepat dari skrip
/DietPi/dietpi/dietpi-backup 1 > /mnt/rpi/backup.log && tar zcfv /mnt/rpi/backup.tar.gz /mnt/backup/dietpi-backup/ >> /mnt/rpi/backup.log && rclone copy /mnt/rpi/backup.tar.gz dysk: -L >> /mnt/rpi/backup.log && rm -r /mnt/rpi/backup.tar.gz >> /mnt/rpi/backup.log && reboot

bekerja juga, menunjukkan semua dieksekusi dan diselesaikan dalam /mnt/rpi/backup.log ?

  • run-parts --test /etc/cron.daily mencantumkan skrip Anda (jika dalam harian, jika tidak sesuaikan)
  • /usr/sbin/cron -f + -bash diharapkan ya, karena ini memulai lingkungan bash karena #!/bin/bash .

Jika semua hal di atas benar, maka dapatkah Anda mencoba menjalankan bagian-bagian secara manual dan melihat apakah itu dijalankan seperti yang diharapkan:

  • Pindahkan / salin script ke folder terpisah, misal ~/testdir/backup
  • Kemudian run-parts ~/testdir

Saya menguji saat Anda menunjukkan dan pada setiap pertanyaan Anda: ya, semuanya berfungsi ketika saya memulainya secara manual.
Saya mengujinya dengan perintah run-parts, tetapi masih berfungsi - ketika saya melakukannya secara manual.

Script saya terdaftar setelah digunakan run-parts --test /etc/cron.daily

Jika saya menambahkan G_USER_INPUTS = 0 dan memulai skrip secara manual, apakah saya harus melihat layar (whiptail) dengan informasi tentang log, dll.? Karena saya selalu melihatnya.

@elot
G_USER_INPUTS=0 hanya menonaktifkan menu whiptail untuk ditampilkan. Informasi hanya ditampilkan sebagai pesan terminal dan pertanyaan dijawab sebagai "tidak" (batalkan jika pemeriksaan ruang kosong tidak mencukupi, tidak ada tampilan log).

Untuk memaksanya masuk ke skrip, Anda perlu mengekspornya sebelum menjalankan skrip:

#!/bin/bash
export G_USER_INPUTS=0
/DietPi/dietpi/dietpi-backup 1

atau lebih mudah langsung berikan saja: G_USER_INPUTS=0 /DietPi/dietpi/dietpi-backup 1

Saya baru tahu bahwa Anda menggunakan G_USER_INPUT=0 atas tanpa S , harus G_USER_INPUTS=0 dengan S .

Tetapi jika variabel tidak diekspor, skrip akan menentukan, apakah input pengguna dapat dibuat atau tidak. Dalam cron dan misalnya eksekusi unit systemd, semua skrip DietPi harus secara otomatis menentukan dan menetapkan G_USER_INPUTS=0 .
Anda dapat memverifikasi bahwa metode kami berfungsi, dengan menambahkan ke awal tugas cron Anda (atau tugas uji):
[[ -t 0 ]] && echo 'This environments allows user inputs' > /mnt/rpi/inputs.log || echo 'This environment does not allow user inputs' > /mnt/rpi/inputs.log
Saat menjalankan skrip secara manual, harus dikatakan bahwa input pengguna diizinkan (menu whiptail muncul), jika dijalankan melalui cron, maka seharusnya tidak, dan tidak ada menu whiptail yang membuat skrip hang.

Pertama saya menguji G_USER_INPUTS=0 dan jika saya memulai skrip secara manual, log:
This environments allows user inputs
lain jika dimulai dengan cron:
This environment does not allow user inputs

Selanjutnya saya mencoba mengubah skrip saya menjadi ini:

#!/bin/bash
export G_USER_INPUTS=0
date > /mnt/rpi/backup.log && /DietPi/dietpi/dietpi-backup 1 && (echo "Backup: DONE. " >> /mnt/rpi/backup.log && tar zcfv /mnt/rpi/backup.tar.gz /mnt/backup/dietpi-backup/ && echo "Tar backup: DONE. " >> /mnt/rpi/backup.log && rclone copy /mnt/rpi/backup.tar.gz dysk: && echo "Copy to GDrive: DONE. " >> /mnt/rpi/backup.log && rm -r /mnt/rpi/backup.tar.gz && echo "Remove tar: DONE." >> /mnt/rpi/backup.log && reboot) || echo "Backup failed!" >> /mnt/rpi/backup.log

dan dietpi-backup.log masih kosong, tapi backup.log:

ketika cron dimulai dan secara otomatis memulai skrip ini:

pon, 9 lip 2018, 18:54:01 CEST
Backup failed!

ketika saya memulai skrip secara manual:

pon, 9 lip 2018, 18:58:40 CEST
Backup: DONE.
Tar backup: DONE.
Copy to GDrive: DONE.
Remove tar: DONE.

Sangat menjengkelkan ... selanjutnya, skrip saya hanya memiliki:

#!/bin/bash
export G_USER_INPUTS=0
/DietPi/dietpi/dietpi-backup 1

dan masih tidak berfungsi jika skrip ini dimulai oleh cron.

Masalahnya masih dengan dietpi-backup yang dimulai oleh cron dari v6.10. Saya pikir itu masalah dengan perubahan yang Anda buat di v6.10 dalam skrip dietpi-backup.

dietpi-backup.log masih kosong

@elot
Terima kasih atas upaya pengujian Anda.
Saya akan melalui perubahan kami. Sejauh ini tidak ada petunjuk. Setidaknya menurut pengujian Anda, skrip sebenarnya tidak macet (whiptail / G_USER_INPUTS bukan masalahnya), tetapi gagal.

Membuat beberapa pengujian sendiri:

[......] Checking for (elevated) root access

Setelah mengomentari pemeriksaan pengguna root, dalam dietpi-backup , menjalankannya melalui cron mengarah ke:
[FAILED] RootFS is currently Read Only, unable to continue.
Tapi:

root@VM-Jessie:~# G_CHECK_ROOTFS_RW
[  OK  ] Root access verified.
[  OK  ] DietPi-Drive_Manager | RootFS R/W access verified.

@elot

tput adalah masalahnya:
tput: No value for $TERM and no -T specified

  • Menarik, seperti yang kami sebut dengan v6.9 juga πŸ€”.

Perbaiki: https://github.com/Fourdee/DietPi/commit/82ac7b32d32dca9db4fdb824c7ead80174844090

Patch ini juga memperbaiki masalah lain: "run_ntpd 1" dijalankan oleh cron setiap hari atau setiap jam tidak menyinkronkan waktu (stempel waktu / var / lib / systemd / clock tidak berubah).

@kimisara
Jep kamu benar, ini masuk akal.
Hanya untuk menghindari pengeditan skrip manual untuk menerapkan perbaikan, semua dengan masalah yang sama harus dilakukan: wget https://raw.githubusercontent.com/Fourdee/DietPi/82ac7b32d32dca9db4fdb824c7ead80174844090/dietpi/func/dietpi-globals -O /DietPi/dietpi/func/dietpi-globals

Saya pikir beberapa masalah terbuka kami terkait dengan ini. Jika run_ntpd dalam cron.hourly gagal, dietpi-logclear tidak akan dipanggil setelahnya, yang menyebabkan / var / log terisi: https://github.com/Fourdee/DietPi/issues/ 1920

Saya hanya ingin tahu, mengapa masalah ini muncul pertama kali dengan v6.10 +, karena kami sudah menggunakan tput sebelumnya dalam cron jobs kami.
Mungkin seseorang dapat menemukan perubahan, yang menyebabkan masalah, jadi kami tahu bagaimana cara merawatnya lebih baik di masa depan:

Pengujian lebih lanjut tentang ini:

root@VM-Stretch:/tmp# cat /etc/cron.minutely/test
#!/bin/bash

echo "$TERM" &> /tmp/cron.test
tput ed &>> /tmp/cron.test
echo 'finish' &>> /tmp/cron.test
root@VM-Stretch:/tmp# cat cron.test
dumb
tput: No value for $TERM and no -T specified
  • $TERM di cron disetel ke dumb
  • tput mengklaim tidak ada nilai untuk variabel tersebut, meskipun itu tidak valid.
root@VM-Stretch:/tmp# TERM='dumb' tput cols
237
root@VM-Stretch:/tmp# export TERM='dumb' tput cols
root@VM-Stretch:/tmp# export TERM='dumb' tput cols && echo continue
continue
  • Karena $ TERM yang tidak valid tidak menyebabkan kesalahan apa pun (hanya mengarah ke tidak ada output tput), kesalahan tput cron tampaknya terkait dengan hilangnya -T , [[ -t 0 ]] menghasilkan false. Mungkin juga ini berperilaku berbeda sebelumnya. Pembaruan ncurses-bin APT terakhir pada 2018-02-15: http://ftp.de.debian.org/debian/pool/main/n/ncurses/

  • Kami sudah memiliki masalah dengan terminal non-interaktif / tidak valid, jadi sekarang keluar dari skrip dietpi- *, jika $ TERM kosong atau ' unknown ' ditemukan: https://github.com/Fourdee/DietPi/blob/ testing / dietpi / func / dietpi-globals # L30 -L35

  • Tawaran tidak konsisten, karena kita mungkin ingin mengizinkan eksekusi non-interaktif (juga tanpa terminal apa pun yang terpasang), tetapi perlu berhati-hati dalam memanggil tput perintah lain yang memerlukan terminal valid.

Uji di v6.9:

root<strong i="6">@DietPi</strong>:/tmp# cat cron.test
dumb
tput: No value for $TERM and no -T specified
finish
  • Kesalahan muncul, tetapi skrip dilanjutkan.

Pembaruan APT tidak berisi cron dan / atau ncurses (dikurangi dengan paket tidak terkait yang diuji):

  • Bahkan setelah apt-get dist-upgrade dan reboot, cron tidak menghentikan eksekusi setelah kesalahan tput:
root<strong i="15">@DietPi</strong>:/tmp# cat /etc/cron.minutely/test
#!/bin/bash

echo "$TERM" &> /tmp/cron.test
[[ -t 0 ]] && echo 'interactive' &>> /tmp/cron.test
tput ed &>> /tmp/cron.test
echo 'finish' &>> /tmp/cron.test
root<strong i="16">@DietPi</strong>:/tmp# cat cron.test
dumb
tput: No value for $TERM and no -T specified
finish
  • dietpi-update ke v6.11 master: Sangat aneh, masih tidak ada masalah ...
root<strong i="22">@DietPi</strong>:/tmp# cat cron.test
dumb
tput: No value for $TERM and no -T specified
finish
  • Menambahkan eksekusi dietpi-backup:
root<strong i="27">@DietPi</strong>:/tmp# cat /etc/cron.minutely/test
#!/bin/bash

echo "$TERM" &> /tmp/cron.test
[[ -t 0 ]] && echo 'interactive' &>> /tmp/cron.test
tput ed &>> /tmp/cron.test
/DietPi/dietpi/dietpi-backup 1 &>> /tmp/cron.test
echo 'finish' &>> /tmp/cron.test
root<strong i="28">@DietPi</strong>:/tmp# cat cron.test
dumb
tput: No value for $TERM and no -T specified
[......] Checking for (elevated) root accesstput: No value for $TERM and no -T specified
/DietPi/dietpi/func/dietpi-globals: line 266: ( 38 + 6 ) /  : syntax error: operand expected (error token is "/  ")
finish
  • Skrip gagal tetapi tugas cron terus berjalan. Uji dengan dietpi-globals v6.9:
root<strong i="34">@DietPi</strong>:/tmp# cat cron.test
dumb
tput: No value for $TERM and no -T specified
         Checking for (elevated) root accesstput: No value for $TERM and no -T specified
/DietPi/dietpi/func/dietpi-globals: line 308: ((: lines=(38+6)/ : syntax error: operand expected (error token is "/ ")
tput: No value for $TERM and no -T specified
[  OK  ] Root access verified.
         DietPi-Run_ntpd | systemctl restart systemd-timesyncdtput: No value for $TERM and no -T specified
/DietPi/dietpi/func/dietpi-globals: line 308: ((: lines=(38+6)/ : syntax error: operand expected (error token is "/ ")
[..    ] tput: No value for $TERM and no -T specified
[  OK  ] DietPi-Run_ntpd | systemctl restart systemd-timesyncd
[ INFO ] DietPi-Run_ntpd | NTPD: Waiting for completion of systemd-timesyncd (1/60)
[  OK  ] DietPi-Run_ntpd | NTPD: systemd-timesyncd synced
[  OK  ] NTPD: time sync | Completed
finish

- Oke, ini terkait dengan perubahan global, tetapi karena tput gagal dan gagal, mengapa skrip kita keluar sekarang dan tidak keluar di v6.9?

Perubahan terkait teridentifikasi: https://github.com/Fourdee/DietPi/blob/master/dietpi/func/dietpi-globals#L266
local lines=$(( (${#input_string}+6)/$(tput cols) )) mengarah ke seluruh skrip keluar, sedangkan (sebelumnya)

local lines
(( lines=(${#input_string}+6)/$(tput cols) ))

menunjukkan kesalahan, tetapi mengizinkan skrip berjalan (lihat di atas).

Perbaiki https://github.com/Fourdee/DietPi/commit/82ac7b32d32dca9db4fdb824c7ead80174844090 berfungsi dan juga merupakan solusi terbersih, karena tput akan sepenuhnya dilewati dalam shell non-interaktif. Tetapi agar gagal, kita harus kembali ke metode sebelumnya untuk mendeklarasikan variabel terlebih dahulu dan kemudian menetapkan nilai setelahnya dalam lingkungan aritmatika: Komit selesai https://github.com/Fourdee/DietPi/commit/0f18aa4dc0af8ab910a0173dce8849d5b53c30b0

@elotx @kmara
Untuk membersihkan tawaran, saya membuka masalah baru, silakan coba terapkan perbaikan yang disebutkan di sana dan laporkan kembali, jika itu menyelesaikan semua masalah: https://github.com/Fourdee/DietPi/issues/1923

Saya akan menutup masalah ini demi yang baru.

Saya berhasil ssh ke v6.13 saya tetapi itu akan hang setelahnya.

Perintah "tput cols" mengeluarkan tput: terminal tidak dikenal "rxvt-256color" , menghasilkan nilai kosong pada baris 328 dari dietpi-login, membuatnya hang selamanya setelah berhasil membaca database saat boot awal.

Mengekspor TERM = xterm, peretasan jelek, sepertinya telah memperbaiki skrip login, dan sekarang dapat mulai menginstal.

Jika ini adalah bagian yang salah, harap bersabar, karena saya tidak begitu tahu cara menggunakan masalah github; Saya telah menemukan utas ini setelah berjam-jam googling yang tidak berguna untuk kesalahan, jika Anda memindahkannya mungkin meninggalkan sisa tentang kesalahan warna rxvt-256, jika seseorang memiliki masalah yang sama.

Salam Hormat!

@wuhei

Hai,

Terima kasih atas laporan dan solusinya πŸ‘

Klien SSH mana yang Anda jalankan?

@Tokopedia
Saya membuka edisi terpisah untuk ini. Mengidentifikasi masalah: https://github.com/Fourdee/DietPi/issues/2034

@wuhei
Setelah login ke SSH silakan coba: export TERM='xterm-256color' €: Ah ini pada dasarnya apa yang sudah Anda temukan πŸ˜„.
Jika ini berhasil, Anda dapat menambahkan skrip ke /etc/profile.d/ yang berisi sesuatu seperti:
[[ $SSH_TTY ]] && [[ $TERM =~ 256 ]] && export TERM='xterm-256color'

  • Dengan kata lain: Jika ini adalah koneksi SSH, dan klien SSH melewati terminal warna 256 bit, kemudian sesuaikan ke xterm-256color , yang didukung oleh DietPi.

Alternatifnya adalah menginstal paket yang berisi lebih banyak definisi terminal: G_AGI ncurses-term

@Fourdee OpenSSH_7.7p1, OpenSSL 1.1.0h di Arch Linux

@MichaIng terima kasih senang saya bisa membantu secara kebetulan!

Harap diingat bahwa saya adalah seorang sysadmin yang buruk dan dengan mengikuti artikel ini oleh Tom Ryder, saya telah mengetahui bahwa saya memiliki konfigurasi terminal "deklarasi" yang salah konfigurasi.

Pada akhirnya yang memperbaiki masalah saya adalah

  • mengekspor $ TERM yang benar di /root/.bashrc
  • menyalin entri terminfo yang benar dari instalasi arch saya di folder pi /root/.terminfo

Saya tidak dapat memindai file terminfo ke pi saya, karena scp tidak diinstal (mungkin pertimbangkan untuk menginstalnya bersama dengan server dropbear?), Jadi saya mengunggahnya ke server yang saya miliki dan hanya mendownloadnya dari pi.

Senang bisa membantu, bersorak dan minta maaf lagi atas kekacauannya - lanjutkan!

@wuhei
Jep, menyetel $ TERM dalam /root/.bashrc tentu saja berfungsi juga, menambahkannya ke /etc/profile[.d/] menyelesaikannya di seluruh sistem untuk semua pengguna, yang merupakan solusi yang akan kami gunakan dengan DietPi.

Artikel yang Anda tautkan cukup bagus, menjelaskan segalanya dan kemungkinan dengan sangat baik πŸ‘. Jadi pada dasarnya Anda menginstal tipe terminal yang diperlukan secara manual. Artikel tersebut juga menyebutkan paket ncurses-term sebagai opsi untuk menginstal berbagai definisi terminal. Tetapi untuk menjaga DietPi tetap ramping, saya tidak ingin menginstal paket ini sebelumnya untuk kasus yang jarang terjadi. Sebaliknya lebih baik, gunakan solusi bashrc / profile; Mungkin juga untuk memeriksa dukungan terminal sebelum menerapkan perbaikan pada login SSH.

Untuk pengujian dengan klien PuTTY: PuTTY> Connection > Data > Terminal-type string

Tentang menginstal SCP: Ada beberapa protokol transfer file lainnya, FTP, SFTP atau drive jaringan NFS, SMB, untuk mentransfer file. Saya tidak akan melakukan pra-instal, tetapi memberikan pilihan kepada pengguna bagaimana cara mendapatkan file dari klien ke server. Stik USB, drive eksternal tentu saja juga dimungkinkan atau cukup salin & tempel ke terminal SSH untuk berjaga-jaga. Tetapi bagaimanapun sebagai solusi umum saya akan menggunakan salah satu dari dua cara yang disebutkan di atas.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat