Робимо свій власний dropbox

Пре-жде всього, хо-чу за-ме-тить, що дан-ва ста-тя без пе-тен-ду-ет ні на уні-каль-ність, ні на тих-но-ло-гі чого ские ін-но-ва-ції тим бо-леї - ис-поль-зо-вать ми бу-дем все го-то-ше. Про-сто в ка-кой-то мо-мент мені ста-ла ін-терес-на ті-ма со-зда-ня своїх-е-го соб-ного-но-го ана-ло-га Dropbox -а, Поет-му я ре-шив по-де-лити-ся з ва-ми ре-Зульте-те, ко-то-рий мож-но ис-поль-зо-вать ис-лю-чи-тель-но для ті -стов або даль-ней-ших раз-пра-цю-ток. Ні я, ні со-зда-ті-ли unison ні-чо-го вам га-ран-ти-ро-вать НЕ мо-жем, але про це трохи ні-же. Хто не в курей-се, Dropbox - ве-ли-ко-леп-ней-ший стар-тап з усіх ни-ні су-ще-ству-ю-чих, поз-по-ля-ет син-хро-ні -зі-ро-вать свої файли з уда-льон-ним збе-ні-ли-щем в об-ла-ках Amazon S3. Аб-со-лют-но біс-плат-но мож-но по-лу-чить 2GB, а якщо за-регі-стри-ро-вать-ся по мо-їй ре-фе-раль-ний посиланн-ке. то нам обо-їм ще на десятки-ні по 250MB. Вро-де і ме-лочь, а при-ят-но. Ре-кла-ма рекла-мій, але так-вайте перейдемо до тих-ні-чо-ско-му опи-са-нию.

Де-лать свій ал-го-ритм для diff з по-сле-ду-ю-щим push-pull через ме-ні-ний ми не бу-дем - це складність але і біс-пер-спек-тів- але, а візь-мем ми го-то-ше ре-ху для син-хро-ні-за-ції ло-каль-ної і уда-льон-ної ді-рек-то-рії під на-зва- ні третьому Unison. Дуже, кста-ти, чи не-пло-хое ре-ху, кро-сплат-фор-мен-ве, з-бра-но під windows, linux і macos, про-стое в на-буд-ке і до -ста точ-но б-ладі. Є, прав-да, і свої недо-стат-ки, при пере-имено-ва-ванні файлу в local folder йде уда-ле-ня його на remote ді-рек-то-рії з по-сле-ду-ю -щей пе-різу-лів-кою, воз-мож-но, це якось ле-чит-ся на-строй-ка-ми, при по-верх-ності-му про-чте-ванні я подоб-ний ін-фор-ма-ції нема на-йшов. Unison тре-бу-ет на-відмінність бі-нар-ні-ка на клі-ен-ті-сер-ве-ре (важ-ний мо-мент, вер-сії зо-за-тель-но поса-ни сов -па-дати) і мо-же пра-цю-ва-ти в ві-де со-кет-де-мо-ну (не під-хо-дить нам з со-про-ра-же-ний без-небез-но -сті, від-сут-ству-ет аутен-ти-фі-ка-ція), по-верх rsync або ssh. Ми бу-дем ис-поль-зо-вать по-слід-ний ва-ри-ант для зруч-ства огра-ні-чо-ня до сту-па, від-сут-ності проблем з пра-ва-ми до сту-па, без-небез-ної пере-да-чи і ку-чи дру-гих пре-иму-вин, ко-то-які так-ет нам secure shell protocol. Сле-ду-ю-щая працю-ність з-сто-ит в тому, що usinon тре-бу-ет бі-нар-ник openssh клі-ен-ту для сво-їй пра-цю-ти, а ми в на -коштують-я-щий мо-мент пі-шем клі-ент для windows, не за-б-вайте. Ра-зу-ме-ет-ся, ні-що ні ме-ша-ет взяти cygwin Ґміна Скомпе-ли-ро-ван-ву вер-сю, але вона у ме-ня якось кри-під ра-бо- та-ла, не під-дер-жи-ва-ла ін-тер-ак-тив-ву ав-то-ри-за-цію ло гі-ном і па-ро-лем, і не так-ва ла ло гі нитка-ся че-рез rsa_key, розповів-зи-вая про insecure file permission, тре-буя chmod-ить його в 0600, а як, про-сти-ті, я це в ок-нах сде- гавкоту? Бла-го, су-ще-ству-ет на-тив-ва CLI вер-сія PuTTY SSH Client під на-зва-ні-му Plink.exe, до то рую ми і бу-дем ис-поль-зо -вать. Пря-мій пере-имено-ва-ня plink.exe в ssh.exe пра-цю-ва-ти НЕ бу-дет, plink не під-дер-жи-ва-ет НЕ-ко-то-які атрі-бу-ти і від-ва-ли-ва-ет-ся з ошиб-кою. В ін-тер-ні-ті б-ла найде-на оберт-ка, ко-то-раю ис-прав-ляет дан-ний недо-ста-ток. Це звичайні-ний bat файл, його со-дер-жа-ня мож-но по-смот реть. Все, ті-перь ні-чо-го не мен-ша-ет вам ис-поль-зо-вать дво-сто-роннюю син-хро-ні-за-цію з по-мо-гою ко-мих фахівців unison.exe C: \ local \ path \ ssh: //host.com/remote/path/ -batch -sshcmd ssh2plink.bat -sshargs "-pw mysshpass -l mysshlogin". Якщо ви пере-жи-ва-е-ті за без-небез-ність, то мож-но на-будувати і passwordless ав-то-ри-за-цію. Для це ге-ні-ри-руй-ті ключ на сер-ве-ре, кон-вер-ти-руй-ті його в ppk фор-мат, ко-то-рий ис-поль-зу-ет PuTTY, c по-мо-гою PuTTYgen і го-во-ри-ті Plink-у ис-поль-зо-вать цей файл че-рез -sshargs "-i pathtomykey.ppk -l mysshlogin".

На цьому ка-за-лось би мож-но б-ло за-кон-чить, але ми ж хо-тім ана-лог дропбок-са, весь кайф ко-то-ро-го за-клю-ча-ет- ся в immediate synchronization: відкритому-файл, від-ре-дак-ти-ро-ва-ли його, збереженні-ні-ли і він сра-зу ж про-толк-нул-ся на сер-вер. Ось тут нам не обой-тись вже без клі-ен-та, пі-описати його ми бу-дем на Microsoft Visual C # Express. Як і че-му? Так про-сто мені так зруч-но, до то-му ж в ньому стандартно-ча-нию є все необ-хо-ді-мі нам инстру-мен-ти. Ос-нов-ні клас-си, ко-то-які ми бу-дем ис-поль-зо-вать: System.Diagnostics.Process для пра-цю-ти з unison.exe і його StandardOutput (ко-то-рий по-че-му-то у ме-ня отда-вал-ся в StandardError, що не-смот-ря на 0 ExitCode про-цес-са), System.IO.FileSystemWatcher для від-сле-жи-ва-ня з -ме-ні-ний в ді-рек-то-рії і System.ComponentModel.BackgroundWorker для пра-цю-ти в фо-ні. На-ки-сан-ний на ско-рую ру-ку код ви-гля-дит сле-ду-ю-щим об-разом. Ну або ось весь проект для збирання-ки. А ось го-то-вий бі-нар-ник. Як і вто-рюсь, все це де-ла-лось на ско-рую ру-ку, але мо-же стати ба-зою для нор-маль-но-го проек-ту, якщо вам це так ін-терес-но . Так, кста-ти, usinon під-дер-жи-ва-ет мульти-клі-ент-ву син-хро-ні-за-цію з то-по-ло-гі-їй ві-да звез-да, так що, якщо до-ба-вить таймер для син-хро-ні-за-ції, то тут вам і мож-ли-ність пра-цю-ва-ти це-лим кодлом над од-ним файлом, прав-да я подоб- ве не ті-сти-ро-вал.

Та-ким об-разом, для на-буд-ки сво-е-го сер-ве-ра син-хро-ні-за-ції вам ну-дружин уда-льон-ний linux \ freebsd сер-вер з ру- тому або хо-тя б мож-ли-но-стю з-бі-рать бі-нар-ні-ки, оди-на-кові вер-сії unison на про-их кон-цах (до-ста-точ-но x.xx.000, вер-сія біл-да 000 ні-що не впливав-ет на сов-ме-сти-ність), оберт-ка для від-сле-жи-ва-ня через ме-ні-ний і ви по-лу-ча-е-ті свій ана-лог Dropbox. Я по-дру-рюсь, ана-лог, ко-то-рий ви-пол-ня-ет лише 50% функ-цій кричи-ги-на-ла, але тим не ме-неї мо-же стати за-ме -ної лю-дям, ко-то-які не до-ве-ря-ють свої файли-ки ні-ко-му, а весь / home у них Монті-ру-ет-ся в EncFS.

Що робити, якщо ви все прочитали і вам сподобалося? Можете подивитися мої інші статті в архіві чи поділитися посиланням в фейсбуці. твіттері або в контакті.

Схожі статті