Bu yazıların sonunda “Android ve Ben” konulu bir kitap çıkacak diye korkmaya başladım. Ama bu serinin en başında uzun uzun yazmıştım bu mecranın benim için önemini. Neyse efendim yazının bu bölümünde Android telefonumuzun üzerindeki dosyaları Samba ile ağda paylaşmaktan bahsedeceğim biraz.
Öncelikle bu konuya nerden geldim onu anlatarak başlayayım. Telefon kurcalamak konusunda, (aslında elektronik cihazları kurcalamak konusunda) bir saplantım olduğu gerçeği ışığında etrafta konuyla ilgili materyal aramakla ve bulduğum değişik uygulamaları kurcalamakla zamanımı geçiriyorum genelde. Bunu yaparken telefona dosya göndermek, almak ve çok sık olmasa da bazı durumlarda sistem dosyalarına erişmek gibi ihtiyaçlarım oluyor malum. Bu dosya işlemlerini ilk başlarda USB kablosu üzerinden yaptım fakat tak-sök ve ek zaman kaybından sonra bir süre bluetooth’a geçtim. Fakat bluetooth da hız konusunda maalesef yüzümü güldüremedi. Hepsinin ötesinde iki yöntemde de sistem dosyalarına erişmek oldukça sorunlu bir durum. Bu topyekün sıkıntı birinci başlık olarak kalsın burada.
Devam edelim, bu tip telefon modifikasyonlarını yapmaya başlamadan önce CWM ile mutlaka bir full backup alıyorum her ihtimale karşı. Ancak en son backup’dan sonra farkettim ki backup boyutum 2 GB’ın üzerine çıkmış. Daha önce bahsetmedim fakat Android işletim sisteminde kullanıcı ve sistem uygulamaları ile bu uygulamaların yarattığı dosyalar ayrı bir disk bölümünde tutuluyor. Bu bölüme kullanıcı olarak (root değilseniz) erişmeniz mümkün değil. Bu bahsettiğim backup işlemi de bu ayrı disk bölümünün bir yedeklemesi aslında. O yüzden bu büyüyen backup boyutu benim çektiğim videolar resimler ve telefona attığım müziklerden değil tamamen kurduğum uygulamalar ile o uygulamaların yarattı dosyaların boyutu bir bakıma.
Bu noktada oyunları kapsam dışı tutuyorum çünkü yüklü data kullanan oyunlar sadece motorlarını bu bölümde tutarken oyun içerisinde kullandıkları dosyaları (texture’lar modeller vs.) kullanıcı dosyaları içerisine (sdcard, external sdcard) koymaktalar.
Bu halde 2 GB’lik backup dosyasının içini açıp neyin çok yer tuttuğunu öğrenmem mümkündü ama içerisinde binlerce minik dosya olan bir kocaman tar dosyasının açılmasını izlemeye çok tahammülü olan bir insan değilim maalesef. Buraya kadar anlattıklarımda topyekün ikinci başlık olsun.
Uzun vadede birinci, kısa vadede ikinci başlık nedeniyle telefona (ve özellikle sistem klasörüne) direkt erişebileceğim (tercihen kablosuz) bir çözüm bulmam gereği hasıl oldu. Aslında telefon üzerinde ikinci konuda bana veri sağlayacak tool’lar var ancak hiç birisinden tam verim alamadım. Baba yadigarı TreeSize ile bu dosyaları bir seferde raporlayıp gereksiz verileri uçurmam gerekliydi.
Biraz konu üzerine araştırma yaptığımda (beni çok da saşırtmayarak) samba‘nın çoktan android tarafa port edildiğini gördüm. Samba linux’la fazlaca haşır neşir olduğum öğrencilik zamanlarından çok iyi hatırladığım bir windows implementasyonuydu. Basitçe (vakti zamanında) linux için windows dosya paylaşım protokolünü implemente etmekteydi. Zaman içerisinde daha geniş bir yelpazede hizmet etmeye başlamış gördüğüm kadarıyla resmi sitesinde ama bana bu temel görevi gayet yeterli olur.
Telefonumdaki dosyalara windows paylaşımına erişir gibi erişmek benim bu iki sorunumu da güzelce çözer mutlaka. Samba’nın Android tarafındaki gelişimini araştırınca hemen karşıma şu uygulama çıktı. Bir önceki OpenVPN yazımda olduğu gibi mevcut kodların android tarafına port edilmesi ve basit bir arayüz ile sunulması işini bu uygulama fazlası ile karşılamakta.
Uygulamayı biraz kurcalayınca, default olarak sadece /sdcard/ yolunu paylaştığını gördüm. Yani sistem dosyalarına erişmem bu noktada çok da mümkün olamıyor. Biraz uygulamanın dosyalarını (\data\data\com.funkyfresh.samba\files) root explorer ile kurcalayınca baba yadigarı smb.conf dosyasını buldum. Bu zamanında samba’yı konfigure etmek için kullandığımız ana konfigurasyon dosyası idi. Normal şartlarda bu dosyayı editleyerek istediğim klasörleri paylaşıma açabilmem lazım. Ancak dosyanın başında peşin peşin belirtilmiş ki:
# Manual edits of smb.conf are not supported.
Bu halde, uygulama arabiriminde yapılan ayarlara göre bu dosyayı yeniden generate ettiğinden bu alanda değişikliğin çok bir faydası olmayacak. İkinci bir konfigurasyon dosyası tanımlaması şart oluyor bu durumda. Bu dosyau tanımlamak daha doğrusu samba’nın bu ikinci dosyayı da konfigurasyon amacıyla kullanması için samba’nın çalışma script’ini biraz kurcalamak lazım. Araştırma üzerine araştırma derken şu yazıya rastladım.
Tahmin ettiğim gibi önce startup scriptini editleyerek ikinci bir conf dosyası tanımlayıp ardından bu dosyayı istediği gibi düzenlemeyi ve bir çok farklı klasörü paylaşıma açmayı başarmış. Burada ikinci conf tanımlamayı “cat” (concatenate) komutu ile conf dosyalarını birleştirerek yapmış. Bunun için önce samba-rc dosyasını editleyerek çalışma anında smb.conf2 dosyasını smb.conf dosyası ile birleştirmiş. Ardından smb.conf2 dosyasını tıpkı smb.conf gibi düzenlemiş.
Bu yazıdan hareketle uygulamanın data dosyaları arasında bulunan samba-rc script dosyasının bir yedeğini aldıktan sonra dosya içerisinde start case’i altına
cat $PRE/smb.conf2 >> $PRE/smb.conf
satırını ekledikten sonra, aynı klasöre smb.conf2 dosyası yaratıp içeriğini şu şekilde düzenledim:
[System] vfs objects = fake_perms comment = Android / path = / force user = root read only = no writable = yes guest ok = no
kaydedip uygulamayı çalıştırdıktan sonra dosya paylaşımını başlatıp telefona bir windows paylaşımına bağlanır gibi, uygulamada belirlediğim kullanıcı adı ve şifre ile bağlandığımda System adıyla tüm sistem klasörünün paylaşımda olduğunu gördüm. Bu paylaşımı bir windows paylaşımı gibi kullanarak Treesize ile tüm sistem klasörülerini taratıp neyin en fazla yeri kapladığını öğrenip konuyu burada noktaladım.
Özet olarak Android tarafının ne kadar geliştirmeye ve kontrole açık olduğunu çok iyi gösteren bir örnek oldu sanırım yukarıda uzun uzun anlattıklarım. Bunun ötesinde açık kaynağın nasıl sorunlara anında merhem olabileceğini de gösterdi biraz. Burada hem samba hem android kapalı birer kutu oldukları durumda böyle bir genişletme hayalden öteye geçemezdi kesinlikle. Bu son cümleyle IOS tarafına selam ederek kapatmış olalım konuyu :)

Post a Comment