OS: Ubuntu 22.04
node.js: 24:x (LTS)
Jika di install menggunakan VM pastikan type CPU adalah Host
Install Node.JS
Sumber: https://github.com/nodesource/distributions/blob/master/DEV_README.md#ubuntu-versions
sudo apt install -y curl
curl -fsSL https://deb.nodesource.com/setup_lts.x -o nodesource_setup.sh
sudo apt install -y nodejs
Cehck version
node -v
Install MongoDB
sumber: https://www.mongodb.com/docs/v7.0/tutorial/install-mongodb-on-ubuntu/?utm_source=chatgpt.com
sudo apt-get install gnupg curl
curl -fsSL https://www.mongodb.org/static/pgp/server-7.0.asc | \
sudo gpg -o /usr/share/keyrings/mongodb-server-7.0.gpg \
--dearmor
sudo touch /etc/apt/sources.list.d/mongodb-org-7.0.list
echo "deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-7.0.gpg ] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/7.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-7.0.list
sudo apt-get update
sudo apt-get install -y mongodb-org
Aktifkan dan jalankan service mongod:
sudo systemctl enable mongod
sudo systemctl start mongod
sudo systemctl status mongod
Install GenieACS
Sumber: https://docs.genieacs.com/en/latest/installation-guide.html
sudo npm install -g [email protected]
Configure systemd
Buat user khusus untuk menjalankan GeniACS daemon:
sudo useradd --system --no-create-home --user-group genieacs
Buat direktori untuk menyimpan file extension dan environment:
sudo mkdir /opt/genieacs
sudo mkdir /opt/genieacs/ext
sudo chown genieacs:genieacs /opt/genieacs/ext
Buat file envirnment /opt/genieacs/genieacs.env:
sudo nano /opt/genieacs/genieacs.env
Masukkan baris berikut:
GENIEACS_CWMP_ACCESS_LOG_FILE=/var/log/genieacs/genieacs-cwmp-access.log
GENIEACS_NBI_ACCESS_LOG_FILE=/var/log/genieacs/genieacs-nbi-access.log
GENIEACS_FS_ACCESS_LOG_FILE=/var/log/genieacs/genieacs-fs-access.log
GENIEACS_UI_ACCESS_LOG_FILE=/var/log/genieacs/genieacs-ui-access.log
GENIEACS_DEBUG_FILE=/var/log/genieacs/genieacs-debug.yaml
NODE_OPTIONS=--enable-source-maps
GENIEACS_EXT_DIR=/opt/genieacs/ext
Sementara gunakan user root:
sudo su
Buat dan simpan JWT secret yang aman untuk GenieACS UI authentication:
node -e "console.log(\"GENIEACS_UI_JWT_SECRET=\" + require('crypto').randomBytes(128).toString('hex'))" >> /opt/genieacs/genieacs.env
Kembali gunakan user biasa (non-root):
exit
Set file ownership and permissions:
sudo chown genieacs:genieacs /opt/genieacs/genieacs.env
sudo chmod 600 /opt/genieacs/genieacs.env
Buat direktory untuk log:
sudo mkdir /var/log/genieacs
sudo chown genieacs:genieacs /var/log/genieacs
Buat systemd unit files
Jalankan perintah berikut untuk membuuat service genieacs-cwmp:
sudo systemctl edit --force --full genieacs-cwmp
Lalu, masukkan bars berikut:
[Unit]
Description=GenieACS CWMP
After=network.target
[Service]
User=genieacs
EnvironmentFile=/opt/genieacs/genieacs.env
ExecStart=/usr/bin/genieacs-cwmp
[Install]
WantedBy=default.target
Jalankan perintah berikut untuk membuuat service genieacs-nbi:
sudo systemctl edit --force --full genieacs-nbi
Lalu, masukkan baris berikut:
[Unit]
Description=GenieACS NBI
After=network.target
[Service]
User=genieacs
EnvironmentFile=/opt/genieacs/genieacs.env
ExecStart=/usr/bin/genieacs-nbi
[Install]
WantedBy=default.target
Jalankan perintah berikut untuk membuuat service genieacs-fs:
sudo systemctl edit --force --full genieacs-fs
Lalu, masukkan baris berikut:
[Unit]
Description=GenieACS FS
After=network.target
[Service]
User=genieacs
EnvironmentFile=/opt/genieacs/genieacs.env
ExecStart=/usr/bin/genieacs-fs
[Install]
WantedBy=default.target
Jalankan perintah berikut untuk membuuat service genieacs-ui:
sudo systemctl edit --force --full genieacs-ui
Lalu, masukkan baris berikut:
[Unit]
Description=GenieACS UI
After=network.target
[Service]
User=genieacs
EnvironmentFile=/opt/genieacs/genieacs.env
ExecStart=/usr/bin/genieacs-ui
[Install]
WantedBy=default.target
Konfigurasi rotasi file log menggunakan logrotate
sudo nano /etc/logrotate.d/genieacs
Lalu, masukkan baris berikut:
/var/log/genieacs/*.log /var/log/genieacs/*.yaml {
daily
rotate 30
compress
delaycompress
dateext
}
Aktifkan dan jalankan service:
sudo systemctl enable genieacs-cwmp
sudo systemctl start genieacs-cwmp
sudo systemctl status genieacs-cwmp
sudo systemctl enable genieacs-nbi
sudo systemctl start genieacs-nbi
sudo systemctl status genieacs-nbi
sudo systemctl enable genieacs-fs
sudo systemctl start genieacs-fs
sudo systemctl status genieacs-fs
sudo systemctl enable genieacs-ui
sudo systemctl start genieacs-ui
sudo systemctl status genieacs-ui
Port yang digunakan GenieACS:
| Port | Service | Fungsi | Akses |
|---|---|---|---|
| 7547/TCP | genieacs-cwmp | CWMP/TR-069 endpoint (ONT/CPE connect ke ACS) | WAJIB publik |
| 3000/TCP | genieacs-ui | Web UI (admin/operator) | Publik / VPN / internal |
| 7557/TCP | genieacs-nbi | Northbound API (integrasi OSS/BSS, script) | Internal / terbatas |
| 7567/TCP | genieacs-fs | File server (firmware, config download) | Publik (jika dipakai CPE) |
| 27017/TCP | MongoDB | Database GenieACS | HANYA localhost |
Penginstalan GeniACS telah selesai, sekarang saatnya mulai konfigurasi ACS
GeniACS tutorial
Set autentikasi untuk koneksi ONT > ACS server
Pada Bagian Admin > Config, Klik New config, lalu sesuaikan seperti berikut:
Key:
cwmp.auth
Value:
AUTH("username", "password")
Set otomatis random request connection username & password
Agar connection request username & password pada ont terisi otomatis saat pertamakali ONT berhasil terhubung ke ACS server lakukan langkah berikut:
Pada bagian Provisions > bootstrap tambahkan baris berikut dipaling bawah:
/********************************
* SET CONNECTION REQUEST (1x)
********************************/
// Ambil Serial Number ONT
const sn = declare("Device.DeviceInfo.SerialNumber").value;
// Fallback jika SN kosong
if (sn) {
// Generate credential unik per ONT
const crUser = "ont-" + sn;
const crPass = sn.slice(-6);
// Set Connection Request Username
declare("InternetGatewayDevice.ManagementServer.ConnectionRequestUsername", {
value: crUser
});
// Set Connection Request Password
declare("InternetGatewayDevice.ManagementServer.ConnectionRequestPassword", {
value: crPass
});
}
// (Optional tapi disarankan)
declare("InternetGatewayDevice.ManagementServer.PeriodicInformEnable", {
value: true
});
Script diatas akan set requeset connection username & password yang berbeda-beda setiap ONT