Sunday, 1 March 2026

Pasang dhcp server di debian cbt

 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

 

🧪 TEST

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).


🔧 LANGKAH 1 — Edit 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

🔧 LANGKAH 2 — Pastikan DHCP Tetap Pakai DNS Server Ini

Cek:

nano /etc/dhcp/dhcpd.conf

Pastikan ada:

option domain-name-servers 192.168.50.1;

Restart DHCP:

systemctl restart isc-dhcp-server

🧪 TEST

Di klien:

ipconfig /release
ipconfig /renew

Lalu buka browser:

http://cbt.smandaka

Harus masuk ke server CBT (192.168.50.1).


🎯 Kenapa Ini Lebih Baik?

✔ Tidak pakai .local (kadang bentrok mDNS)
✔ Lebih rapi untuk sekolah
✔ Bisa dikembangkan ke SSL internal nanti


🔒 Opsional (Lebih Profesional)

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.


🎯 Cara Paling Mudah: Kedipkan Lampu Port (Recommended)

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 👍


🎯 Cara Alternatif (Tanpa ethtool)

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.


🎯 Cara Ketiga (Lihat MAC Address)

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.


🎯 Supaya Tidak Bingung Lagi

Setelah yakin enp1s0 itu port klien, tempel stiker:

CBT LAN

Dan eno1 diberi label:

INTERNET

Selesai, tidak bingung lagi 😄


🧠 Ringkasnya

Cara paling mudah dan cepat:

ethtool -p enp1s0 10

Lihat port yang kedip.

Itu dia.


Besok di lab tinggal:

  1. Kedipkan port

  2. Colok ke switch mini

  3. Restart DHCP

  4. Siap ujian 🚀

Kalau mau, saya bisa buatkan checklist 5 menit sebelum ujian supaya tidak panik 👍

 

 

mengetahui alamat modem orbit star 2

DHCP modem off,

Ip modem berubah, saya tidak tahu ip nya berapa

colok modem ke ubuntu, di terminal ketikkan arp -a 

Saturday, 28 February 2026

*Membuat Soal untuk Asesmen Sumatif Akhir Jenjang Kelas XII*

 *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:


  1. login di https://sim.sman2kandangan.sch.id/
  2. Klik Dashboard.
  3. Klik Course: Nama Bpk Ibu sendiri (yang di bawahnya ada tulisan (SOAL-SOAL DARI GURU)
  4. Klik More.
  5. Klik Question Bank.
  6. Pilih Questions yang ada panah ke atas ke bawah di samping kiri, lalu klik Categories.
  7. Klik Add Category. Isikan Nama: Soal ASAJ Kelas 12 Tahun 2026 mapel ***** (ganti * dengan mapel masing-masing). Klik Add category.
  8. Klik Soal ASAJ Kelas 12 Tahun 2026 mapel ***** yang sudah dibuat.
  9. Klik Create a new question. Pilih Multiple choice. Klik add.
  10. Mulai membuat soal: isikan nama soal, teks soal, pilihan jawaban ada 5 dengan 1 di antaranya beri grade 100% sebagai kunci jawaban. Klik Save changes.
  11. Klik Create a new question lagi dan seterusnya sampai sejumlah soal 35 atau 40 buah.

Thursday, 26 February 2026

Install Pihole di Ubuntu 24

 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! 

Wednesday, 25 February 2026

Restricted Setting Android AppLock

 

newer android versions automatically flag all apps which require elevated permissions like display over other apps and accessibility service if they are not installed from play store directly. You can go to system settings > Apps > App Lock > Three dots > Enable restricted Settings, and then you should be able to enable the permission
you can check that it is safe by analyzing the code over github. the fdroid builds are also reproducible

Edit sudo nano /etc/cups/cupsd.conf untuk Print melalui server debian

 

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.


✅ SOLUSI CEPAT & AMAN (Rekomendasi)

Kita ganti semua 192.168.100.0/24192.168.200.0/24


1️⃣ Edit File

sudo nano /etc/cups/cupsd.conf

2️⃣ Ganti Bagian Ini (ADA 3 TEMPAT)

🔹 Bagian <Location />

Ubah dari:

Allow 192.168.100.0/24

Menjadi:

Allow 192.168.200.0/24

🔹 Bagian <Location /admin>

Ubah juga:

Allow 192.168.200.0/24

🔹 Bagian <Location /admin/log>

Ubah juga:

Allow 192.168.200.0/24

3️⃣ (Lebih Simpel & Fleksibel) Pakai @LOCAL (Opsional)

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 👍


4️⃣ Restart CUPS

Wajib setelah edit:

sudo systemctl restart cups

5️⃣ Test Lagi

Buka dari HP / PC:

http://192.168.200.20:631

Sekarang harusnya sudah masuk.


✅ BONUS: Supaya Client Bisa Print Langsung

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

🎯 KESIMPULAN

❌ 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.

Tuesday, 24 February 2026

tambahkan di profile user "profile_field_nis" nip nowa

 

 

 **************

 

 

 

===============

 

 

 

 

Baik Guru Duan, berikut cara menambahkan field di profil user Moodle:

Target field:

  • profile_field_nisNIS

  • nipNIP

  • nowaNo WhatsApp


Cara 1 (Resmi & Aman – Lewat Admin Panel Moodle)

Disarankan pakai cara ini 👍

1. Masuk sebagai Admin

Login → Site administration

2. Buka Custom Profile Fields

Masuk ke:

Site administration
→ Users
→ Accounts
→ User profile fields

3. Buat Kategori (Opsional)

Klik Create a new profile category
Misal:

Data Sekolah

4. Tambah Field Baru

Klik Create a new profile field → Short text

Lakukan 3 kali:


🔹 A. Field NIS

SettingIsi
NameNIS
Short namenis
RequiredYes (opsional)
VisibleVisible to user
LockedNo

👉 Klik Save changes


🔹 B. Field NIP

SettingIsi
NameNIP
Short namenip

🔹 C. Field No WhatsApp

SettingIsi
NameNo WhatsApp
Short namenowa

✅ Hasilnya

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

✅ Cara Cek di Database (Opsional)

Kalau mau pastikan sudah masuk:

mysql -u root -p moodle
SELECT shortname, name 
FROM mdl_user_info_field;

Harus muncul:

nis
nip
nowa

⚠️ Catatan Penting

  1. Jangan edit langsung database kalau belum perlu
    → Pakai admin panel lebih aman.

  2. 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 👍

 

🔥Backup Moodle di Laptop


✅ 3️⃣ Backup Moodle Code

sudo tar -czf ~/backup_laptop/moodle-code-$(date +%F).tar.gz /var/www/html/moodle

✅ 4️⃣ Backup Folder moodledata

sudo tar -czf ~/backup_laptop/moodledata-$(date +%F).tar.gz /var/moodledata

✅ 5️⃣ Backup Database

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.


✅ 6️⃣ Cek Hasil Backup

ls -lh ~/backup_laptop

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 💾


🔥 Cara Lebih Praktis (Satu Perintah Saja)

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.



Monday, 23 February 2026

Buat role gurujurnal

 

Untuk membuat role baru "Guru Jurnal" dan memberikan capability local/jurnalmengajar:submit di Moodle 4.5, ikuti langkah-langkah berikut:


🛠️ LANGKAH 1: Buat Role Baru "Guru Jurnal"

  1. Login sebagai admin di Moodle.

  2. Buka menu:
    Site administration > Users > Permissions > Define roles

  3. Klik tombol "Add a new role".

  4. Pada bagian "Use role or archetype", pilih:

    • ⚪ No role

    • (Atau pilih "Teacher" jika ingin mewarisi dari role guru)

  5. Klik Continue.


📝 LANGKAH 2: Konfigurasi Role Baru

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.


✅ LANGKAH 3: Beri Capability local/jurnalmengajar:submit

  1. Pada kolom pencarian capability, ketik:

    local/jurnalmengajar:submit
    
  2. Saat ditemukan, beri nilai:

    • ✅ Allow

Klik Save changes di bagian bawah.


🔁 LANGKAH 4: Assign Role ke User

  1. Masuk ke Site administration > Users > Permissions > Assign system roles

  2. Klik pada role Guru Jurnal

  3. 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.

Menghilangan Guess Access di Moodle

Itu adalah notifikasi Guest Access di Moodle. Untuk menghilangkannya, silakan lakukan salah satu cara berikut:


Cara 1: Matikan Login sebagai Tamu (Disarankan)

  1. Login sebagai Admin Moodle

  2. Masuk ke:

    👉 Site administration → Plugins → Authentication → Manage authentication

  3. Cari Guest login button

  4. Klik ikon 👁️ (Disable) sampai mati

  5. Simpan

📌 Setelah ini, tombol “Access as a guest” tidak akan muncul lagi.


Cara 2: Matikan Guest di Level Course

Kalau hanya ingin hilang di mata pelajaran tertentu:

  1. Masuk ke Course

  2. Klik Settings

  3. Cari Guest access

  4. Set ke: No

  5. Save


Cara 3 (Opsional): Paksa Login di Homepage

Supaya semua pengunjung wajib login:

  1. Site administration → Security → Site policies

  2. Aktifkan:

    ✔️ Force users to login

  3. Save

📌 Ini akan membuat semua halaman Moodle wajib login.


Rekomendasi untuk Server CBT Sekolah

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 👍

 

 

 

 

 

agar user tidak bisa edit profile

 http://localhost/admin/roles/define.php

 

 

Buat Favicon.ico dengan PixelLab dan imagemagick

 

Baik, Guru Duan!
Saya jelaskan langkah paling aman dan bersih untuk mengganti favicon Moodle menggunakan desain yang Guru buat di PixelLab.


🟩 LANGKAH 1 — Buat Desain di PixelLab

Di PixelLab:

  1. Buat kanvas 1:1 (square), misalnya 512×512 px atau 1024×1024 px

  2. Setelah selesai desain → Export sebagai PNG (transparan atau tidak)

  3. Transfer PNG itu ke laptop (via WhatsApp, Telegram, kabel, dsb.)

Setelah PNG ada di laptop, kita lanjut.


🟩 LANGKAH 2 — Ubah PNG menjadi favicon.ico

Ada dua cara:

Cara A — Konversi lewat terminal (disarankan)

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.


Cara B — Konversi online (lebih mudah)

Bisa pakai:

  • favicon.io

  • convertico.com

  • iconifier.net

Upload PNG → download favicon.ico


🟩 LANGKAH 3 — Upload favicon.ico ke server Moodle

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.


🟩 LANGKAH 4 — Purge Cache Moodle

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


🟩 LANGKAH 5 — Refresh browser (harus Ctrl+Shift+R)

Chrome/Firefox menyimpan favicon di cache lama.

Tekan:

Ctrl + Shift + R

atau

Ctrl + F5

Baru favicon akan berubah.