nonaktifkan:
di authenticated user dan gurujurnal
moodle/user:manageownfiles
moodle/user:manageownfiles
| Grade report: Overview report | |||||||
| View overview reportgradereport/overview:view | |||||||
|---|---|---|---|---|---|---|---|
4G Ceria Telkomsel - Agar Tidak Habis Pulsa..
Cara Install driver printer Epson L321 di Ubuntu Linux
Cara Install driver Printer Canon di Ubuntu Linux
nonaktifkan:
di authenticated user dan gurujurnal
moodle/user:manageownfiles
moodle/user:manageownfiles
| Grade report: Overview report | |||||||
| View overview reportgradereport/overview:view | |||||||
|---|---|---|---|---|---|---|---|
sudo php /var/www/html/moodle/admin/cli/upgrade.php
== Upgrading Moodle database from version 4.5.4+ (Build: 20250530) (2024100704.08) to 4.5.4+ (Build: 20250530) (2024100704.08) ==
Your Moodle files have been changed, and you are about to automatically
upgrade your server to this version:
4.5.4+ (BUILD: 20250530) (2024100704.08)
Once you do this you can not go back again. Please note that this process
can take a long time.
Are you sure you want to upgrade this server to this version?
type y (means yes) or n (means no)
: y
-->upgrade_noncore()
++ Success (0.88 seconds) ++
== Setting new default values ==
cat /var/www/html/moodle/local/jurnalmengajar/settings.php
Command line upgrade from 4.5.4+ (Build: 20250530) (2024100704.08) to 4.5.4+ (Build: 20250530) (2024100704.08) completed successfully.
Perintah: systemctl status NetworkManager
digunakan untuk melihat status layanan NetworkManager di Linux.
Saya jelaskan satu-satu supaya jelas.
systemctl adalah perintah untuk mengatur service / layanan di Linux yang memakai systemd.
Fungsinya bisa untuk:
start service
stop service
restart
enable saat boot
cek status
Contoh:
systemctl start NetworkManager
systemctl stop NetworkManager
systemctl restart NetworkManager
systemctl status NetworkManager
NetworkManager adalah service yang mengatur jaringan:
DHCP
IP static
WiFi
Ethernet
DNS
Gateway
Kalau pakai:
nmcli
nmtui
→ berarti jaringan diatur oleh NetworkManager.
systemctl status NetworkManager
Artinya:
Mengecek apakah NetworkManager sedang berjalan atau tidak.
Contoh hasil:
● NetworkManager.service - Network Manager
Loaded: loaded (/lib/systemd/system/NetworkManager.service)
Active: active (running) since ...
Arti bagian penting:
| Tulisan | Artinya |
|---|---|
| Loaded | Service ada |
| Active: active (running) | Service sedang berjalan |
| Active: inactive | Tidak berjalan |
| failed | Error |
| enabled | Otomatis jalan saat boot |
| disabled | Tidak otomatis jalan |
Karena di Linux ada 3 cara mengatur IP:
| Sistem | File / Tool |
|---|---|
| NetworkManager | nmcli, nmtui |
| Netplan | /etc/netplan/*.yaml |
| Interfaces lama | /etc/network/interfaces |
Kalau NetworkManager running, maka:
IP diubah lewat nmcli / nmtui, bukan edit file interfaces.
Perintah ini:
systemctl status NetworkManager
Digunakan untuk memastikan:
Apakah jaringan diatur oleh NetworkManager
Apakah service jaringan sedang berjalan
Untuk troubleshooting kalau tidak dapat IP / internet
Kalau di STB Anda kemungkinan besar hasilnya:
Active: active (running)
Berarti ubah DHCP/Static pakai:
nmcli
atau
nmtui
Untuk mencari file PHP yang di dalam isinya ada tulisan all.php di folder:
/var/www/html/moodle/local/jurnalmengajar/
gunakan perintah grep berikut:
grep -R "all.php" /var/www/html/moodle/local/jurnalmengajar/
grep = mencari teks
-R = recursive (semua folder di dalamnya)
"all.php" = teks yang dicari
path = lokasi folder
Supaya lebih spesifik hanya file .php:
grep -R --include="*.php" "all.php" /var/www/html/moodle/local/jurnalmengajar/
grep -Rl --include="*.php" "all.php" /var/www/html/moodle/local/jurnalmengajar/
Huruf kecil L di -Rl
grep -Rn --include="*.php" "all.php" /var/www/html/moodle/local/jurnalmengajar/
Artinya:
-R = semua folder
-n = tampilkan nomor baris
--include="*.php" = hanya file php
Kalau mau mencari kata lain misalnya require, include, dll tinggal ganti saja:
grep -Rn "require" /var/www/html/moodle/local/jurnalmengajar/
di alamat: https://xxxxx.yyyyy.id/admin/settings.php?section=themesettingboost#theme_boost_advanced
atau di RAW INITAL CSS
http://localhost/admin/search.php?query=raw+initial
isikan:
[data-key="mycourses"] {
display: none !important;
}
/* Hide Edit mode switch */
form.editmode-switch-form {
display: none !important;
}
/* Hide label Edit mode */
label[for*="editingswitch"] {
display: none !important;
}
/* Hide switch button */
.editmode-switch-form .custom-control {
display: none !important;
}
============================================================
Bagus, berarti CSS-nya sudah bekerja.
Kalau nanti ingin memunculkan kembali My courses dan Edit mode, ada beberapa cara.
Masuk lagi ke:
Site administration → Appearance → Themes → Boost → Advanced settings → Raw SCSS
Hapus CSS yang tadi Anda tambahkan:
[data-key="mycourses"] {
display: none !important;
}
/* Hide Edit mode switch */
form.editmode-switch-form {
display: none !important;
}
/* Hide label Edit mode */
label[for*="editingswitch"] {
display: none !important;
}
/* Hide switch button */
.editmode-switch-form .custom-control {
display: none !important;
}
Lalu:
Site administration → Development → Purge caches
Menu dan Edit mode akan muncul kembali.
Lebih bagus CSS dibuat bisa diaktifkan/nonaktifkan dengan komentar.
Contoh simpan di Raw SCSS seperti ini:
/* ===== HIDE MOODLE LMS MENU ===== */
/*
[data-key="mycourses"] {
display: none !important;
}
form.editmode-switch-form {
display: none !important;
}
label[for*="editingswitch"] {
display: none !important;
}
.editmode-switch-form .custom-control {
display: none !important;
}
*/
Kalau mau disembunyikan → hapus /* */
Kalau mau dimunculkan → tambahkan /* */
Jadi tidak perlu menghapus kode.
Karena Moodle Anda dipakai sebagai Sistem Jurnal Sekolah, biasanya setup yang dipakai:
Disembunyikan:
My courses
Courses
Grades
Edit mode
Participants
Badges
Competencies
Ditampilkan:
Dashboard
Jurnal Mengajar
Jurnal Wali
Surat Izin
BK
Pembinaan
Rekap
Laporan
Semua menu tetap ada.
Kalau nanti mau, bisa dibuat CSS hanya berlaku untuk guru, tidak untuk admin.
Password untuk mysql -u root -p tergantung saat instal MariaDB/MySQL dulu, jadi tidak selalu sama tiap server.
Di STB Armbian biasanya ada beberapa kemungkinan.
Coba dulu:
sudo mysql
Kalau langsung masuk MariaDB berarti root login pakai unix_socket (tanpa password).
Kalau sudah masuk akan muncul:
MariaDB [(none)]>
Lihat database:
SHOW DATABASES;
Hapus database Moodle:
DROP DATABASE moodle;
Keluar:
EXIT;
Reset password MariaDB root:
sudo systemctl stop mariadb
sudo mysqld_safe --skip-grant-tables --skip-networking &
Tunggu beberapa detik.
mysql -u root
FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'passwordbaru';
EXIT;
sudo systemctl restart mariadb
Sekarang login:
mysql -u root -p
Password = passwordbaru
Biasanya cukup:
sudo mysql
Tidak perlu password.
Setelah masuk langsung:
SHOW DATABASES;
DROP DATABASE moodle;
Sekarang terlihat jelas struktur /var/www/html.
apps 492M
moodle 411M
core 189M
dist 74M
3rdparty 48M
lib 18M
Struktur ini sebenarnya bukan Moodle / WordPress, tapi Nextcloud (karena ada folder apps, core, updater, ocs, dll).
Jadi kesimpulannya:
| Folder | Ukuran |
|---|---|
| /var/www/nextcloud | 822M |
| /var/www/html (Nextcloud web) | 1.3G |
| Moodle | kemungkinan di tempat lain |
| Root kecil | 6.5G |
👉 Nextcloud yang memenuhi root storage.
Total Nextcloud:
Nextcloud web 1.3G
Nextcloud folder 822M
TOTAL ~2.1G
Untuk root 6.5GB → ini sangat besar.
Pindahkan Nextcloud ke HDD (/mnt/seagate atau /mnt/audio).
Ini solusi paling benar, bukan menghapus.
Misalnya pindah ke /mnt/seagate/nextcloud
systemctl stop nginx
systemctl stop php8.2-fpm
mv /var/www/html /mnt/seagate/nextcloud
ln -s /mnt/seagate/nextcloud /var/www/html
systemctl start php8.2-fpm
systemctl start nginx
df -h
Root harus turun dari:
83% → sekitar 50%
Sebaiknya:
| Lokasi | Isi |
|---|---|
| / (root kecil) | OS + nginx + php + mysql |
| /var/lib/mysql | database |
| /mnt/seagate | moodledata |
| /mnt/seagate | nextcloud |
| /mnt/seagate | backup |
| /mnt/audio | music navidrome |
| /var/www | hanya symlink |
Masalah server Guru bukan HDD penuh, tapi:
Root kecil (6.5GB) terisi Nextcloud + web files
Solusi permanen:
Pindahkan Nextcloud
Pindahkan moodledata
Simpan semua data di /mnt
Kalau Guru mau, kita bisa rapikan struktur server supaya:
Moodle
Nextcloud
Navidrome
Backup
Database
Semua aman dan root tidak pernah penuh lagi.
du -h --max-depth=1 / | sort -h
du: tidak dapat membaca direktori '/mnt/audio': error Masukan/Keluaran
du: tidak dapat mengakses '/proc/73770/task/73770/fd/3': Tidak ada berkas atau direktori seperti itu
du: tidak dapat mengakses '/proc/73770/task/73770/fdinfo/3': Tidak ada berkas atau direktori seperti itu
du: tidak dapat mengakses '/proc/73770/fd/4': Tidak ada berkas atau direktori seperti itu
du: tidak dapat mengakses '/proc/73770/fdinfo/4': Tidak ada berkas atau direktori seperti itu
0 /dev
0 /proc
0 /sys
0 /tmp
4,0K /media
4,0K /selinux
4,0K /srv
16K /lost+found
72K /root
15M /run
16M /etc
81M /opt
82M /home
153M /boot
2,4G /usr
2,9G /var
85G /mnt
90G /
du -h --max-depth=1 /mnt | sort -h
du: tidak dapat membaca direktori '/mnt/audio': error Masukan/Keluaran
4,0K /mnt/audio
85G /mnt
85G /mnt/seagate
df -h
Sistem Berkas Besar Isi Sisa Isi% Dipasang di
udev 762M 0 762M 0% /dev
tmpfs 180M 15M 165M 9% /run
/dev/mmcblk2p2 6,5G 5,4G 1,2G 83% /
tmpfs 897M 0 897M 0% /dev/shm
tmpfs 5,0M 8,0K 5,0M 1% /run/lock
tmpfs 897M 0 897M 0% /tmp
/dev/mmcblk2p1 510M 153M 358M 30% /boot
/dev/zram1 47M 11M 34M 24% /var/log
/dev/sda1 458G 62G 373G 15% /mnt/audio
/dev/sdd1 458G 85G 350G 20% /mnt/seagate
tmpfs 180M 0 180M 0% /run/user/0
# du -h --max-depth=1 --exclude=/mnt / | sort -h
du: tidak dapat mengakses '/proc/74010/task/74010/fd/3': Tidak ada berkas atau direktori seperti itu
du: tidak dapat mengakses '/proc/74010/task/74010/fdinfo/3': Tidak ada berkas atau direktori seperti itu
du: tidak dapat mengakses '/proc/74010/fd/4': Tidak ada berkas atau direktori seperti itu
du: tidak dapat mengakses '/proc/74010/fdinfo/4': Tidak ada berkas atau direktori seperti itu
0 /dev
0 /proc
0 /sys
0 /tmp
4,0K /media
4,0K /selinux
4,0K /srv
16K /lost+found
72K /root
15M /run
16M /etc
81M /opt
82M /home
153M /boot
2,4G /usr
2,9G /var
5,6G /
============
# du -h --max-depth=1 /var | sort -h
4,0K /var/local
4,0K /var/mail
4,0K /var/opt
20K /var/spool
44K /var/tmp
884K /var/backups
6,7M /var/log.hdd
11M /var/log
16M /var/moodledata
82M /var/cache
447M /var/lib
2,3G /var/www
2,9G /var
====================
# du -h --max-depth=1 /var/www | sort -h
822M /var/www/nextcloud
1,3G /var/www/html
2,3G /var/www
========================
# du -h --max-depth=1 /var/www/html | sort -h
8,0K /var/www/html/data
8,0K /var/www/html/ocs-provider
12K /var/www/html/ocs
80K /var/www/html/themes
108K /var/www/html/config
364K /var/www/html/LICENSES
788K /var/www/html/resources
1,4M /var/www/html/updater
18M /var/www/html/lib
48M /var/www/html/3rdparty
74M /var/www/html/dist
189M /var/www/html/core
411M /var/www/html/moodle
492M /var/www/html/apps
1,3G /var/www/html
=======================
Karena tadi errornya:
FATAL: Error creating cache path:
mkdir /mnt/seagate/navidrome/cache: input/output error
Dan sekarang Anda bilang /mnt/seagate sudah di-mount, kita lanjut cek apakah bisa ditulis oleh user navidrome.
Jalankan:
ls -lah /mnt/seagate
Kalau muncul folder/fail → mount berhasil.
touch /mnt/seagate/test.txt
Kalau error input/output lagi → HDD / flashdisk bermasalah atau filesystem rusak.
Kalau berhasil → lanjut ke permission.
mkdir -p /mnt/seagate/navidrome/cache
Lalu set permission:
chown -R navidrome:navidrome /mnt/seagate/navidrome
chmod -R 755 /mnt/seagate/navidrome
systemctl restart navidrome
systemctl status navidrome
Kalau berhasil nanti berubah jadi:
Active: active (running)
Buka config:
nano /var/lib/navidrome/navidrome.toml
Biasanya seperti ini:
MusicFolder = "/mnt/seagate/music"
DataFolder = "/mnt/seagate/navidrome"
Address = "0.0.0.0"
Port = 4533
PENTING:
Jangan cache di root mount langsung, lebih aman:
/mnt/seagate/navidrome
bukan
/mnt/seagate/cache
Di HDD:
/mnt/seagate/
├── music/
└── navidrome/
├── cache/
├── data/
└── db/
Buat sekaligus:
mkdir -p /mnt/seagate/music
mkdir -p /mnt/seagate/navidrome/cache
mkdir -p /mnt/seagate/navidrome/data
chown -R navidrome:navidrome /mnt/seagate/navidrome
systemctl restart navidrome
Lalu buka:
http://IP_STB:4533
Kalau masih gagal, kirim:
cat /var/lib/navidrome/navidrome.toml
ls -lah /mnt/seagate
Biar bisa kita cek lebih dalam.
tail -f /var/moodledata/logs/wa_debug.log
2026-03-24 18:11:51 | DIBATALKAN: Hari libur / bukan hari sekolah
2026-03-24 18:12:15 | DIBATALKAN: Hari libur / bukan hari sekolah
2026-03-24 18:12:39 | DIBATALKAN: Hari libur / bukan hari sekolah
2026-03-25 11:24:07 | DIBATALKAN: Hari libur / bukan hari sekolah
2026-03-25 11:24:31 | DIBATALKAN: Hari libur / bukan hari sekolah
2026-03-25 15:28:38 | DIBATALKAN: Hari libur / bukan hari sekolah
2026-03-26 11:31:21 | DIBATALKAN: Hari libur / bukan hari sekolah
2026-03-26 11:31:49 | DIBATALKAN: Hari libur / bukan hari sekolah
2026-03-26 12:02:41 | DIBATALKAN: Hari libur / bukan hari sekolah
2026-03-26 12:03:07 | DIBATALKAN: Hari libur / bukan hari sekolah
^C
Artinya:
➡️ Fungsi jurnalmengajar_boleh_kirim_wa() memblokir pengiriman WA.
Jadi sistem sebenarnya sudah mencoba kirim, tapi dibatalkan oleh aturan hari/libur.
Setiap selesai ngoding:
cd /var/www/html/moodle/local/jurnalmengajar
git status
git add .
git commit -m "jelaskan perubahan"
git push
Itu saja. Sangat cukup.
Plugin Anda sudah besar sekali. Sebaiknya mulai dikelompokkan:
Contoh struktur yang lebih rapi:
local/jurnalmengajar/
│
├── classes/
├── cli/
├── jadwal/
├── surat/
├── rekap/
├── templates/
├── lib.php
├── settings.php
└── version.php
Kalau nanti plugin makin besar, ini akan sangat membantu.
Kalau boleh tahu, sekarang plugin jurnalmengajar ini sudah mencakup:
Jurnal mengajar
Surat izin
Rekap kehadiran
Pramuka
BK
Nilai
Kartu ujian
Jadwal pelajaran
Notifikasi WA
👉 Ini sebenarnya sudah seperti Sistem Informasi Sekolah mini di dalam Moodle 😄
Pertanyaan ini sangat penting Guru Duan 👍 — ini inti dari backup yang benar.
Kalau backup hanya file (bukan full folder), tetap bisa restore, tapi:
👉 Guru harus:
Tahu lokasi aslinya
Extract ke root / (bukan ke folder sembarang)
Karena di dalam .tar.gz tersimpan path lengkap:
Contoh isi backup:
var/www/html/moodle/local/jurnalmengajar/index.php
var/www/html/moodle/local/jurnalmengajar/lib.php
👉 Jadi saat extract ke /, file otomatis masuk ke lokasi yang benar.
Misalnya ke:
/home/backup_jurnal/
/)sudo tar -xzvf /home/backup_jurnal/jurnal_2026-03-18_19_20.tar.gz -C /
👉 Ini akan otomatis ke:
/var/www/html/moodle/local/jurnalmengajar/
JANGAN extract ke:
/var/www/html/moodle/
❌ nanti jadi:
/var/www/html/moodle/var/www/html/moodle/...
tar -tzvf jurnal_2026-03-18_19_20.tar.gz
👉 Pastikan terlihat:
var/www/html/...
Ini yang harus Guru tahu:
File lain di plugin ikut berubah tapi tidak dibackup
Struktur folder tidak lengkap
Ada dependency (form, lang, dll) yang terlewat
cp -r /var/www/html/moodle/local/jurnalmengajar /home/backup_lama
sudo tar -xzvf jurnal_2026-03-18_19_20.tar.gz -C /
Kalau mau lebih rapi:
tar -czvf jurnal.tar.gz -P ...
👉 -P = simpan absolute path /var/...
👉 Lebih konsisten saat restore
✔ Backup file saja → bisa restore
✔ Harus extract ke /
✔ Path otomatis kembali ke tempatnya
❗ Tapi tidak seaman full backup
Untuk plugin Moodle seperti ini:
👉 Ideal:
✔ Backup file perubahan (yang Guru lakukan)
✔ + Backup full plugin (sekali sehari)
Kalau Guru mau, saya bisa bantu:
🔄 Script restore otomatis (1 klik)
🔍 Bandingkan server lama vs baru
⚙️ Setup backup harian tanpa ribet
Tinggal bilang saja 👍
Rabu 18 Maret 2026
find /var/www/html/moodle/local/jurnalmengajar/ -type f -daystart -mtime 0
/var/www/html/moodle/local/jurnalmengajar/index.php
/var/www/html/moodle/local/jurnalmengajar/editadmin.php
/var/www/html/moodle/local/jurnalmengajar/all.php
/var/www/html/moodle/local/jurnalmengajar/lib.php
/var/www/html/moodle/local/jurnalmengajar/delete.php
Kamis 19 Maret 2026
# find /var/www/html/moodle/local/jurnalmengajar/ -type f -daystart -mtime 0
/var/www/html/moodle/local/jurnalmengajar/export_xlsx.php
/var/www/html/moodle/local/jurnalmengajar/cetak_surat_izin.php
/var/www/html/moodle/local/jurnalmengajar/index.php
/var/www/html/moodle/local/jurnalmengajar/wali_kelas.php
/var/www/html/moodle/local/jurnalmengajar/izin_murid.php
/var/www/html/moodle/local/jurnalmengajar/exportguruwali_form.php
/var/www/html/moodle/local/jurnalmengajar/cetak_surat_izin_banyak.php
/var/www/html/moodle/local/jurnalmengajar/lib.php
/var/www/html/moodle/local/jurnalmengajar/exportguruwali_xlsx.php
/var/www/html/moodle/local/jurnalmengajar/settings.php
/var/www/html/moodle/local/jurnalmengajar/export_form.php
/var/www/html/moodle/local/jurnalmengajar/surat_izin_murid_all.php
:~# find /var/www/html/moodle/local/jurnalmengajar/ -type f -daystart -mtime 0
/var/www/html/moodle/local/jurnalmengajar/jurnalguruwali.php
kemaren
:~# find /var/www/html/moodle/local/jurnalmengajar/ -type f -daystart -mtime 1
/var/www/html/moodle/local/jurnalmengajar/delete_layananbk.php
/var/www/html/moodle/local/jurnalmengajar/export_xlsx.php
/var/www/html/moodle/local/jurnalmengajar/cetak_surat_izin.php
/var/www/html/moodle/local/jurnalmengajar/index.php
/var/www/html/moodle/local/jurnalmengajar/delete_pramuka.php
/var/www/html/moodle/local/jurnalmengajar/wali_kelas.php
/var/www/html/moodle/local/jurnalmengajar/izin_murid.php
/var/www/html/moodle/local/jurnalmengajar/riwayat_layananbk.php
/var/www/html/moodle/local/jurnalmengajar/input_surat_izin_guru.php
/var/www/html/moodle/local/jurnalmengajar/exportguruwali_form.php
/var/www/html/moodle/local/jurnalmengajar/cetak_surat_izin_banyak.php
/var/www/html/moodle/local/jurnalmengajar/layananbk.php
/var/www/html/moodle/local/jurnalmengajar/riwayat_pramuka.php
/var/www/html/moodle/local/jurnalmengajar/pembinaan.php
/var/www/html/moodle/local/jurnalmengajar/lib.php
/var/www/html/moodle/local/jurnalmengajar/lang/en/local_jurnalmengajar.php
/var/www/html/moodle/local/jurnalmengajar/lang/id/local_jurnalmengajar.php
/var/www/html/moodle/local/jurnalmengajar/exportguruwali_xlsx.php
/var/www/html/moodle/local/jurnalmengajar/classes/form/layananbk_form.php
/var/www/html/moodle/local/jurnalmengajar/settings.php
/var/www/html/moodle/local/jurnalmengajar/pramuka.php
/var/www/html/moodle/local/jurnalmengajar/export_form.php
/var/www/html/moodle/local/jurnalmengajar/surat_izin_murid_all.php
Guru Duan, untuk mencari file yang di dalamnya terdapat teks “sman 2”, cara paling cepat di Linux (Armbian/Debian) adalah pakai grep.
Langsung jalankan ini:
grep -Ri "sman 2" /var/www/html/moodle/local/jurnalmengajar/
-R = cari rekursif ke semua folder
-i = tidak sensitif huruf besar/kecil (SMAN, sman, Sman tetap kena)
akan tampil: nama file + isi baris yang cocok
grep -Ril "sman 2" /var/www/html/moodle/local/jurnalmengajar/
grep -Rin "sman 2" /var/www/html/moodle/local/jurnalmengajar/
Coba sekalian:
grep -RinE "sman ?2" /var/www/html/moodle/local/jurnalmengajar/
Kadang teks ada di:
file .php
file .mustache (di folder templates)
file .js atau .css
Kalau mau batasi hanya file tertentu:
grep -Rin --include="*.php" "sman 2" /var/www/html/moodle/local/jurnalmengajar/
Kalau nanti sudah ketemu tapi bingung itu dipakai di bagian mana (misalnya muncul di halaman tertentu Moodle), kirim saja hasilnya ke saya—nanti saya bantu telusuri sampai ketahuan asal tampilannya 👍
Siap Guru Duan 👍
Dari hasil itu, Docker hanya dipakai untuk Navidrome saja → aman untuk dihapus kalau memang tidak dipakai lagi.
Saya kasih langkah bersih & aman ya (biar tidak sisa-sisa) 👇
docker stop navidrome
docker rm navidrome
docker rmi deluan/navidrome:latest
systemctl stop docker
systemctl stop containerd
systemctl disable docker
systemctl disable containerd
apt purge docker-ce docker-ce-cli containerd.io -y
apt autoremove -y
Kalau mau benar-benar bersih:
rm -rf /var/lib/docker
rm -rf /var/lib/containerd
systemctl list-units --type=service | grep docker
👉 harusnya sudah tidak ada
Guru akan langsung terasa:
RAM lebih lega 💨
CPU lebih stabil ⚡
tidak ada container “diam-diam makan resource”
Kalau nanti butuh Navidrome lagi:
👉 bisa install tanpa Docker (native) → lebih ringan untuk HG680P
Kalau mau, saya bisa bantu:
✅ install Navidrome tanpa Docker
✅ atau alternatif lebih ringan untuk musik server
👉 Dalam kasus Guru:
✔ Menghapus Docker = keputusan tepat 🔥
✔ Sistem akan lebih cocok untuk STB HG680P
Kalau sudah dihapus, kirim lagi:
top
Saya bantu cek:
👉 apakah PHP masih berat atau sudah normal 👍
Bisa, Guru Duan. MOC (Music On Console) (mocp) memang dibuat dengan model client–server, jadi musik tetap jalan walaupun terminal ditutup.
Ada dua cara yang benar.
Jalankan mocp:
mocp
Setelah musik berjalan, jangan tutup terminal langsung.
Keluar dari interface dengan:
q
Yang terjadi:
Server mocp tetap berjalan
Musik tetap play
Terminal bebas ditutup
Nanti kalau ingin membuka lagi:
mocp
Playlist dan lagu yang sedang diputar akan muncul lagi.
Bisa juga dengan:
mocp -S
Lalu load playlist:
mocp -l playlist.m3u
Kalau ingin stop server:
mocp -x
💡 Tips penting (sering tidak diketahui pengguna baru):
Jika terminal langsung ditutup tanpa menekan q, kadang server mocp ikut mati.
Jadi kebiasaan yang benar:
mocp
→ play lagu
→ tekan q
→ tutup terminal
Kalau Guru Duan mau, saya juga bisa tunjukkan cara membuat mocp otomatis jalan saat login Ubuntu sehingga komputer langsung jadi music server FLAC ringan (<10 MB RAM).
Bisa, Guru Duan 👍
Karena data murid disimpan di alumni.json, kita bisa mengubah nilai tahun dari "-" menjadi 2027 dengan beberapa cara.
Saya jelaskan 3 cara yang paling praktis.
sed di Linux)Jika sebelumnya data seperti ini:
"tahun": "-"
dan ingin diganti menjadi:
"tahun": "2027"
jalankan:
sed -i 's/"tahun": "-"/"tahun": "2027"/g' alumni.json
Semua tanda "-" akan berubah menjadi 2027.
Gunakan Python supaya hanya field tertentu yang diubah.
python3 - << 'EOF'
import json
with open("alumni.json") as f:
data=json.load(f)
for d in data:
if d["tahun"]=="-":
d["tahun"]="2027"
with open("alumni.json","w") as f:
json.dump(data,f,indent=1)
print("Data berhasil diupdate")
EOF
Ini akan:
cari tahun "-"
ubah menjadi 2027
Jika sumber data dari LibreOffice Calc:
ubah kolom tahun menjadi 2027
export lagi CSV
convert ke JSON
gabungkan dengan alumni.json
Upload ke GitHub:
git add alumni.json
git commit -m "update tahun alumni 2027"
git push
Website di Vercel akan update otomatis.
💡 Saran untuk database Guru Duan
Daripada pakai "-" lebih baik pakai:
"tahun": null
atau
"tahun": ""
karena lebih mudah difilter di JavaScript.
Kalau Guru Duan mau, saya bisa juga membuat fitur baru di web:
✔ murid yang belum ada tahun alumni otomatis muncul di menu "Belum Lulus"
✔ ketika lulus tinggal update tahun sekali saja.
Bagus sekali Guru Duan 👍
Jika dengan membuka:
https://data-murid.vercel.app/script.js
lalu refresh data langsung muncul, berarti penyebabnya benar: browser menyimpan cache script.js lama.
Ini normal pada website statis yang di-host di Vercel.
Ubah di index.html.
Cari:
<script src="script.js"></script>
Ubah menjadi:
<script src="script.js?v=1"></script>
Tinggal ganti angka:
<script src="script.js?v=2"></script>
atau
<script src="script.js?v=3"></script>
Browser akan menganggap itu file baru, sehingga tidak memakai cache lama.
Setelah edit:
git add index.html
git commit -m "fix cache script"
git push
Website akan deploy ulang.
Pengunjung website tidak perlu:
Ctrl + F5
clear cache
karena browser otomatis memuat script terbaru.
💡 Saran kecil untuk web Guru Duan
Sekarang web sudah cukup bagus. Tahap berikutnya yang sangat berguna adalah:
🔎 autocomplete pencarian nama seperti Google
🏫 filter sekolah
📊 jumlah murid per sekolah
📅 lihat semua murid per tahun ajaran
Itu akan membuat web ini menjadi database riwayat mengajar Guru Duan yang sangat rapi.
Guru Duan, untuk mengakses Moodle di http://localhost, ada 3 service utama yang harus hidup.
Menampilkan halaman web Moodle.
Service:
nginx.service
Start:
sudo systemctl start nginx
Menjalankan kode PHP Moodle.
Service:
php8.2-fpm.service
Start:
sudo systemctl start php8.2-fpm
Menyimpan data Moodle.
Service:
mariadb.service
Start:
sudo systemctl start mariadb
Supaya cepat:
sudo systemctl start nginx php8.2-fpm mariadb
Setelah itu buka browser:
http://localhost/moodle
atau jika di root:
http://localhost
Ini tidak mempengaruhi Moodle:
pihole-FTL
cloudflared
docker
redis (kecuali dipakai cache)
openvpn
systemctl status nginx php8.2-fpm mariadb
Harus muncul:
Active: active (running)
Guru Duan bisa buat alias:
Tambahkan di ~/.bashrc
alias moodleon="sudo systemctl start nginx php8.2-fpm mariadb"
alias moodleoff="sudo systemctl stop nginx php8.2-fpm mariadb"
Lalu reload:
source ~/.bashrc
Sekarang cukup ketik:
moodleon
Jika Guru Duan mau, saya juga bisa tunjukkan cara mengetahui dalam 3 detik apakah Moodle tidak bisa diakses karena nginx, php, atau database. Ini trik yang sangat membantu saat debugging server.
root@debian:~# cat /opt/homepage/services.yaml
- Server Sekolah:
- Website Sekolah:
href: https://sman2kandangan.sch.id
icon: mdi-school
siteMonitor: https://sman2kandangan.sch.id
- Sistem SiM:
href: https://sim.sman2kandangan.sch.id
icon: mdi-monitor-dashboard
siteMonitor: https://sim.sman2kandangan.sch.id
- CBT Smandaka:
href: https://cbt.sman2kandangan.sch.id
icon: mdi-clipboard-check
siteMonitor: https://cbt.sman2kandangan.sch.id
- Cloud:
- Nextcloud:
href: https://cloud.sman2kandangan.sch.id
icon: nextcloud.png
container: nextcloud_app
- OnlyOffice:
href: https://office.sman2kandangan.sch.id
icon: onlyoffice.png
container: onlyoffice
- Media:
- Immich Photos:
href: https://photos.sman2kandangan.sch.id
icon: immich.png
container: immich_server
- Jellyfin Media:
href: https://jelly.sman2kandangan.sch.id
icon: jellyfin.png
container: jellyfin
- Monitoring:
- Docker Portainer:
href: https://docker.sman2kandangan.sch.id
icon: portainer.png
- Uptime Kuma:
href: https://uptime.sman2kandangan.sch.id
icon: uptime-kuma.png
- Netdata:
href: http://100.70.179.70:19999
icon: netdata.png
- Network:
- Pi-hole DNS:
href: http://100.70.179.70:8090/admin
icon: pi-hole.png
- Modem Indihome:
icon: router
href: http://192.168.200.1/index.asp
===========================================
Simpan lalu restart Homepage
docker restart homepage
Benar Guru Duan 👍
Konsep remote admin gateway sekolah itu memang dibuat dengan perintah:
sudo tailscale up --advertise-routes=192.168.200.0/24
Saya jelaskan pelan-pelan supaya jelas cara kerjanya.
Di sekolah:
Internet
│
Modem Indihome (192.168.200.1)
│
Server Debian (192.168.200.x)
│
Perangkat lain:
├ printer
├ access point
├ CCTV
└ komputer lain
Server Debian juga sudah terhubung ke Tailscale.
Di rumah:
Laptop Guru Duan
│
Internet
│
Tailscale
Tanpa konfigurasi tambahan:
Laptop rumah hanya bisa akses:
100.x.x.x (IP Tailscale server)
contoh:
http://100.70.179.70:3000
tetapi tidak bisa akses jaringan sekolah seperti:
192.168.200.1
192.168.200.10
192.168.200.20
karena itu LAN lokal.
Perintah ini:
sudo tailscale up --advertise-routes=192.168.200.0/24
memberitahu jaringan Tailscale:
Server Debian ini bisa menjadi router menuju jaringan sekolah 192.168.200.x
Setelah aktif, alur jaringan menjadi:
Laptop rumah
│
│ Tailscale
▼
Server Debian sekolah
│
│ LAN sekolah
▼
192.168.200.x
Dari rumah bisa langsung membuka:
http://192.168.200.1
http://192.168.200.20
http://192.168.200.2
http://192.168.200.50
ssh 192.168.200.10
Tanpa:
❌ port forwarding
❌ VPN tambahan
❌ membuka firewall sekolah
Semua lewat Tailscale encrypted tunnel.
Port forwarding:
Internet → modem → server
rentan scan hacker.
Tailscale:
Laptop → encrypted tunnel → server
hanya device Tailscale yang bisa akses.
Guru Duan bisa mengelola:
modem Indihome
server Moodle
Docker
printer jaringan
AP wifi
CCTV
seolah-olah sedang berada di sekolah.
Ini tidak mengganggu:
Docker
Nextcloud
Moodle
Homepage dashboard
Jellyfin
Immich
IP Tailscale tetap:
100.70.179.70
Contoh printer sekolah:
192.168.200.25
dari rumah bisa langsung:
ping 192.168.200.25
atau add printer IP.
Di server Debian:
net.ipv4.ip_forward=1
sudo tailscale up --advertise-routes=192.168.200.0/24
https://login.tailscale.com/admin/routes
Cara ini dipakai banyak admin IT untuk membuat:
"private network kantor / sekolah dari rumah"
tanpa perlu:
Mikrotik VPN
OpenVPN
Wireguard manual
karena Tailscale otomatis mengurus semuanya.
💡 Melihat server Guru Duan yang sudah ada:
Docker
Nextcloud
Jellyfin
Immich
Uptime Kuma
Netdata
sebenarnya tinggal satu langkah lagi bisa menjadi:
Remote Control Center sekolah dari rumah.
Kalau Guru Duan mau, saya bisa tunjukkan setup yang lebih keren lagi:
⭐ akses semua device sekolah pakai nama, bukan IP
contoh:
http://modem-sekolah
http://printer-guru
http://cctv-lobby
Ini biasanya dipakai admin jaringan profesional.
Guru Duan, karena foldernya ada di laptop Ubuntu dan ingin dikirim ke server Debian lewat SSH, cara paling tepat adalah menggunakan rsync via SSH.
Ini metode yang paling sering dipakai admin karena cepat dan bisa lanjut jika putus.
Karena sumber file ada di laptop, perintah dijalankan di terminal laptop Ubuntu.
Misalnya IP server Debian:
192.168.1.10
Perintahnya:
rsync -avh --progress "/media/dhwan/DATA1/Al-Qur_an Al-Karim - Sheikh Mishary Rashid Alafasy" root@192.168.1.10:/srv/nextcloud/data/admin/files/
Penjelasan:
| bagian | arti |
|---|---|
| rsync | tool copy cepat |
| -a | menjaga struktur file |
| -v | tampilkan detail |
| -h | ukuran mudah dibaca |
| --progress | tampil progress |
| root@192.168.1.10 | login SSH server |
| tujuan | folder Nextcloud |
Misalnya user server duan:
rsync -avh --progress "/media/dhwan/DATA1/Al-Qur_an Al-Karim - Sheikh Mishary Rashid Alafasy" duan@192.168.1.10:/srv/nextcloud/data/admin/files/
Login ke server Debian lalu jalankan:
docker exec -u www-data nextcloud_app php occ files:scan admin
Agar file muncul di Nextcloud.
Gunakan port SSH eksplisit:
rsync -avh --progress -e ssh "/media/dhwan/DATA1/Al-Qur_an Al-Karim - Sheikh Mishary Rashid Alafasy" root@192.168.1.10:/srv/nextcloud/data/admin/files/
Folder akan muncul:
Al-Qur_an Al-Karim - Sheikh Mishary Rashid Alafasy
di akun admin.
💡Copy semua folder ini
/media/dhwan/DATA1$ ls
'Al-Quran Al-Karim - MAHER AL-MUAIQLY'
'Al-Quran Al-Karim - Muzammil Hasballah'
'Al-Quran Al-Karim - Shaykh Abdul Basit'
'Al-Quran Al-Karim - Shaykh Abdulrahman Al-Sudais'
'Muzammil Hasballah-20211004T012609Z-001'
'Al-Quran Al-Karim - Shaykh Al-Husary'
'Al-Quran Al-Karim - Shaykh Sa_ad Al-Ghamdi'
'Al-Quran Al-Karim - Sherif Mustofa'
upload semua dalam DATA1
rsync -avh --progress --partial --append-verify -e ssh /media/dhwan/DATA1/ root@192.168.200.20:/srv/nextcloud/data/admin/files/Quran/
Karena semua folder Qur'an memiliki nama "Al-Quran...", kita bisa kirim hanya folder tersebut.
rsync -avh --progress --partial --append-verify -e ssh /media/dhwan/DATA1/Al-Quran* root@192.168.200.20:/srv/nextcloud/data/admin/files/Quran/
Guru Duan, dari tangkapan layar itu terlihat perintah rsync berjalan dengan benar 👍
Beberapa hal yang bisa kita lihat:
Transfer sedang mengirim file .flac
Kecepatan sekitar 18–29 MB/s
Sudah sampai file Disc 16
Total file sekitar 1549 file
Contoh baris:
Disc 16/09 Assaff Chapter 61.flac
4.69M 18% 4.47MB/s
artinya file tersebut sedang dikirim.
Perintah Guru:
rsync -avh --progress --partial --append-verify -e ssh /media/dhwan/DATA1/Al-Quran* root@192.168.200.20:/srv/nextcloud/data/admin/files/Quran/
melakukan:
memilih semua folder yang diawali Al-Quran
mengirim ke server
menampilkan progress
bisa resume jika putus
Jadi prosesnya sudah benar.
Tinggal jalankan lagi perintah yang sama:
rsync -avh --progress --partial --append-verify -e ssh /media/dhwan/DATA1/Al-Quran* root@192.168.200.20:/srv/nextcloud/data/admin/files/Quran/
rsync akan:
melewati file yang sudah selesai
melanjutkan file yang belum selesai
Masuk ke server Debian lalu jalankan:
docker exec -u www-data nextcloud_app php occ files:scan admin
Ini supaya Nextcloud mendeteksi file baru.
Nanti akan muncul:
Files
└── Quran
├── Al-Quran Al-Karim - MAHER AL-MUAIQLY
├── Al-Quran Al-Karim - Muzammil Hasballah
├── Al-Quran Al-Karim - Shaykh Abdul Basit
├── Al-Quran Al-Karim - Shaykh Abdulrahman Al-Sudais
├── Al-Quran Al-Karim - Shaykh Al-Husary
├── Al-Quran Al-Karim - Shaykh Sa_ad Al-Ghamdi
└── Al-Quran Al-Karim - Sherif Mustofa
💡 Sedikit kabar baik untuk Guru Duan:
Kecepatan 20–30 MB/s berarti jaringan LAN gigabit berjalan optimal, jadi seluruh koleksi Qur'an kemungkinan selesai dalam beberapa menit saja walaupun ukuran besar.
Baik Guru Duan 👍
Saya jelaskan dua service itu secara jelas dan aman.
kerneloops.serviceMengumpulkan laporan jika terjadi kernel crash
Mengirim laporan error ke sistem Ubuntu (untuk statistik bug)
Tidak berpengaruh ke performa harian
❌ Tidak akan ada laporan otomatis kalau kernel error
✅ Sistem tetap normal
✅ Tidak mengganggu WiFi, web server, atau aplikasi
👉 Aman dimatikan 100%
sudo systemctl stop kerneloops
sudo systemctl disable kerneloops
smartmontools.serviceMonitoring kesehatan HDD/SSD (SMART status)
Bisa mendeteksi:
Bad sector
SSD mulai rusak
Disk hampir mati
Biasanya berjalan di background dengan ringan.
❌ Tidak ada monitoring otomatis kesehatan disk
❌ Tidak ada peringatan dini kalau disk rusak
✅ Laptop tetap normal
✅ Tidak pengaruh ke performa signifikan
Kalau laptop:
SSD masih baru
Tidak dipakai server 24 jam
Tidak butuh monitoring disk serius
👉 Boleh dimatikan.
Tapi…
Kalau laptop dipakai:
Server testing
Backup penting
Database Moodle
Immich (foto penting)
👉 Sebaiknya biarkan aktif.
Karena service ini ringan sekali (hanya beberapa MB RAM).
Karena laptop ini:
Jalankan MariaDB
Jalankan web server
Kadang jadi lab
Saya sarankan:
✔ Matikan kerneloops
✔ Biarkan smartmontools
Itu kombinasi paling aman dan tetap sehat.
Kalau Guru Duan mau, saya bisa cek apakah SSD laptop sehat atau sudah ada warning SMART.
Kirim saja:
sudo smartctl -a /dev/sda
(atau /dev/nvme0n1 kalau pakai NVMe)
Nanti saya bantu baca hasilnya 👍
Bisa, Guru Duan 👍
TAPI tergantung tujuan laptopnya.
Karena laptop Guru Duan menjalankan:
Moodle
WordPress
Pi-hole
maka:
nginx → web server
php8.2-fpm → eksekusi PHP
Kalau dua ini dimatikan:
❌ Moodle tidak bisa dibuka
❌ WordPress tidak bisa dibuka
❌ Local web project tidak jalan
✅ Kalau laptop hanya dipakai browsing / kerja biasa
✅ Tidak sedang testing Moodle
✅ Tidak butuh WordPress lokal
✅ Tidak expose tunnel cloudflared
Kalau itu kondisi Guru Duan → boleh dimatikan.
Coba stop dulu, bukan disable:
sudo systemctl stop nginx
sudo systemctl stop php8.2-fpm
Lalu cek:
systemctl status nginx
systemctl status php8.2-fpm
Kalau mau aktifkan lagi:
sudo systemctl start nginx
sudo systemctl start php8.2-fpm
sudo systemctl disable nginx
sudo systemctl disable php8.2-fpm
Aktifkan lagi:
sudo systemctl enable nginx
sudo systemctl enable php8.2-fpm
Karena Guru Duan sering:
Testing Moodle
Cek plugin
Setup jaringan
Uji Pi-hole
Lebih baik jangan disable permanen.
Lebih baik:
Stop saja kalau tidak dipakai
Atau pakai alias cepat
Contoh buat alias di ~/.bashrc:
alias webon="sudo systemctl start nginx php8.2-fpm"
alias weboff="sudo systemctl stop nginx php8.2-fpm"
Jadi tinggal ketik:
weboff
webon
Lebih praktis 😄
Kalau boleh tahu Guru Duan, tujuan mematikan nginx & php ini untuk hemat RAM atau ada masalah tertentu?
apt update
apt install isc-dhcp-server -y
🔧 LANGKAH 1 — Pastikan enp1s0 Static
nano /etc/network/interfacesnano /etc/network/interfaces
tambahkan:
auto enp1s0
iface enp1s0 inet static
address 192.168.50.1
netmask 255.255.255.0
Restart:
systemctl restart networking
cek: ip a
🔧 LANGKAH 2 — DHCP untuk Klien
nano /etc/default/isc-dhcp-server
isi:
INTERFACESv4="enp1s0"
edit pool:
nano /etc/dhcp/dhcpd.conf
isi:
subnet 192.168.50.0 netmask 255.255.255.0 {
range 192.168.50.100 192.168.50.200;
option routers 192.168.50.1;
option broadcast-address 192.168.50.255;
option domain-name-servers 192.168.50.1;
}
Restart DHCP:
systemctl restart isc-dhcp-server
systemctl enable isc-dhcp-server
🔧 LANGKAH 3 — Install DNS Lokal (dnsmasq)
install: apt install dnsmasq -y
Backup config lama:
mv /etc/dnsmasq.conf /etc/dnsmasq.conf.bak
buat config baru:
nano /etc/dnsmasq.conf
isi:
interface=enp1s0
listen-address=192.168.50.1
domain-needed
bogus-priv
expand-hosts
domain=local
address=/cbt.local/192.168.50.1
Restart:
systemctl restart dnsmasq
systemctl enable dnsmasq
🔒 LANGKAH 4 — Pastikan Klien Tidak Bisa Internet
Pastikan IP forward OFF:
nano /etc/sysctl.conf
Pastikan ini dikomentari:
#net.ipv4.ip_forward=1
Apply:
sysctl -p
Tambahkan firewall blok total:
iptables -A FORWARD -i enp1s0 -o eno1 -j DROP
Simpan:
apt install iptables-persistent -y
netfilter-persistent save
Di klien:
ipconfig
Harus dapat:
IP: 192.168.50.xxx
Gateway: 192.168.50.1
DNS: 192.168.50.1
Buka browser:
http://cbt.local
Harus masuk CBT.
Coba buka google.com → tidak bisa.
Siap Guru Duan 👍
Kita ganti dari cbt.local menjadi:
cbt.smandaka
Karena ini domain lokal (tanpa TLD .com/.sch.id), kita atur lewat DNS lokal (dnsmasq).
Buka config:
nano /etc/dnsmasq.conf
Ubah menjadi:
interface=enp1s0
listen-address=192.168.50.1
domain-needed
bogus-priv
address=/cbt.smandaka/192.168.50.1
Simpan.
Restart:
systemctl restart dnsmasq
Cek:
nano /etc/dhcp/dhcpd.conf
Pastikan ada:
option domain-name-servers 192.168.50.1;
Restart DHCP:
systemctl restart isc-dhcp-server
Di klien:
ipconfig /release
ipconfig /renew
Lalu buka browser:
http://cbt.smandaka
Harus masuk ke server CBT (192.168.50.1).
✔ Tidak pakai .local (kadang bentrok mDNS)
✔ Lebih rapi untuk sekolah
✔ Bisa dikembangkan ke SSL internal nanti
Kalau mau lebih resmi, bisa pakai:
cbt.sman2kandangan.sch.id
Tapi itu perlu DNS publik atau internal DNS server lebih lengkap.
Sekarang Guru coba akses dari klien.
Kalau tidak resolve, kirim hasil:
nslookup cbt.smandaka
Nanti saya bantu cek sampai jalan 👍
Pertanyaan paling realistis dan penting, Guru Duan 😄👍
Memang di lab sering bingung: “enp1s0 itu lubang yang mana?”
Tenang, ada cara pasti untuk mengenalinya.
Besok di sekolah, jalankan ini di server:
ethtool -p enp1s0 10
Artinya:
Port enp1s0 akan berkedip LED-nya selama 10 detik.
Tinggal lihat di belakang server:
👉 Lubang LAN yang lampunya kedip itu = enp1s0
Kalau belum ada ethtool, install dulu:
apt install ethtool -y
Ini cara paling profesional 👍
Colok kabel ke satu port saja, lalu jalankan:
ip a
Kalau berubah dari:
NO-CARRIER
menjadi:
LOWER_UP
Berarti itu port yang benar.
Contoh:
Sebelum colok:
enp1s0: NO-CARRIER
Setelah colok:
enp1s0: LOWER_UP
Berarti itu lubangnya.
Tadi dari output Guru:
enp1s0 → f4:28:53:1d:ab:56
eno1 → a4:bb:6d:56:36:c9
Kalau di belakang casing ada label MAC address,
bisa cocokkan.
Setelah yakin enp1s0 itu port klien, tempel stiker:
CBT LAN
Dan eno1 diberi label:
INTERNET
Selesai, tidak bingung lagi 😄
Cara paling mudah dan cepat:
ethtool -p enp1s0 10
Lihat port yang kedip.
Itu dia.
Besok di lab tinggal:
Kedipkan port
Colok ke switch mini
Restart DHCP
Siap ujian 🚀
Kalau mau, saya bisa buatkan checklist 5 menit sebelum ujian supaya tidak panik 👍
DHCP modem off,
Ip modem berubah, saya tidak tahu ip nya berapa
colok modem ke ubuntu, di terminal ketikkan arp -a
*Membuat Soal untuk Asesmen Sumatif Akhir Jenjang Kelas XII*
_Buat soal ASAJ Kelas 12 di dalam Question Bank masing-masing._ Bagi yang belum tahu caranya:
dhwan@dhwan-Aspire-A514-51K:~$ curl -sSL https://install.pi-hole.net | bash
[i] Root user check
[i] Script called with non-root privileges
The Pi-hole requires elevated privileges to install and run
Please check the installer for any concerns regarding this requirement
Make sure to download this script from a trusted source
[✓] Sudo utility check
[✓] Root user check
.;;,.
.ccccc:,.
:cccclll:. ..,,
:ccccclll. ;ooodc
'ccll:;ll .oooodc
.;cll.;;looo:.
.. ','.
.',,,,,,'.
.',,,,,,,,,,.
.',,,,,,,,,,,,....
....''',,,,,,,'.......
......... .... .........
.......... ..........
.......... ..........
......... .... .........
........,,,,,,,'......
....',,,,,,,,,,,,.
.',,,,,,,,,'.
.',,,,,,'.
..'''.
[i] SELinux not detected
[✓] Update local cache of available packages
[✓] Checking apt-get for upgraded packages... 16 updates available
[i] It is recommended to update your OS after installing the Pi-hole!
[✓] Building dependency package pihole-meta.deb
[✓] Installing Pi-hole dependency package
[i] Using interface: enp2s0
[i] IPv4 address: 192.168.8.10/24
[i] Unable to find IPv6 ULA/GUA address
[i] IPv6 address:
[i] Using upstream DNS: Cloudflare (DNSSEC) (1.1.1.1, 1.0.0.1)
[i] Installing StevenBlack's Unified Hosts List
[i] Query Logging on.
[i] Using privacy level: 0
[✗] Check for existing repository in /etc/.pihole
[i] Clone https://github.com/pi-hole/pi-hole.git into /etc/.pihole...HEAD is now at a393dd8 v6.4 (#6536)
[✓] Clone https://github.com/pi-hole/pi-hole.git into /etc/.pihole
[✗] Check for existing repository in /var/www/html/admin
[i] Clone https://github.com/pi-hole/web.git into /var/www/html/admin...HEAD is now at 09e4e0e v6.4.1 (#3717)
[✓] Clone https://github.com/pi-hole/web.git into /var/www/html/admin
[✗] Checking for group 'pihole'
[✓] Creating group 'pihole'
[✓] Creating user 'pihole'
[i] FTL Checks...
[✓] Detected x86_64 architecture
[✓] Downloading and Installing FTL
[✓] Installing scripts from /etc/.pihole
[i] Installing configs from /etc/.pihole...
[✓] Installing latest Cron script
[✓] Installing latest logrotate script
[✓] man pages installed and database updated
[i] Testing if systemd-resolved is enabled
[✓] Disabling systemd-resolved DNSStubListener
[i] Restarting services...
[✓] Enabling pihole-FTL service to start on reboot...
[✓] Restarting pihole-FTL service...
[✗] DNS resolution is currently unavailable
[✓] DNS resolution is available
[✗] Migrating the list's cache directory to new location
[i] Creating new gravity database
[i] Migrating content of /etc/pihole/adlists.list into new database
[✓] Deleting existing list cache
[i] Neutrino emissions detected...
[✓] Preparing new gravity database
[✓] Creating new gravity databases
[✓] Pulling blocklist source list into range
[i] Using libz compression
[i] Target: https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts
[✓] Status: Retrieval successful
[✓] Parsed 78788 exact domains and 0 ABP-style domains (blocking, ignored 1 non-domain entries)
Sample of non-domain entries:
- fe80::1%lo0
[✓] Building tree
[i] Number of gravity domains: 78788 (78788 unique domains)
[i] Number of exact denied domains: 0
[i] Number of regex denied filters: 0
[i] Number of exact allowed domains: 0
[i] Number of regex allowed filters: 0
[✓] Optimizing database
[✓] Swapping databases
[✓] The old database remains available
[✓] Cleaning up stray matter
[✓] Done.
jq: parse error: Invalid numeric literal at line 1, column 10
[i] You may now configure your devices to use the Pi-hole as their DNS server
[i] Pi-hole DNS (IPv4): 192.168.8.10
[i] If you have not done so already, the above IP should be set to static.
[i] View the web interface at http://pi.hole:80/admin or http://192.168.8.10:80/admin
[i] Web Interface password: AjZgkH40
[i] This can be changed using 'pihole setpassword'
[i] To allow your user to use all CLI functions without authentication, refer to
our documentation at: https://docs.pi-hole.net/main/post-install/
[i] The install log is located at: /etc/pihole/install.log
[✓] Installation complete!
Baik Guru Duan, ini sudah jelas penyebab utamanya 👍
Masalahnya ada di sini:
Allow 192.168.100.0/24
Padahal sekarang jaringan Anda:
192.168.200.xxx
Jadi CUPS hanya mengizinkan jaringan lama (100) → jaringan baru (200) otomatis Forbidden.
Kita ganti semua 192.168.100.0/24 → 192.168.200.0/24
sudo nano /etc/cups/cupsd.conf
<Location />Ubah dari:
Allow 192.168.100.0/24
Menjadi:
Allow 192.168.200.0/24
<Location /admin>Ubah juga:
Allow 192.168.200.0/24
<Location /admin/log>Ubah juga:
Allow 192.168.200.0/24
Kalau mau supaya tidak perlu ubah tiap ganti subnet, boleh ganti semua itu jadi:
Allow @LOCAL
Contoh:
<Location />
Order allow,deny
Allow localhost
Allow 127.0.0.1
Allow @LOCAL
</Location>
Ini otomatis izinkan semua LAN.
👉 Saya sarankan cara ini untuk server sekolah 👍
Wajib setelah edit:
sudo systemctl restart cups
Buka dari HP / PC:
http://192.168.200.20:631
Sekarang harusnya sudah masuk.
Karena printer USB di server, client print lewat server.
Pastikan ada baris ini (sudah ada, bagus):
Browsing On
BrowseLocalProtocols dnssd
Kalau belum muncul di client, restart juga Avahi:
sudo systemctl restart avahi-daemon
❌ Bukan printer rusak
❌ Bukan CUPS rusak
❌ Bukan server rusak
✅ Hanya subnet berubah → akses diblok
✅ Tinggal ganti Allow → normal lagi
Kalau setelah ini masih belum bisa print dari client, kirim:
lpstat -r
lpstat -a
Nanti kita cek sharing-nya juga.
**************
===============
Baik Guru Duan, berikut cara menambahkan field di profil user Moodle:
Target field:
profile_field_nis → NIS
nip → NIP
nowa → No WhatsApp
Disarankan pakai cara ini 👍
Login → Site administration
Masuk ke:
Site administration
→ Users
→ Accounts
→ User profile fields
Klik Create a new profile category
Misal:
Data Sekolah
Klik Create a new profile field → Short text
Lakukan 3 kali:
| Setting | Isi |
|---|---|
| Name | NIS |
| Short name | nis |
| Required | Yes (opsional) |
| Visible | Visible to user |
| Locked | No |
👉 Klik Save changes
| Setting | Isi |
|---|---|
| Name | NIP |
| Short name | nip |
| Setting | Isi |
|---|---|
| Name | No WhatsApp |
| Short name | nowa |
Setelah selesai, di halaman profil user akan muncul:
NIS
NIP
No WhatsApp
Dan di database otomatis jadi:
profile_field_nis
profile_field_nip
profile_field_nowa
Kalau mau pastikan sudah masuk:
mysql -u root -p moodle
SELECT shortname, name
FROM mdl_user_info_field;
Harus muncul:
nis
nip
nowa
Jangan edit langsung database kalau belum perlu
→ Pakai admin panel lebih aman.
Field ini bisa dipakai di:
Plugin
Jurnal Mengajar
Export
Integrasi WA
Rekap siswa/guru
Kalau Guru Duan mau, nanti saya bantu juga:
✅ Supaya:
User tidak bisa mengubah sendiri NIS/NIP
Hanya admin yang bisa edit
Atau otomatis isi dari CSV/Excel
Tinggal bilang mau arahkan ke mana 👍
sudo tar -czf ~/backup_laptop/moodle-code-$(date +%F).tar.gz /var/www/html/moodle
sudo tar -czf ~/backup_laptop/moodledata-$(date +%F).tar.gz /var/moodledata
Cek dulu nama database:
sudo grep dbname /var/www/html/moodle/config.php
Biasanya namanya moodle.
Lalu backup:
sudo mysqldump -u root -p moodle > ~/backup_laptop/db-$(date +%F).sql
Masukkan password MariaDB.
ls -lh ~/backup_laptopls -lh ~/backup_laptop | grep "$(date +%F)" Harusnya muncul 3 file:
moodle-code-2026-02-21.tar.gz
moodledata-2026-02-21.tar.gz
db-2026-02-21.sql
Kalau sudah ada → Moodle Guru Duan sudah aman 💾
Kalau mau sekalian dalam satu folder:
sudo tar -czf ~/backup_laptop/backup-moodle-lengkap-$(date +%F).tar.gz \
/var/www/html/moodle \
/var/moodledata
Database tetap perlu dump terpisah.
Untuk membuat role baru "Guru Jurnal" dan memberikan capability local/jurnalmengajar:submit di Moodle 4.5, ikuti langkah-langkah berikut:
Login sebagai admin di Moodle.
Buka menu:
Site administration > Users > Permissions > Define roles
Klik tombol "Add a new role".
Pada bagian "Use role or archetype", pilih:
⚪ No role
(Atau pilih "Teacher" jika ingin mewarisi dari role guru)
Klik Continue.
Isi detail berikut:
Short name: gurujurnal
Custom full name: Guru Jurnal
Description: (Opsional, misalnya: Role untuk guru yang dapat mengisi jurnal mengajar)
Context types where this role may be assigned:
Centang sesuai kebutuhan, misalnya:
System
Course
Category
Klik Next.
local/jurnalmengajar:submitPada kolom pencarian capability, ketik:
local/jurnalmengajar:submit
Saat ditemukan, beri nilai:
✅ Allow
Klik Save changes di bagian bawah.
Masuk ke Site administration > Users > Permissions > Assign system roles
Klik pada role Guru Jurnal
Pilih user yang ingin diberi role ini, lalu klik Add
Selesai!
Sekarang hanya user dengan role Guru Jurnal yang memiliki kemampuan local/jurnalmengajar:submit untuk mengakses atau mengisi jurnal di plugin local_jurnalmengajar.
Jika kamu ingin membatasi akses halaman index.php hanya untuk user dengan role ini, saya bisa bantu juga menambahkan logika tersebut di file plugin.
Itu adalah notifikasi Guest Access di Moodle. Untuk menghilangkannya, silakan lakukan salah satu cara berikut:
Login sebagai Admin Moodle
Masuk ke:
👉 Site administration → Plugins → Authentication → Manage authentication
Cari Guest login button
Klik ikon 👁️ (Disable) sampai mati
Simpan
📌 Setelah ini, tombol “Access as a guest” tidak akan muncul lagi.
Kalau hanya ingin hilang di mata pelajaran tertentu:
Masuk ke Course
Klik Settings
Cari Guest access
Set ke: No
Save
Supaya semua pengunjung wajib login:
Site administration → Security → Site policies
Aktifkan:
✔️ Force users to login
Save
📌 Ini akan membuat semua halaman Moodle wajib login.
Untuk CBT & Moodle sekolah (seperti yang Guru Duan pakai):
👉 Paling aman: pakai Cara 1 + Cara 3
Supaya:
Tidak ada tamu masuk
Tidak ada siswa iseng lihat-lihat
Sistem lebih aman
Kalau mau, sebutkan:
Mau dihilangkan di semua course atau hanya sebagian saja?
Nanti saya pandu lebih tepat sesuai kebutuhan Guru Duan 👍
http://localhost/admin/roles/define.php
Baik, Guru Duan!
Saya jelaskan langkah paling aman dan bersih untuk mengganti favicon Moodle menggunakan desain yang Guru buat di PixelLab.
Di PixelLab:
Buat kanvas 1:1 (square), misalnya 512×512 px atau 1024×1024 px
Setelah selesai desain → Export sebagai PNG (transparan atau tidak)
Transfer PNG itu ke laptop (via WhatsApp, Telegram, kabel, dsb.)
Setelah PNG ada di laptop, kita lanjut.
Ada dua cara:
Install ImageMagick:
sudo apt install imagemagick
Konversi PNG menjadi ICO multi-size:
convert icon.png -define icon:auto-resize=64,48,32,16 favicon.ico
Atau, jika PNG besar:
convert icon.png -resize 256x256 favicon.ico
Hasilnya: favicon.ico.
Bisa pakai:
favicon.io
convertico.com
iconifier.net
Upload PNG → download favicon.ico
Jika favicon Moodle Anda berada di:
/var/www/html/moodle/favicon.ico
Maka cukup upload menggantikan file itu:
scp favicon.ico admincbt@IP_SERVER:/var/www/html/moodle/
Jika permission error → beri izin dulu:
sudo chmod 644 /var/www/html/moodle/favicon.ico
Lalu SCP lagi.
Sangat penting karena favicon di-cache kuat oleh Moodle.
sudo -u www-data php /var/www/html/moodle/admin/cli/purge_caches.php
Atau dari web:
Site administration → Development → Purge all caches
Chrome/Firefox menyimpan favicon di cache lama.
Tekan:
atau
Baru favicon akan berubah.
perhatikan lokasi
===================
$ sudo cp ~/cbt/ico/favicon.ico /var/www/html/moodle/favicon.ico
sudo chmod 644 /var/www/html/moodle/favicon.ico
==========
Siap Guru Duan 👍
Karena di Within HEAD sudah ada <style>...</style>, kita tinggal tambahkan baris favicon di luar tag <style>, jangan dimasukkan ke dalam style.
Jadi gabungnya seperti ini:
<link rel="icon" href="/favicon.ico?v=2">
<style>
.footer-section .helplink, .footer-section .helplinkbox {
display: none !important;
}
</style>
⚠ Penting:
<link rel="icon"> tidak boleh di dalam <style>
Letakkan di atas atau bawah <style> bebas
Pastikan tidak ada tag <head> karena Moodle sudah otomatis di dalam <head>
Purge cache Moodle:
sudo -u www-data php /var/www/html/moodle/admin/cli/purge_caches.php
Hard refresh browser:
Ctrl + Shift + R
Kalau masih belum berubah, saya bisa cek apakah Moodle tema Boost masih menyuntik favicon sendiri dan kita override secara lebih kuat.
Pertanyaan bagus sekali, Guru Duan 👍
Sebenarnya tidak wajib ubah jadi ?v=3.
Itu hanya trik untuk mengatasi cache browser.
?v=3?Browser menyimpan favicon sangat lama.
Kalau URL-nya tetap:
<link rel="icon" href="/favicon.ico">
Browser berpikir:
“Ini file yang sama seperti kemarin, tidak perlu download ulang.”
Padahal isi file sudah berubah.
?v=3<link rel="icon" href="/favicon.ico?v=3">
Browser menganggap itu URL berbeda, sehingga:
✔ Dipaksa download ulang
✔ Cache lama dilewati
✔ Favicon langsung berubah
/favicon.ico → dianggap file lama
/favicon.ico?v=2 → dianggap file baru
/favicon.ico?v=3 → dianggap file baru lagi
Isinya sama-sama mengambil file yang sama di server, hanya query string saja yang berubah.
Hanya saat:
Ganti favicon lagi
Browser masih menampilkan favicon lama
Kalau favicon sudah stabil dan tidak akan diganti lagi, angka itu boleh dibiarkan.
Ubah ke ?v=3 hanya supaya:
✔ Browser tidak pakai cache lama
✔ Perubahan terlihat langsung
Kalau sekarang sudah tampil favicon baru tanpa mengubah versi pun, tidak perlu ubah lagi 👍
Kalau Guru mau, saya bisa jelaskan juga bagaimana Nginx kadang ikut menyimpan cache favicon.
nonaktifkan: di authenticated user dan gurujurnal moodle/user:manageownfiles moodle/user:manageownfiles Grade report: Overview rep...