1 poin oleh GN⁺ 4 jam lalu | 1 komentar | Bagikan ke WhatsApp
  • openrsync adalah implementasi rsync dengan lisensi BSD (ISC), dan saat ini telah digabungkan ke base OpenBSD
  • Kompatibel dengan rsync terbaru dan pengujian menggunakan rsync 3.1.3, tetapi dapat berjalan selama mendukung protokol 27
  • Karena tidak menerima seluruh argumen baris perintah rsync, melainkan hanya sebagian argumen, saat menggunakan openrsync dan rsync bersama-sama harus memakai flag yang didukung oleh kedua sisi
  • Sistem operasi yang didukung secara resmi adalah OpenBSD, dan juga disertakan glue portabilitas agar dapat dikompilasi dan dijalankan di sistem UNIX lain
  • Dokumentasi standarnya berupa halaman manual; detail protokol ada di rsync(5) dan rsyncd(5), sedangkan dokumentasi utilitas ada di openrsync(1)
  • Proyek ini ditulis sebagai bagian dari rpki-client(1) untuk OpenBSD, dan didanai oleh NetNod, IIS.SE, SUNET, dan 6connect
  • Instalasi dilakukan di sistem UNIX umum dengan ./configure, make, make install, dan tidak bertabrakan dengan instalasi rsync yang sudah ada
  • Algoritme rsync dibagi menjadi sender dan receiver; sender membuat daftar file sumber dan metadata, lalu kedua sisi mengurutkan nama file secara leksikografis untuk mereferensikan entri berdasarkan posisi
  • Sinkronisasi file biasa akan dilewati jika ukuran file dan waktu modifikasi sama; jika berbeda, data yang berubah direkonstruksi menggunakan hash cepat tipe Adler-32 4-byte dan hash MD4 lambat 16-byte untuk setiap blok berukuran tetap
  • Ukuran blok secara default adalah nilai akar kuadrat dari ukuran total file yang dibulatkan, dengan ukuran minimum 700 B, dan hasil akar kuadrat untuk alasan yang tidak diketahui dibulatkan naik ke kelipatan 8
  • Sesi dibagi menjadi klien yang dijalankan pengguna dan proses server yang berjalan di remote; server dapat dijalankan on-demand melalui ssh(1) atau beroperasi sebagai daemon jaringan yang berjalan terus-menerus
  • Berbeda dengan generator pada rsync yang berjalan sebagai proses terpisah di samping receiver, openrsync menggabungkan generator dan receiver dalam satu proses dan merespons permintaan baca/tulis melalui event loop
  • Dari sisi keamanan, pledge(2) milik OpenBSD membatasi operasi sistem menurut mode eksekusi, dan unveil(2) hanya mengizinkan akses filesystem di bawah direktori tujuan
  • Dalam mode server, seed hash MD4 dibuat dengan arc4random(3), bukan time(3)
  • Dapat diporting ke Linux (glibc·musl), FreeBSD, NetBSD, Mac OS X, dan OmniOS, dan GitHub CI menguji arsitektur x86_64, aarch64, s390x, tetapi kendala utama portabilitas adalah menyesuaikan fitur keamanan yang setara dengan pledge dan unveil milik OpenBSD

1 komentar

 
GN⁺ 4 jam lalu
Komentar Hacker News
  • Penjelasan bahwa jika server jarak jauh adalah sumber atau tujuan, klien membuat child dengan fork(2), lalu memulai server openrsync di host jarak jauh melalui ssh(1), dan setelah itu klien serta server berkomunikasi lewat pipe socketpair(2), terasa ambigu tentang bagaimana tepatnya itu bekerja
    Mungkin maksudnya child hasil fork meneruskan koneksi ke parent melalui sepasang socket, atau menghubungkan stdin/stdout ke “pipe” socket pair lalu exec ssh
    Tapi ini seperti mengatakan pergi ke bandara dengan mobil lalu bilang pergi ke Australia dengan mobil

  • Sejak openrsync diumumkan saya sudah memakainya di sana-sini, dan seiring waktu jelas makin bagus. Saya menantikan saat ia bisa dipakai sepenuhnya
    Namun ada satu hal yang tidak cocok dengan Samba rsync untuk pola penggunaan saya: openrsync --rsync-path=openrsync -av -e ssh /etc/services example.com:/tmp/services
    Perilaku yang saya harapkan adalah membuat file /tmp/services di remote, tetapi yang terjadi justru membuat /tmp/services/services
    Mirroring direktori yang umum seperti -av -e ssh /path/to/src/ example.com:/path/to/dst/ bekerja seperti Samba rsync

    • Perilaku ini tampaknya juga sama dengan rsync “biasa”. Untuk menyinkronkan isinya saja, sepertinya perlu trailing slash setelah services
      Sunting: ternyata rsync “biasa” saya juga adalah openrsync di macOS
    • Kuncinya adalah apakah direktori /tmp/services sudah ada di tujuan
      Salah satu bagian paling membingungkan dari rsync adalah cara menangani direktori dan trailing slash
    • Jika sumber diberi trailing slash, maka yang disalin adalah isi direktori; jika tidak, yang disalin adalah direktorinya sendiri. Setahu saya ini perilaku yang cukup standar di banyak tool POSIX
    • Sebagai seseorang yang sudah tak terhitung lamanya dibuat menderita oleh rsync, saya paham dorongan itu, tetapi membuat services kedua jauh lebih masuk akal dan merupakan default yang lebih aman
      Jika ada kesempatan mengubah default rsync ke arah yang tidak terlalu gila, kita harus menyelamatkan generasi mendatang dari kebingungan ini
  • Melihat lonjakan mendadak commit vibe coding di codebase rsync belakangan ini, lengkap dengan regresi yang ditimbulkannya, ini kabar yang sangat baik

    • rsync selalu kokoh jadi saya sempat mengabaikan komentar ini, tetapi setelah upgrade skrip backup saya benar-benar rusak
      Isu-isu terbaru di GitHub merangkum banyak bug yang masuk dalam 2 patch terakhir, termasuk commit sekitar 9 ribu baris yang tampaknya nyaris tak ada gunanya
      LLM memang membuat penulisan kode jadi lebih cepat dan mudah, tetapi yang selalu penting adalah berpikir. Saya tidak mengerti kenapa perangkat lunak yang sudah setua dan seterpercaya ini malah dirusak
  • Bagi yang butuh latar belakang pengembangan paket ini, proyek ini saat ini sedang dikembangkan sebagai bagian dari validator RPKI
    https://medium.com/@jobsnijders/a-proposal-for-a-new-rpki-va...

  • Ada juga implementasi Go dari Michael Stapelberg / tim Gokrazy: https://github.com/gokrazy/rsync

  • Inti dari pekerjaan porting yang sebenarnya adalah menyamai fitur keamanan yang disediakan oleh pledge(2) dan unveil(2) milik OpenBSD. Keduanya merupakan elemen krusial dari fungsi sistem
    Tanpa fitur-fitur ini, sistem akan menerima data arbitrer dari jaringan publik
    https://justine.lol/pledge/
    Di Alpine Linux edge saya tidak melihat pledge. Apakah ada yang pernah menguji Pledge di Linux? Apakah saya salah memahami risiko memakai openrsync tanpa pledge, atau artikel ini memang hanya untuk pengguna OpenBSD?

    • Linux tidak punya fitur seperti pledge, unveil, atau Capsicum. Yang ada adalah cgroups, namespace, dan berbagai hal lain yang harus digabungkan untuk melakukan hal serupa
      Linux dibangun bukan sebagai fitur isolasi dengan konsep utuh melalui syscall dan path kernel tertentu, melainkan sebagai sekumpulan sistem yang ditambahkan berulang kali lalu saling digabung untuk membentuk sandboxing atau pembatasan kemampuan
      Belakangan tampaknya Linux juga punya fitur baru seperti Landlock, tetapi mungkin itu pun dibangun di atas komponen dasar Linux yang sudah ada alih-alih dibuat benar-benar dari nol
      Kata “berantakan” di sini mungkin berarti tersebar di mana-mana. Terlalu banyak cara untuk mengunci sesuatu, dan memilih mana yang terbaik mengharuskan Anda menggali dalam tiap subsistem, kontras dengan cukup memakai 1–2 syscall sederhana
    • Di atas kutipan itu tertulis: “Satu-satunya sistem operasi yang didukung secara resmi adalah OpenBSD, karena memiliki fitur keamanan yang substansial”
      Dan di bawahnya tertulis: “Mungkin bisa dengan Capsicum milik FreeBSD, tetapi fasilitas keamanan Linux berantakan dan perlu sentuhan ahli untuk benar-benar diamankan”
      Jadi portable di sini berarti bisa dikompilasi dan dijalankan, bukan berarti memiliki fitur keamanan yang sama
      Akan bagus kalau pledge/unveil masuk ke Linux upstream, tapi saya tidak berharap banyak
    • Kutipan itu terlalu menyederhanakan sampai-sampai tampak hampir sepenuhnya salah
      Berbeda dari pernyataan “tanpa fitur-fitur ini sistem menerima data arbitrer dari jaringan publik”, pledge atau unveil tidak mengubah apakah data arbitrer diterima atau tidak. Keduanya membatasi hal-hal yang bisa dilakukan proses yang sudah ditembus kerentanan
      Di bagian Security ini dijelaskan dengan benar, jadi saya tidak tahu dari mana ungkapan itu berasal
  • Versi ini adalah yang dipakai mulai macOS 15.0

    • 15.0 ya? Saya kira ini masuk di salah satu rilis minor seri 15.x, dan saya ingat beberapa skrip rusak tanpa alasan yang jelas
      Sunting: lucunya memang dimasukkan di 15.0, tetapi perubahan yang memutus kompatibilitas mundur sepertinya baru benar-benar dilepas di 15.4. https://apple.stackexchange.com/a/479297
  • Karena belum mendukung protokol rsync terbaru, belum ada dukungan timestamp 64-bit, sehingga pada filesystem baru metadata sebenarnya tidak bisa disinkronkan

  • Saya penasaran kenapa namanya begitu. Openrsync terdengar seperti alternatif open source untuk program closed-source
    Padahal Rsync asli juga GPL, bukan? Apakah maksudnya hanya “lebih terbuka” karena lisensinya lebih permisif?

    • Orang-orang OpenBSD kemungkinan akan menganggap GPL kurang terbuka karena mewajibkan karya turunan juga memakai GPL
    • Di antara proyek-proyek yang dekat dengan OpenBSD memang banyak yang diawali open, seperti openssh, openbgpd, openntpd, opensmtpd