Tag: carbonio

  • Panduan Upgrade Carbonio Menggunakan Ansible

    Panduan Upgrade Carbonio Menggunakan Ansible

    Pendahuluan

    Menjaga Carbonio tetap menggunakan versi terbaru merupakan salah satu langkah penting untuk mendapatkan fitur terbaru, peningkatan performa, perbaikan bug, serta pembaruan keamanan. Mulai Carbonio 26.6.x, Zextras menyediakan mekanisme upgrade yang lebih terstruktur menggunakan Ansible, sehingga proses pembaruan dapat dilakukan secara konsisten baik pada deployment single-node maupun multi-node.

    Berbeda dengan aplikasi yang memiliki installer terpisah, Carbonio melakukan upgrade melalui pembaruan package sistem. Oleh karena itu, proses upgrade dilakukan menggunakan Ansible Playbook yang akan memperbarui seluruh paket Carbonio dari repository resmi Zextras ke versi terbaru yang tersedia. Dokumentasi resmi juga menjelaskan bahwa prosedur ini dapat digunakan untuk melakukan upgrade dari versi Carbonio yang masih didukung menuju versi terbaru tanpa harus melewati setiap versi satu per satu. Sebelum memulai upgrade, Zextras sangat menyarankan untuk membuat backup dan snapshot seluruh node sebagai langkah mitigasi apabila terjadi kendala selama proses upgrade.


    Persyaratan

    Sebelum menjalankan proses upgrade, pastikan beberapa persyaratan berikut telah dipenuhi:

    • Sudah melakukan backup seluruh data Carbonio.
    • Membuat snapshot seluruh virtual machine (jika menggunakan virtualisasi).
    • Seluruh repository Carbonio telah dikonfigurasi dengan benar.
    • Ansible dapat melakukan koneksi SSH ke seluruh node.
    • File inventory Ansible masih sesuai dengan kondisi infrastruktur Carbonio.
    • Hanya repository yang ingin digunakan untuk upgrade yang dalam kondisi aktif. Repository lain sebaiknya dinonaktifkan agar tidak ikut memperbarui package yang tidak diinginkan.

    Install atau Update Collection Carbonio Upgrade

    Sebelum menjalankan playbook upgrade, pastikan collection zxbot.carbonio_upgrade telah terpasang atau diperbarui ke versi terbaru.

    Jalankan perintah berikut:

    ansible-galaxy collection install zxbot.carbonio_upgrade -U

    Parameter -U berfungsi untuk:

    • menginstal collection apabila belum tersedia,
    • atau memperbarui collection ke versi terbaru apabila sudah pernah diinstal sebelumnya.

    Collection inilah yang berisi seluruh playbook yang digunakan untuk melakukan upgrade Carbonio.


    Pastikan File Inventory

    Ansible akan menggunakan file inventory yang sebelumnya digunakan saat instalasi.

    Contoh:

    carbonio-inventory

    Pastikan seluruh hostname, FQDN, dan pembagian service masih sesuai dengan kondisi server saat ini.

    Jika sebelumnya Carbonio diinstal secara manual, inventory tetap dapat digunakan selama seluruh node dan komponennya telah diisikan dengan benar.


    Jalankan Upgrade

    Masuk ke direktori tempat inventory berada, kemudian jalankan:

    ansible-playbook zxbot.carbonio_upgrade.carbonio_upgrade \
    -u root \
    -i carbonio-inventory

    Playbook akan melakukan proses upgrade seluruh package Carbonio yang berasal dari repository resmi Zextras.

    Dokumentasi resmi menjelaskan bahwa versi Carbonio yang saat ini terpasang tidak memengaruhi prosedur upgrade. Selama berasal dari versi yang masih didukung, sistem akan diperbarui ke release terbaru yang tersedia pada repository.


    Mencegah Auto Remove Package

    Secara default, playbook akan menjalankan proses autoremove terhadap dependency yang dianggap sudah tidak digunakan.

    Apabila Anda ingin menonaktifkan perilaku tersebut, gunakan parameter berikut:

    ansible-playbook zxbot.carbonio_upgrade.carbonio_upgrade \
    -u root \
    -i carbonio-inventory \
    --extra-vars skip_autoremove=1

    Opsi ini cukup berguna apabila Anda ingin melakukan verifikasi terlebih dahulu sebelum menghapus package yang tidak lagi digunakan.

    Perlu diperhatikan bahwa package yang dipasang secara manual dan tidak digunakan oleh Carbonio tidak akan dihapus secara otomatis, sehingga administrator tetap perlu melakukan pembersihan apabila diperlukan.


    Jika Upgrade Gagal

    Apabila proses upgrade berhenti karena suatu error, Anda tidak perlu mengulang seluruh proses dari awal.

    Cukup jalankan kembali playbook yang sama:

    ansible-playbook zxbot.carbonio_upgrade.carbonio_upgrade \
    -u root \
    -i carbonio-inventory

    Ansible akan mengenali task yang telah berhasil dijalankan sebelumnya dan hanya mengeksekusi task yang gagal atau belum selesai. Mekanisme ini membantu mempercepat proses recovery tanpa harus mengulang keseluruhan upgrade.


    Catatan Khusus Upgrade dari Versi Lama

    Bagi administrator yang melakukan upgrade dari Carbonio versi lama, terdapat beberapa penyesuaian pada file inventory.

    Upgrade dari Carbonio 24.12

    Jika menggunakan Carbonio 24.12, pastikan inventory telah memiliki section:

    [workStreamServers]

    Jika sebelumnya menggunakan komponen Chats, tambahkan hostname node Chats pada section tersebut sebelum menjalankan upgrade.

    Upgrade dari Carbonio 24.9 atau Lebih Lama

    Untuk deployment yang berasal dari Carbonio 24.9 atau versi yang lebih lama, section berikut tetap harus ada pada inventory selama proses upgrade:

    [dbsConnectorServers]

    Walaupun komponen DB Connector telah dihapus pada versi terbaru, keberadaan section tersebut masih diperlukan agar Ansible dapat melakukan migrasi package dengan benar. Setelah proses upgrade selesai, section tersebut dapat dikosongkan sesuai rekomendasi dokumentasi.


    Hal Pasca Upgrade

    Mulai Carbonio 26.6.x, Zextras memperkenalkan Unified Quota.

    Perubahan ini menggabungkan quota Mail, Files, dan Chat menjadi satu quota penyimpanan per pengguna.

    Penting untuk diketahui bahwa konfigurasi quota lama tidak dimigrasikan secara otomatis. Setelah upgrade, seluruh akun akan memiliki quota Unlimited hingga administrator menetapkan quota baru.

    Oleh karena itu, administrator disarankan untuk:

    • meninjau kembali penggunaan storage,
    • menentukan kebijakan quota baru,
    • menjalankan migration script Unified Quota yang tersedia melalui Partner Portal apabila diperlukan.

    Kesimpulan

    Upgrade Carbonio menggunakan Ansible merupakan metode resmi yang direkomendasikan oleh Zextras karena mampu melakukan pembaruan secara konsisten pada seluruh node dalam infrastruktur. Proses upgrade cukup sederhana, yaitu memperbarui collection Ansible, memastikan inventory telah sesuai, kemudian menjalankan playbook upgrade.

    Sebelum memulai proses, jangan lupa melakukan backup dan snapshot seluruh server. Selain itu, apabila Anda melakukan upgrade ke Carbonio 26.6.x, pastikan untuk meninjau perubahan Unified Quota karena konfigurasi quota lama tidak akan dimigrasikan secara otomatis dan memerlukan tindakan administrator setelah proses upgrade selesai.


    Referensi

  • Mengatasi Error 451 4.3.0 Temporary lookup failure  di Carbonio

    Mengatasi Error 451 4.3.0 Temporary lookup failure di Carbonio

    Beberapa waktu lalu, saya menemukan satu hal setelah melakukan upgrade in-place pada server Carbonio. Pengiriman email lokal (local delivery) gagal dan log Postfix menunjukkan error 451 4.3.0 Temporary lookup failure yang sekilas terlihat seperti masalah LDAP atau DNS.

    Awalnya saya juga mengira penyebabnya adalah layanan LDAP yang tidak berjalan atau DNS lokal bermasalah. Namun setelah melakukan pengecekan lebih dalam, ternyata penyebabnya sama sekali berbeda. Masalah terjadi karena Postfix tidak memiliki izin membaca file konfigurasi LDAP yang digunakan untuk melakukan lookup account dan domain.

    Panduan ini membahas langkah-langkah troubleshooting hingga menemukan akar penyebabnya.


    Kendala

    Saat mengirim email muncul log seperti berikut.

    postfix/proxymap: warning: ldap:/opt/zextras/conf/ldap-transport.cf is unavailable.
    open /opt/zextras/conf/ldap-transport.cf: Permission denied
    
    postfix/trivial-rewrite: warning:
    virtual_alias_domains lookup failure
    
    451 4.3.0 Temporary lookup failure

    Karena Postfix gagal melakukan lookup ke LDAP, proses penerimaan email langsung ditolak. Ternyata permission ditolak pada file /opt/zextras/conf/ldap-transport.cf untuk user group postfix.


    Analisis Awal

    Awalnya saya melakukan beberapa pengecekan berikut.

    Memastikan service LDAP berjalan

    su - zextras
    systemctl list-units -all carbonio-*

    Semua service berjalan normal.


    Memastikan DNS berjalan

    Saya juga mengecek dnsmasq.

    systemctl status dnsmasq

    Memeriksa permission file LDAP

    Saya mengecek seluruh file konfigurasi LDAP yang digunakan Postfix.

    ls -l /opt/zextras/conf/ldap-*.cf

    Hasilnya:

    -rw-r----- 1 zextras zextras ldap-transport.cf
    -rw-r----- 1 zextras zextras ldap-vad.cf
    -rw-r----- 1 zextras zextras ldap-vmd.cf

    Sekilas permission tersebut terlihat normal.

    Namun saya mencoba membaca file menggunakan user Postfix.

    su -s /bin/bash postfix

    Kemudian:

    cat /opt/zextras/conf/ldap-transport.cf

    Hasilnya:

    Permission denied

    Di sinilah penyebab utama mulai terlihat.


    Mengapa Bisa Terjadi?

    Service SMTP dijalankan oleh user postfix.

    ps -ef | grep smtpd

    Output:

    postfix .... smtpd

    Sementara file konfigurasi LDAP dimiliki oleh:

    Owner : zextras
    Group : zextras
    Permission : 640

    Artinya hanya:

    • owner (zextras)
    • group (zextras)

    yang dapat membaca file tersebut.

    Karena user postfix bukan anggota group zextras, maka Postfix tidak dapat membaca file konfigurasi LDAP.

    Akibatnya seluruh proses lookup gagal.

    Postfix
          │
          ▼
    ldap-transport.cf
          │
    Permission denied
          │
          ▼
    LDAP lookup gagal
          │
          ▼
    451 Temporary lookup failure
    

    Membandingkan Dengan Server Carbonio yang Normal

    Saya kemudian membandingkan dengan server Carbonio lain yang berjalan normal.

    Server yang sehat memiliki permission berikut.

    -rw-r----- 1 zextras postfix ldap-transport.cf

    Perbedaannya hanya pada group ownership.

    ServerOwnerGroup
    Server errorzextraszextras
    Server normalzextraspostfix

    Karena group sudah menggunakan postfix, service SMTP dapat membaca file tanpa perlu memberikan permission ke user lain.


    Solusi

    Saya mengubah group ownership seluruh file LDAP menjadi postfix.

    chown zextras:postfix /opt/zextras/conf/ldap-*.cf
    chmod 640 /opt/zextras/conf/ldap-*.cf

    Kemudian restart layanan MTA.

    systemctl restart carbonio-mta.target

    Setelah itu saya kembali mencoba membaca file menggunakan user postfix.

    su -s /bin/bash postfix
    
    cat /opt/zextras/conf/ldap-transport.cf

    File sudah dapat dibaca tanpa error.


    Penyebab Permission Berubah

    Sampai artikel ini ditulis saya belum tau penyebab pastinya. Namun ada beberapa kemungkinan:

    • Upgrade Carbonio mengubah ownership file.
    • Script maintenance atau proses regenerasi konfigurasi membuat ulang file LDAP.
    • Restore konfigurasi dari backup dengan ownership berbeda.
    • Perubahan manual menggunakan chown.

    Tips Sebelum Mengubah Permission

    Saya tidak menyarankan menggunakan:

    chmod 644 /opt/zextras/conf/ldap-*.cf

    karena file tersebut berisi informasi autentikasi LDAP seperti:

    bind_dn
    bind_pw

    Memberikan permission 644 berarti seluruh user lokal pada server dapat membaca credential LDAP.

    Solusi yang lebih aman adalah tetap menggunakan permission 640, namun memastikan group ownership sesuai dengan yang dibutuhkan oleh Postfix.


    Penutup

    Error 451 Temporary lookup failure tidak selalu berarti LDAP atau DNS sedang bermasalah. Pada kasus ini penyebab sebenarnya adalah Postfix tidak dapat membaca file konfigurasi LDAP akibat perubahan group ownership.

    Jika menemukan log seperti:

    open /opt/zextras/conf/ldap-transport.cf: Permission denied

    Periksa ownership dan permission file konfigurasi LDAP dan pastikan ownership dan permission sesuai. Perubahan kecil pada group ownership dapat menyebabkan seluruh proses lookup gagal dan membuat layanan email tidak dapat berfungsi sebagaimana mestinya.