Install GenieACS

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:

PortServiceFungsiAkses
7547/TCPgenieacs-cwmpCWMP/TR-069 endpoint (ONT/CPE connect ke ACS)WAJIB publik
3000/TCPgenieacs-uiWeb UI (admin/operator)Publik / VPN / internal
7557/TCPgenieacs-nbiNorthbound API (integrasi OSS/BSS, script)Internal / terbatas
7567/TCPgenieacs-fsFile server (firmware, config download)Publik (jika dipakai CPE)
27017/TCPMongoDBDatabase GenieACSHANYA 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