3 puan yazan GN⁺ 2024-04-17 | 1 yorum | WhatsApp'ta paylaş
  • BTFS, .torrent dosyalarını veya magnet linkleri dosya ağacında salt okunur bir dizin gibi bağlayıp kullanmayı sağlayan bir BitTorrent dosya sistemidir
  • Dosya içerikleri, uygulama okuduğunda isteğe bağlı olarak indirilir; ls, cat, cp gibi standart araçlar beklendiği gibi çalışır
  • vlc, mplayer gibi uygulamalar da değişiklik gerektirmeden çalışabilir; böylece torrent içerikleri normal dosyalar gibi ele alınabilir
  • Debian/Ubuntu, Arch Linux, Gentoo, Fedora, Fedora OSTree, OpenSUSE ve macOS için paket kurulum yöntemleri sunar
  • Linux bağımlılıkları fuse3, libtorrent ve libcurl’dür; kaynaktan derleme autoreconf, configure, make akışını kullanır

BTFS ne yapar

  • BTFS, .torrent dosyalarını veya magnet linkleri bağlayarak dosya ağacı içinde salt okunur bir dizin gibi kullanılabilmelerini sağlar
  • Dosya içerikleri, uygulama gerçekten okuduğunda isteğe bağlı olarak indirilir
  • Standart dosya sistemi araçları aynen çalışır
    • ls
    • cat
    • cp
  • Uygulamalar da değişiklik gerektirmeden kullanılabilir
    • vlc
    • mplayer

Temel kullanım akışı

  • Bağlama dizini oluşturup torrent dosyasını bağladıktan sonra, dizindeki dosyayı normal bir dosya gibi çalıştırırsınız
$ mkdir mnt
$ btfs video.torrent mnt
$ cd mnt
$ vlc video.mp4
  • Bağlantıyı kaldırma ve çıkış fusermount ile yapılır
$ fusermount -u mnt

Paket kurulumu

  • Debian/Ubuntu’da apt-get ile kurulur
# apt-get install btfs
  • Arch Linux’ta pacman ile kurulur
# pacman -S btfs
  • Gentoo’da emerge ile kurulur
# emerge -av btfs
  • Fedora’da dnf ile fuse-btfs paketi kurulur
# dnf install fuse-btfs
  • Fedora OSTree’de rpm-ostree ile fuse-btfs kurulur
$ rpm-ostree install fuse-btfs
  • OpenSUSE’de zypper ile kurulur
# zypper install btfs
  • macOS’te brew kullanılır
$ brew install btfs

Linux bağımlılıkları

  • Linux’ta gereken bağımlılıklar şunlardır
    • fuse3: Ubuntu 22.04’te fuse3
    • libtorrent: Ubuntu 22.04’te libtorrent-rasterbar8
    • libcurl: Ubuntu 22.04’te libcurl4

Kaynaktan derleme

  • Güncel Debian/Ubuntu’da derleme bağımlılıklarını kurduktan sonra depoyu klonlayıp autoreconf, configure, make çalıştırılır
$ sudo apt-get install autoconf automake libfuse3-dev libtorrent-rasterbar-dev libcurl4-openssl-dev g++
$ git clone https://github.com/johang/btfs.git btfs
$ cd btfs
$ autoreconf -i
$ ./configure
$ make
  • Kurulum da isteniyorsa ek olarak make install çalıştırılır
$ make install
  • macOS derlemesinde bağımlılıklar brew ile kurulduktan sonra aynı derleme akışı kullanılır
$ brew install --cask macfuse libtorrent-rasterbar autoconf automake pkg-config
$ git clone https://github.com/johang/btfs.git btfs
$ cd btfs
$ autoreconf -i
$ ./configure
$ make
  • macOS’te de kurulum gerekiyorsa make install çalıştırılır
$ make install

1 yorum

 
GN⁺ 2024-04-17
Hacker News yorumları
  • Bununla birlikte çalışan bir sunucu programı olsa iyi olurdu. Torrent dosyası oluşturucu, tracker ve basit dosya sunucusu görevlerini bir arada yapan bir şeyden söz ediyorum.
    Büyük kuruluşlarda sunucuya muazzam miktarda herkese açık veri konup, veri her değiştiğinde torrent oluşturulabilir; .torrent dosyaları HTTP üzerinden sunulurken aynı zamanda tracker görevi de görülebilir. FUSE istemcisinin etrafına, sunucudaki yeni torrentleri algılayıp yeniden yükleyen/bağlayan basit bir mantık sarmalamak yeterli olur.
    Uzun zaman önce bankalar için bir Linux dağıtımı yapmıştım. Ubuntu NetBoot tabanlıydı ve şube masaüstleri için yalnızca asgari paketleri içeriyordu; şubelerde sunucu olmadığı için dağıtım kendi kendini seed ediyordu. Switch’te yalnızca wake-on-lan ve PXE ayarlıysa, tek bir makineyle binadaki yüzlerce makineyi oldukça kısa sürede klonlayabiliyorduk; yeni klonlar da seed olabiliyordu.
    İçeride nginx ile özel bir Ubuntu deposu sunuyor, tftp/inetd ve wackamole çalıştırıyorduk. Bir makine kurulunca “sunucu”dan torrenti indirip transmission’a ekliyordu; tamamlandıktan sonra o makine de seed olup wackamole, inetd, nginx, tracker vb. çalıştırıyordu. Başta 10 makineyi kararlı şekilde seed ediyor, hepsi ayağa kalkınca daha fazla makineyi uyandırıyorduk.
    Yüzlerce banka şubesine birkaç hafta içinde 8000 makineye imaj dağıttık; gecikmenin büyük kısmı değişiklik yönetimi ve kademeli dağıtım planından kaynaklanıyordu. Aslında en zor kısım, mevcut Linux derlemesi üzerinden her şubeye ilk seed’i indirtmek ve bunlardan birini seed makinesi olarak kullandırmaktı. 350’den fazla şubede yetersiz hatlarla, bazılarında 256kbps ISDN üzerinden ilerledik.

    • İlginizi çekebilecek bir özellik; bildiğim kadarıyla yalnızca AWS S3 bunu uygulamış gibi görünüyor: https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjec...
      Gerçekten kullanmış değilim, bu yüzden AWS’nin oluşan .torrent içine kendi tracker’ını koyup koymadığını bilmiyorum.
    • Veri kümesi her güncellendiğinde yeni torrent oluşturulursa, istemci değişmeyen verileri de yeniden aktarmak zorunda kalmaz mı?
  • Bu aracın BitTorrent v2’nin yeni özelliklerini kullanacak şekilde yükseltilmesi gerekiyor.
    https://blog.libtorrent.org/2020/09/bittorrent-v2/
    Özellikle dosya bazlı hash ağacı ve dizin yapısını mümkün kılan Merkle hash ağacı önemli.

    • BitTorrent v2’yi öğrendiğimden beri çevrimiçi dosya bazlı bir indeks oluşmasını bekliyorum. Diskimdeki büyük medya dosyalarının çoğu için, şu anda BitTorrent swarm’larında kaç kopya bulunduğunu etiketleyebilsem iyi olurdu.
      Böylece aynı kopyayı daha sonra kolayca yeniden indirebileceğimi bilerek büyük dosyaları daha rahat silebilirdim. Eskiden IPFS ile benzer bir şey denemeye çalışmıştım ama iyi sonuç vermedi ve yinelenen dosyaları da bulamadı.
  • “Bozulmuş” medya dosyalarını onaran bir BTFS olsa iyi olurdu. Örneğin diskte çizik yüzünden bazı kısımlar eksikse ya da seçtiğim codec seçenekleri pek iyi olmayan bir medyaysa, yalnızca bozuk kısımları indirip sorunsuzca onarması gibi.

    • Tam olarak aynı şey değil ama eskiden her yıl yüzlerce CD rip’lediğimiz dönemlerde çok kullanılan AccurateRip aklıma geldi.
      http://www.accuraterip.com/
    • Bunu sağlayan bir dosya sistemi neden kullanılmasın? ZFS de var, depolama da ucuz.
    • Başka bir kullanım da medyayı kendi arşivime aldıktan sonra paylaşmak. Sahip olduğum tüm medyaların hash’lerini gönüllü olarak tarayıp, akıllı bir torrent istemcisi yalnızca bu dosyaları sunabilseydi nadir medya dosyalarını seed etmekte çok yardımcı olurdu.
      Gereksiz dosyaları her zaman sildiğim için kısmi torrent biçimine ihtiyaç var.
    • Dosya bozulmuşsa arama için kullanılacak hash nasıl hesaplanacak?
    • Usenet’te yapıldığı gibi gerçek dosyayla birlikte parite dosyaları dağıtılsa olmaz mı? Usenet’in kendisi de neredeyse bu şekilde çalışıyor.
      NNTP dosya sistemi uygulaması düzgün çalışıyor mu bilmiyorum ama nzbfs de var: https://github.com/danielfullmer/nzbfs
  • Bunun daha yaygın kullanılmamasına şaşırdığım için paylaşıyorum. Sanal makineler ya da işletim sistemleri BTFS üzerinde overlay olarak oluşturulamaz mı? İlginç bir yön gibi görünüyor.

    • Daha geçen hafta dizüstü bilgisayarımda Nix ile PXE boot imajları oluşturdum, bunları IPFS’e yükledim ve başka bir ülkedeki sunucumu herkese açık IPFS mirror’u üzerinden ağdan boot ettim.
      Boot sırasında initrd salt okunur overlayfs olarak mount ediliyor. Yapılandırmayı herkese açık tuttum: https://github.com/jhvst/nix-config
      Daha sonra PXE router ayarları da dahil olmak üzere IPFS sürecinin dokümantasyonunu https://github.com/majbacka-labs/nixos.fi adresine yazmayı planlıyorum. Bu süreci denemek isteyenler için Flake yapılandırmasına yönelik küçük bir herkese açık build sunucusu da çalıştırabilirim.
    • Overlay sağlayıcısının kendisi değil ama uber/kraken, “saniyeler içinde TB ölçeğinde veri dağıtabilen P2P Docker registry”dir. Docker imajlarını büyük ölçekli kümelere BitTorrent protokolüyle iletir.
      https://github.com/uber/kraken
    • CVMFS bu alanda olgun bir seçenek ve fizik topluluğunda yazılım ile container imajlarını dağıtmak için yaygın kullanılıyor. Hesaplama kaynaklarının basit ve verimli şekilde paylaşılmasını sağlıyor.
      https://cernvm.cern.ch/fs/
    • Meseleyi pek anlamadım. Dosyaları anında indiren salt okunur bir dosya sistemi havalı, ama çoğu durumda pratik gelmiyor.
    • Ara sıra biri Bell Labs’in Plan 9’ını yeniden icat ediyor.
  • Internet Archive içeriğine erişmek için mükemmel bir istemci. IA’daki her öğeye, IA’nın web seed’lerini içeren bir torrent otomatik olarak ekleniyor. Big Buck Bunny ile deneyebilirsiniz
    btfs https://archive.org/download/BigBuckBunny_124/BigBuckBunny_1... mountpoint

    • IA’nın iç yapısını ve BitTorrent yapısını bilmiyorum, ama bir arşiv öğesinde çok fazla dosya varsa hepsi torrent dosyasına sığmıyor
      ROM paketlerinde veya dergi arşivlerinde bunu sıkça görüyorum. Öğe sayısı 1000’i aşarsa torrentte genellikle yalnızca ilk yaklaşık 200 öğe oluyor
    • Daha iyi yöntem şu:
      btplay https://archive.org/download/BigBuckBunny_124/…
  • İlgili yazılar:
    BTFS – mount any .torrent file or magnet link as directory - https://news.ycombinator.com/item?id=23576063 - June 2020 (121 comments)
    BitTorrent file system - https://news.ycombinator.com/item?id=10826154 - Jan 2016 (33 comments)

  • Daha da ileri gidip verileri tam metin arama dizini içeren bir sqlite dosyası olarak saklamak iyi olur. Böylece torrentlerde gerektiğinde tam metin araması yapabilirsiniz: https://github.com/bittorrent/sqltorrent

  • 4 yıl önceki tartışma:
    https://news.ycombinator.com/item?id=23576063

  • 2020’deki 121 yorumlu önceki başlıkta saurik’in en üstteki yorumu, bu durumla ilgili hislerimi iyi özetliyor: https://news.ycombinator.com/item?id=23580334
    Yani BTFS, IPFS’nin “tek seferde bir CID” sürümü gibi
    IPFS harika, ancak günlük kullanıma uygun hale gelmesi için en az üç alanda büyük ilerleme gerektiğini düşünüyorum. Birincisi, yerel node proxy’si çalıştırmak gerekmemeli. Brave’de WebTorrent desteğinin yerleşik olduğunu duydum, ama Brave kullanmadığım için bunun sadece adının mı WebTorrent olduğunu, yoksa gerçekten öyle mi olduğunu bilmiyorum
    İkincisi, swarm/peer çözümleme gecikmesi “web3 kripto para oyuncağı” türünden acı verici ve bu gecikme yüzünden gezinme eski 14.4k modem günlerindeki gibi hissettiriyor
    Üçüncüsü, IPFS Wikipedia, oyun sürümleri, MDN içeriği gibi nadiren değişen ama çok popüler içerikler için harika. Ancak bir git deposunda gezindiğinizi düşünürsek “tip” ya da “main”i güncel sürüme çevirmek epey zahmetli. Bildiğim kadarıyla en yeni CID’yi çözümlemenin tek yolu IPNS ve DNS, arıza anlarında kolayca birbirine dolanan birçok unsurdan biri haline gelebilen bir mekanizma
    Gönderilen dosya sistemi olmayan başka bir dosya sistemi hakkında gereğinden uzun yazdığımı biliyorum, ama BTFS’yi kuracak gibi değilken bu fikre ilgi duyanların IPFS hakkında daha fazla okuması yerinde olur. Yalnız mevcut sınırlamaları akılda tutmak iyi olur

  • https://github.com/anacrolix/torrent içinde 2013’ten beri bir FUSE sürücüsü vardı. Şimdi onu kaldırmanın ilk aşamalarındalar
    WebDAV, üçüncü taraf FUSE ve HTTP wrapper’ları hepsi benzer işler yapıyor. Magnet linklerini, info hash’leri ve torrent dosyalarını değişmez bir dosya sistemi gibi sunuyorlar. BitTorrent v2 desteği şu anda master’a girmiş durumda