Mirror local fedora di Indonesia hanya ada 1, yaitu di https://fedora.mirror.angkasa.id/, sangat sedih karena angkasa mirror memutuskan untuk memberhentikan support untuk fedora. Saya di kantor, memiliki fleet server fedora, untuk keperluan lab (uhuk, saya dosen, tapi kerja jadi apapun di kampus :/ jadi kaktus, jadi tukang bersih-bersih, ada ajalah..), yang berfungsi untuk production docker swarm worker (terima kasih anthony yang meninggalkan pekerjaan di kantor :/), HTTP server untuk share materi kuliah, dan juga untuk keperluan server-server lain nya.
Koneksi kantor saya ke angkasa cukup baik, dan tidak menghabiskan bandwidth internasional kita, sehingga kita menggunakan repo angkasa sebagai repo lokal, tetapi sekarang tidak update, sehingga kita harus mencari cara agar bisa menghemat bandwidth ini. Diputuskan akhirnya untuk membuat repo lokal di kantor, diatas VM dengan mengcopy dari fedora root mirror. Hal ini untuk membantu mengurangi beban ke koneksi luar kantor (internasional), sehingga hanya berputar di dalam saja. Tetapi, kita tidak bisa mengikuti standar fedora untuk menyediakan 3-5TB HDD hanya untuk Repo saja, sehingga saya pun mencari-cari cara untuk mengatasi hal tersebut.
Usut punya usut, kita dapat melakukan rsync langsung ke server repo Fedora dimanapun yang merupakan public repo, dan mengambil versi fedora yang kita perlukan. Saya pun melakukan testing dengan meng-rsync server tersebut 1 per satu. Ternyata server public Tsinghua, Yamagata, dan Dogado, cukup cepat untuk di RSync dari jaringan kantor. Total storage yang dibutuhkan hanya 160gb untuk fedora 37 Everything dan Modular (standar fedora untuk paket server).
Langkahnya langkah membuat repo lokal fedora adalah sebagai berikut
- Buat sebuah folder di /repo/fedora dan pastikan storage tersedia diatas 160gb, 250gb an lah.
$ sudo mkdir -p /repo/fedora
$ sudo mkdir -p /repo/fedora/releases/37/Everything/x86_64
$ sudo mkdir -p /repo/fedora/updates/37/Everything/x86_64
$ sudo mkdir -p /repo/fedora/releases/37/Modular/x86_64
$ sudo mkdir -p /repo/fedora/updates/37/Modular/x86_64
- Install web server nginx (sangat cocok untuk file static), silahkan gunakan apache, tetapi konfigurasi samakan dengan nginx. Hapus file index.html nya di nginx. Karena file index.html tidak diperlukan.
$ sudo dnf install nginx
$ sudo systemctl enable --now nginx
$ sudo rm -rf /usr/share/nginx/html/index.html
- Aktifkan autoindex di nginx, agar bisa di test lihat isi folder nya apa saja
$ sudo vim /etc/nginx/nginx.conf# cari bagian http, lalu pasangkan autoindex disana
#... output dihilangkan jangan diCOPAS ....
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
autoindex on; # tambahkan ini! show all folder and content
#... output dihilangkan jangan diCOPAS ....
Jika sudah restart service nginx nya
$ sudo systemctl restart nginx
- Lanjutkan dengan mengarahkan folder fedora di repo ke folder nginx di /usr/share/nginx/html/fedora dan ubah agar SELINUX nya menjadi httpd_sys_content_t untuk folder nya dan di restore context dengan context yang baru. Jika tida dilakukan, nanti pasti error 403, harus check audit.log, saya tidak akan bahas lebih jauh, karena diluar scope tutorial ini.
$ sudo ln -s /repo/fedora /usr/share/nginx/html/fedora
$ sudo semanage fcontext -a -t httpd_sys_content_t '/repo/fedora(/.*)?'
$ sudo restorecon -Rvv /repo/fedora
Lalu test dengan
$ curl http://localhost/fedora
Maka akan dapat isinya berupa folder nginx kosong atau ada folder 50x atau 40x dan lain nya jika berhasil. Jika 403, coba check log di
/var/log/nginx/error.log
. Jika forbidden, maka… SELINUX nya belum benar. - Jika semua sudah selesai, maka sekarang adalah bagian copy paste script yang ada. Buatlah sebuah script di /root/manual-sync.sh dengan vim atau text editor lain, isinya adalah
#!/bin/bash
echo "Sync Releases - Everything ================ "
/usr/bin/rsync -avz --exclude=debug/ --exclude=iso/ --stats rsync://ftp.yz.yamagata-u.ac.jp/pub/linux/fedora-projects/fedora/linux/releases/37/Everything/x86_64/ /repo/fedora/releases/37/Everything/x86_64/
echo "Sync Releases - Modular ================ "
/usr/bin/rsync -avz --exclude=debug/ --exclude=iso/ --stats rsync://mirror.dogado.de/fedora/linux/releases/37/Modular/x86_64/ /repo/fedora/releases/37/Modular/x86_64/
echo "Sync Updates - Everything =============== "
/usr/bin/rsync -avz --exclude=debug/ --exclude=iso/ --stats rsync://mirrors.tuna.tsinghua.edu.cn/fedora/updates/37/Everything/x86_64/ /repo/fedora/updates/37/Everything/x86_64
echo "Sync Updates - Modular =============== "
/usr/bin/rsync -avz --exclude=debug/ --exclude=iso/ --stats rsync://mirror.dogado.de/fedora/linux/updates/37/Modular/x86_64/ /repo/fedora/updates/37/Modular/x86_64/
Jika sudah, ubah agar script nya bisa di execute, dengan perintah
$ sudo chmod +x /root/manual-sync.sh
dan lakukan sync nya dengan menjalankan script nya
$ sudo /root/manual-sync.sh
Tunggu hingga script nya mensync semua data dari repo upstream fedora. Jika anda membutuhkan versi berbeda, silahkan buat folder berbeda dengan versi berbeda. lalu copas code nya untuk di versi berbeda di nomor 37 misal jadi 36, 35, atau 34. - Jika sudah, maka Lakukan konfigurasi untuk mengarahkan server fedora nya ke local repo yang kita punya, dengan mengedit file
- /etc/yum.repos.d/fedora.repo
- /etc/yum.repos.d/fedora-modular.repo
- /etc/yum.repos.d/fedora-updates.repo
- /etc/yum.repos.d/fedora-updates-modular.repo
Mark out/comment bagian metalink=*, lalu aktifkan baseurl=*, dengan mengarahkan ke IP server nya. Contohnya :
/etc/yum.repos.d/fedora.repo:
baseurl=http://192.168.10.10/fedora/releases/$releasever/Everything/$basearch/os/
/etc/yum.repos.d/fedora-modular.repo:
baseurl=http://192.168.10.10/fedora/releases/$releasever/Modular/$basearch/os/ /etc/yum.repos.d/fedora-updates-modular.repo:
baseurl=http://192.168.10.10/fedora/updates/$releasever/Modular/$basearch/
/etc/yum.repos.d/fedora-updates.repo:
baseurl=http://192.168.10.10/fedora/updates/$releasever/Everything/$basearch/
- Jika sudah, maka coba update dengan menjalankan
dnf update
Link kan file /root/manual-sync.sh pada /etc/cron.hourly/manual-sync.sh dengan perintah
$ sudo ln -s /root/manual-sync.sh /etc/cron.hourly/manual-sync.sh
Dengan menjalankan langkah tersebut, maka anda telah berhasil membuat mirror local fedora plus mengarahkan server/client mengarah ke repo fedora tersebut. Semoga berguna bagi siapapun yang membutuhkan repository lokal untuk menghemat bandwidth.
Leave a Reply. I will come back and maybe we can have some conversation 🙂