Tag: repository

  • Membuat Metadata Repository Lokal dengan createrepo_c

    Membuat Metadata Repository Lokal dengan createrepo_c

    Saat menyiapkan repository lokal untuk lab CloudStack, saya perlu mengumpulkan package RPM di server staging agar instalasi ke server target bisa dilakukan tanpa akses internet. Setelah package terkumpul, langkah berikutnya adalah membuat metadata menggunakan createrepo_c.

    Fungsi createrepo_c

    createrepo_c adalah tool untuk membuat metadata repository dari kumpulan file RPM. Metadata ini menjadi indeks yang digunakan DNF untuk mengetahui package yang tersedia, versi, lokasi file, dan dependensi.

    Gampangnya sih, RPM adalah packagenya, sedangkan metadata adalah daftar informasi package tersebut. Hasil prosesnya disimpan dalam direktori repodata. Debian Manpages

    Untuk kebutuhan offline, package beserta dependensinya harus disiapkan terlebih dahulu sebelum metadata dibuat.

    Contoh penggunaan di Rocky Linux 9

    Jalankan perintah berikut sebagai root. Contoh ini menggunakan direktori /srv/repo-lokal yang sudah berisi package RPM.

    1. Install createrepo_c

    Lakukan saat repository sumber masih dapat diakses:

    dnf install -y createrepo_c

    Paket ini menyediakan perintah untuk membuat metadata repository. Documentation

    2. Buat metadata repository

    Periksa file RPM yang tersedia:

    ls /srv/repo-lokal/*.rpm

    Kemudian jalankan:

    createrepo_c /srv/repo-lokal

    Perintah tersebut membaca informasi paket dan membuat direktori repodata. Untuk memeriksa hasilnya:

    ls /srv/repo-lokal/repodata/

    Salah satu file yang akan tersedia adalah repomd.xml, yang menjadi acuan metadata repository. Debian Manpages

    Agar bisa digunakan oleh DNF, repository tersebut juga perlu didaftarkan melalui file konfigurasi .repo.

    Jika ada package baru atau perubahan

    Setelah menambah, mengganti, atau menghapus RPM, perbarui metadata:

    createrepo_c --update /srv/repo-lokal

    Opsi --update memanfaatkan metadata lama untuk paket yang tidak berubah, sehingga prosesnya dapat lebih cepat. Informasi paket baru dan perubahan isi repository akan masuk ke metadata terbaru. Debian Manpages

    Pada server, refresh cache DNF. Misalnya repository tersebut sudah terdaftar dengan ID repo-lokal:

    dnf --disablerepo='*' --enablerepo=repo-lokal --refresh makecache

    createrepo_c --update memperbarui indeks di sisi repository, sedangkan dnf makecache memperbarui cache metadata di sisi pengguna. Instalasi atau upgrade paket tetap dilakukan melalui perintah DNF yang sesuai. DNF @DNF_VERSION@-1 documentation

  • Membangun CloudStack Menggunakan Repo Lokal

    Saya sedang testing Apache CloudStack untuk kebutuhan lab tanpa akses internet. Project ini merupakan arahan dari atasan saya sebagai persiapan rencana migrasi VM dari VMware ke KVM yang dikelola melalui CloudStack. Tujuannya agar disk VM dari VMware dapat dikonversi dan digunakan pada KVM.

    Awalnya, saya mengumpulkan paket dan kebutuhan instalasi ke dalam satu bundle, lalu menyiapkan alur deployment CloudStack menggunakan repository lokal.

    Tujuannya sederhana: bahan-bahan disiapkan terlebih dahulu di server yang memiliki internet, kemudian dipindahkan ke server target. Dengan begitu, instalasi tidak perlu mengambil paket dari repository online.

    Memisahkan Persiapan dan Deployment

    Saya membagi pekerjaan ini menjadi dua bagian:

    • Server staging dengan internet, untuk mengunduh paket, dependensi, ISO, dan template.
    • Server target tanpa internet, untuk menggunakan bundle dan menjalankan setup CloudStack melalui jaringan lokal.

    Staging menggunakan Rocky Linux 9.7, sedangkan target bundle menggunakan Rocky Linux 9.8. Karena berbeda, sumber paket untuk bundle saya arahkan ke versi OS target agar sesuai dengan lingkungan deployment.

    Untuk lab ini, Management Server, database, dan host KVM ditempatkan pada satu server agar alurnya lebih sederhana.

    1. Menyiapkan Isi Bundle

    Persiapan dimulai dari mengumpulkan kebutuhan CloudStack 4.23 beserta komponen pendukungnya. Isi bundle dibagi berdasarkan fungsi:

    • ISO Rocky Linux 9.8 Minimal untuk instalasi OS target.
    • Repo CloudStack berisi paket Management Server, agent, database, KVM, dan dependensinya.
    • Template System VM beserta metadata yang sesuai dengan paket CloudStack.
    • Repo migrasi VMware untuk kebutuhan konversi VM.
    • Folder berkas vendor, termasuk kebutuhan VDDK untuk metode migrasi yang akan digunakan.
    • README dan checksum sebagai petunjuk penggunaan serta pemeriksaan file.

    Paket migrasi dipisahkan agar kebutuhan instalasi dasar CloudStack lebih mudah dibaca dan digunakan.

    2. Melengkapi Dependensi dan Membuat Repo Lokal

    Pada tahap awal testing, saya menemui paket pendukung yang belum tersedia dan ketidakcocokan versi paket. Dari sini terlihat bahwa menyalin RPM CloudStack saja belum cukup untuk instalasi offline.

    Saya kemudian menyesuaikan pengumpulan paket agar dependensinya ikut tersedia, termasuk paket yang sudah terpasang pada staging tetapi belum tentu ada di target.

    Setelah paket terkumpul, saya membuat metadata repository. Folder tersebut kemudian dapat digunakan oleh DNF sebagai repo lokal, sehingga pemasangan paket tetap mengikuti mekanisme dependency seperti instalasi biasa.

    3. Menyiapkan Template System VM

    Selain paket RPM, saya juga menyiapkan template System VM. Template ini merupakan image untuk VM pendukung CloudStack dan disimpan terpisah dari repo paket.

    Pemilihan template mengikuti metadata dari RPM Management Server yang digunakan. Tujuannya agar paket CloudStack dan template dalam bundle sesuai, serta setup tidak perlu mengunduh template melalui internet.

    4. Mengemas dan Memindahkan Bundle

    Seluruh bahan disusun dalam satu direktori, dilengkapi README dan checksum, lalu dikemas menjadi arsip .tgz.

    Bundle ini menjadi bahan deployment yang dapat dipindahkan ke server target. Di target, arsip diekstrak dan repository diarahkan ke folder lokal menggunakan file://. Saat memasang paket, hanya repo dari bundle yang digunakan.

    5. Melanjutkan Setup CloudStack

    Alur deployment kemudian dilanjutkan dengan konfigurasi hostname, jaringan bridge, database, KVM, dan Management Server. Setelah itu, konfigurasi zone, host, serta storage dilakukan melalui antarmuka CloudStack.

    Untuk kebutuhan lab, saya memilih local primary storage dan disk System VM di storage lokal host KVM. Secondary storage tetap disiapkan untuk menyimpan template, ISO, dan snapshot.

    Offline di sini berarti tidak bergantung pada internet. Komunikasi antar-komponen dan akses administrasi tetap menggunakan jaringan lokal.

    Pengujian

    Fokus pengujian ini adalah memastikan bundle cukup untuk menjalankan setup tanpa mengambil bahan tambahan dari internet. Pemeriksaannya mencakup instalasi paket, akses Management Server, pendaftaran host, kesiapan storage, dan System VM.

    Kebutuhan migrasi VMware ikut disiapkan dalam bundle, tetapi pengujian migrasinya menjadi tahap terpisah. Begitu juga deploy instance pengguna, yang membutuhkan ISO atau template OS guest tersendiri.

    Dari proses ini, bagian paling penting adalah kelengkapan bahan dan kesesuaian versi. Repo lokal menyediakan paket, sedangkan bundle menyatukan kebutuhan deployment agar alurnya lebih mudah diulang.

  • Cara Membuat Repository Lokal Sederhana di Rocky Linux

    Cara Membuat Repository Lokal Sederhana di Rocky Linux

    Saya sedang menyiapkan skenario lab CloudStack lokal tanpa internet. Langkah awalnya adalah membuat Rocky Linux bisa memasang paket dari penyimpanan lokal. Contoh paling sederhana adalah menggunakan DVD ISO Rocky Linux 9 sebagai sumber paket. Pastikan ISO sesuai dengan versi dan arsitektur server. Gunakan DVD ISO, bukan minimal atau boot ISO.

    Di contoh ini, file ISO sudah tersedia di /root/Rocky-9-dvd.iso. Sesuaikan nama file dengan ISO yang dimiliki, dan sediakan ruang disk yang cukup untuk menyalin isinya. Langkah ini membuat repo untuk server tersebut, belum membagikannya ke server lain.

    1. Salin isi repository dari ISO

    # sudo mkdir -p /mnt/rocky-dvd /srv/repo/rocky
    # sudo mount -o loop /root/Rocky-9-dvd.iso /mnt/rocky-dvd
    # ls /mnt/rocky-dvd/{BaseOS,AppStream}/repodata/repomd.xml
    # sudo cp -a /mnt/rocky-dvd/BaseOS /mnt/rocky-dvd/AppStream /srv/repo/rocky/
    # sudo umount /mnt/rocky-dvd

    Folder BaseOS dan AppStream berisi paket serta metadata yang sudah bisa dibaca DNF. Karena itu, untuk contoh ini saya tidak perlu menjalankan createrepo lagi.

    2. Daftarkan repository lokal

    Pastikan kunci GPG Rocky Linux tersedia dengan ls /etc/pki/rpm-gpg/RPM-GPG-KEY-Rocky-9, lalu buat file /etc/yum.repos.d/rocky-local.repo:

    [local-baseos]
    name=Rocky Linux 9 - BaseOS Lokal
    baseurl=file:///srv/repo/rocky/BaseOS
    enabled=1
    gpgcheck=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-Rocky-9
    
    [local-appstream]
    name=Rocky Linux 9 - AppStream Lokal
    baseurl=file:///srv/repo/rocky/AppStream
    enabled=1
    gpgcheck=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-Rocky-9

    DNF membaca konfigurasi repository dari file .repo di /etc/yum.repos.d/. Red Hat Documentation

    3. Uji tanpa repository internet

    # dnf --disablerepo='*' --enablerepo=local-baseos --enablerepo=local-appstream --refresh makecache
    # dnf --disablerepo='*' --enablerepo=local-baseos --enablerepo=local-appstream install vim-enhanced

    Jika metadata terbaca dan vim-enhanced terpasang, repo lokal Rocky Linux sudah berfungsi. Bila paket itu sudah terpasang sebelumnya, gunakan paket lain yang tersedia di ISO untuk menguji instalasi. Opsi --disablerepo='*' membuat kedua perintah hanya memakai repo lokal; repo internet bawaan tetap aktif untuk perintah DNF biasa sampai dinonaktifkan.

    Kalo Ada Update?

    Repository dari DVD ISO tidak diperbarui otomatis. Paket yang tersedia mengikuti isi ISO saat dibuat.

    Jika ada DVD ISO Rocky Linux 9 yang lebih baru, salin kembali folder BaseOS dan AppStream ke direktori baru, misalnya /srv/repo/rocky-baru. Setelah itu, ubah kedua baseurl di rocky-local.repo agar mengarah ke direktori baru. Jangan mencampur isi repo lama dan baru supaya paket tetap sesuai dengan metadatanya.

    Jalankan pembaruan hanya dari repo lokal:

    # dnf --disablerepo='*' --enablerepo=local-baseos \
      --enablerepo=local-appstream --refresh upgrade

    Jika membutuhkan patch yang terbit sebelum ada ISO baru, sinkronkan paket beserta metadata di mesin yang memiliki internet menggunakan dnf reposync --download-metadata, lalu pindahkan hasilnya ke server offline.

    Referensi

  • Migrasi NAKIVO: Export Konfigurasi dan Memindahkan Backup Repository

    Migrasi NAKIVO: Export Konfigurasi dan Memindahkan Backup Repository

    Beberapa waktu lalu saya diminta melakukan pengujian migrasi NAKIVO Backup & Replication ke server baru. Tujuan pengujian ini adalah memastikan apakah konfigurasi seperti inventory, credentials, job backup, job replikasi, dan schedule dapat dipindahkan tanpa harus dibuat ulang.

    Pengujian dilakukan menggunakan dua server, yaitu nakivo sebagai server lama dan nakivo2 sebagai server baru. Inventory yang dikelola terdiri dari dua server Proxmox, yaitu pve-nakivo dan pve-nakivo2, dengan backup tersimpan pada Onboard Repository.

    Memahami Cakupan System Configuration

    NAKIVO menyediakan fitur Export System Configuration untuk memindahkan konfigurasi Director ke instance baru. Berdasarkan dokumentasi NAKIVO, konfigurasi yang ikut dipindahkan mencakup inventory, job, credentials, dan Transporter settings.

    Pada pengujian ini, konfigurasi berikut berhasil terbawa ke NAKIVO baru:

    • Inventory Proxmox yang sudah didaftarkan.
    • Credentials.
    • Backup job dan replication job.
    • Schedule dan retention setiap job.
    • Konfigurasi Transporter.
    • Referensi atau konfigurasi Backup Repository.

    Namun, export system configuration tidak membawa data fisik yang tersimpan di Backup Repository. Artinya, file backup dan recovery point tetap berada di storage server lama dan harus dipindahkan secara terpisah.

    Fitur ini juga ditujukan untuk migrasi, bukan sebagai backup konfigurasi rutin. Saat export dilakukan, aktivitas yang sedang berjalan akan dihentikan dan seluruh job pada NAKIVO lama akan dinonaktifkan. Setelah export, sebaiknya jangan menjalankan kembali job pada instance lama jika migrasi akan dilanjutkan ke instance baru.

    Referensi: System Migration – NAKIVO Help Center.

    Export Konfigurasi dari NAKIVO Lama

    Sebelum export, saya memastikan tidak ada proses backup, replikasi, recovery, maupun repository maintenance yang sedang berjalan.

    Proses export dilakukan melalui menu berikut:

    1. Buka Settings.
    2. Masuk ke General > System Settings.
    3. Pilih tab Configuration.
    4. Klik Export System Configuration.
    5. Pilih Include indexing data jika data indexing juga ingin dipindahkan.
    6. Pilih Encrypt system configuration untuk melindungi credentials di dalam bundle.
    7. Masukkan password, kemudian jalankan export.
    8. Download export bundle setelah proses selesai.

    NAKIVO lama kemudian tidak digunakan untuk menjalankan job agar tidak terjadi perbedaan status antara Director lama dan Director baru.

    Import Konfigurasi ke NAKIVO Baru

    Pada nakivo2, saya memasang NAKIVO Backup & Replication dengan versi dan build yang sama. Import dilakukan melalui:

    1. Buka Settings.
    2. Masuk ke General > System Settings.
    3. Pilih tab Configuration.
    4. Klik Import System Configuration.
    5. Pilih export bundle dari server lama.
    6. Masukkan password bundle.
    7. Klik Import, kemudian Proceed.

    Setelah proses selesai, inventory, credentials, backup job, replication job, dan schedule dari NAKIVO lama muncul pada NAKIVO baru. Konfigurasi yang sudah ada sebelumnya pada server baru akan ditimpa oleh konfigurasi dari bundle.

    Memindahkan Data Onboard Repository

    Walaupun konfigurasi repository sudah terbawa, data backup belum berada pada server baru. Dan masih menunjukkan issue

    Lokasi repository pada server lama adalah:

    /opt/nakivo/repository/NakivoBackup

    Pada server baru, repository saya tempatkan di:

    /backup-nakivo/NakivoBackup

    Sebelum menyalin data, repository harus dipastikan tidak sedang digunakan oleh job dan sebaiknya di-detach terlebih dahulu. Seluruh folder NakivoBackup kemudian disalin tanpa mengubah atau menghapus file di dalamnya.

    Penyalinan menggunakan rsync:

    rsync -aHAX --numeric-ids --info=progress2 \
      /opt/nakivo/repository/NakivoBackup/ \
      root@<IP-NAKIVO-BARU>:/backup-nakivo/NakivoBackup/

    Saya memilih menyalin data terlebih dahulu, bukan langsung menghapus repository lama. Dengan demikian, salinan lama masih dapat digunakan sebagai cadangan sampai repository baru berhasil diverifikasi.

    Referensi: Moving a Backup Repository to a New Location.

    Menyesuaikan Repository pada NAKIVO Baru

    Repository hasil import kemudian diedit melalui Settings > Repositories. Assigned Transporter diarahkan ke Onboard Transporter milik nakivo2, sedangkan path diisi dengan:

    /backup-nakivo

    Path yang dimasukkan adalah direktori induk, bukan /backup-nakivo/NakivoBackup, karena NAKIVO akan mencari folder NakivoBackup di dalam lokasi tersebut.

    Jika repository tidak muncul setelah import, repository dapat didaftarkan melalui Settings > Repositories > Add existing backup repository. Pilih Local Folder, tentukan Transporter, lalu masukkan path /backup-nakivo.

    Referensi: Adding Existing Backup Repositories.

    Error Permission Saat Self-Healing

    Saat menjalankan self-healing, muncul error berikut:

    Self-healing of the "Onboard Repository" has failed
    
    Reason: The "Onboard transporter" transporter cannot read and/or
    write to the specified location (/backup-nakivo).

    Pemeriksaan permission menunjukkan kondisi berikut:

    # Server lama
    drwxrwxrwx root  root  /opt/nakivo/repository
    drwxrwx--- bhsvc bhsvc /opt/nakivo/repository/NakivoBackup
    
    # Server baru
    drwxr-xr-x root  root  /backup-nakivo
    drwxrwx--- bhsvc bhsvc /backup-nakivo/NakivoBackup

    Folder NakivoBackup sudah dimiliki oleh bhsvc, tetapi folder induk /backup-nakivo masih dimiliki root:root dengan permission 755. Akibatnya, Onboard Transporter dapat membuka folder tersebut, tetapi tidak memiliki hak tulis pada lokasi yang didaftarkan sebagai repository.

    Permission dapat disamakan seperti server lama menggunakan chmod 777, tetapi pilihan yang lebih aman adalah memberikan akses hanya kepada user dan grup service NAKIVO:

    chown bhsvc:bhsvc /backup-nakivo
    chmod 770 /backup-nakivo

    Verifikasi Akhir

    Sebelum mengaktifkan kembali seluruh schedule, beberapa pemeriksaan yang perlu dilakukan adalah:

    • Inventory Proxmox dapat di-refresh.
    • Onboard Transporter berstatus online.
    • Repository berstatus attached dan accessible.
    • Backup VM serta recovery point lama dapat ditampilkan.
    • Self-healing selesai tanpa error.
    • Satu file atau VM dapat dipulihkan sebagai pengujian.
    • Satu backup job dapat dijalankan secara manual.
    • Satu replication job dapat dijalankan secara manual.
    • Schedule berjalan dari NAKIVO baru tanpa ada job aktif pada NAKIVO lama.

    Kesimpulan

    Dari pengujian ini, export dan import system configuration dapat memindahkan konfigurasi utama NAKIVO seperti inventory, credentials, job backup, job replikasi, dan schedule. Namun, proses tersebut tidak memindahkan data fisik pada Onboard Repository.

    Data repository tetap harus disalin atau dipindahkan secara manual, kemudian path, Assigned Transporter, ownership, dan permission disesuaikan pada server baru. Hal penting yang saya temukan adalah permission folder NakivoBackup saja belum cukup; user bhsvc juga harus memiliki akses baca dan tulis pada direktori induk yang didaftarkan sebagai lokasi repository.