--- title: سینک اندروید بدون گوگل uuid: d7fb9e13-d908-4e4b-b006-eaffb12a36e5 category: راهنما tags: اندروید تمرکززدایی گوشی داده --- طی سالهای گذشته وب روز به روز متمرکزتر از قبل شده. بسیاری از ما عادت کرده‌ایم که داده‌هایمان را روی سرورهای دیگران ذخیره کنیم و آن را فراموش کنیم. اما من داده‌هایم را بدون یک سرور مرکزی سینک می‌کنم. در این مقاله راه‌حلی برای سینک داده‌ها بین اندروید و یک کامپیوتر دیگر به کمک فرمت ‏[DecSync](دک‌سینک) و برنامه‌ی [Syncthing](سینک‌تینگ) معرفی می‌کنم. > مهم: قبل از دستکاری گوشی و بازی با تکنولوژی‌های جدید حتما از داده‌های مهم به هر شکلی که می‌توانید نسخه پشتیبان بگیرید. بارها به سختی گزیده شده‌ام! ## صورت مسئله من می‌خواهم به تقویم و دفترچه‌تلفن گوشی‌ام روی کامپیوترم هم دسترسی داشته باشم و بتوانم آنها را ویرایش کنم. شرطم هم اینست که داده‌هایم روی سرورهای هیچ شرکت گنده‌ای ذخیره نشود. به همین خاطر از سینک اندروید و سامسونگ و مانند اینها استفاده نمی‌کنم. در حقیقت همه آنها روی گوشی من غیرفعال هستند. علاوه بر این می‌خواهم ابزار حل این مشکل اوپن سورس باشد و نیازی به حساب کاربری اینجا و آنجا نداشته باشد. ## عیب شرکت گنده کجاست؟ ذخیره داده روی سرورهای شرکت‌های بزرگ هم عیب دارد هم حسن. بستگی دارد کجا باشید و کارتان چه باشد. من می‌خواهم داده‌هایم پیش خودم باشد نه روی یک سرور در کره جنوبی یا کالیفرنیا یا فرانکفورت. در ضمن می‌خواهم خودم تصمیم بگیرم روی کدام گوشی و پلتفرم آنها را داشته باشم. اگر از گوگل و سامسونگ و ماکروسافت و مانند اینها برای بک‌آپ‌گیری استفاده کنیم محدود به آنها هستم و آزادی عمل ما کاهش پیدا می‌کند. آنها هستند که تصمیم می‌گیرند کجا و چگونه به داده‌ها دسترسی داشته باشیم. آنها روز به روز قوی‌تر می‌شوند و آزادی انتخاب کاربر نهایی کمتر. در حالی که از نظر فنی نیازی به آنها نیست. از همه اینها گذشته باید روی پلتفرم آنها یک حساب کاربری ساخت. حین خواندن حتما به یاد داشته باشید آنچه که من اینجا می‌نویسم از دید یک تعمیرکار است که سرش درد می‌کند برای خراب کردن چیزها! ## روش جاری اول مروری کوتاه داشته باشیم به روش‌های سینک تقویم و دفترچه تلفن اندروید. در حالت عادی اندروید یک تقویم و یک دفترچه تلفن لوکال دارد. اطلاعات گوشی پاک بشود اینها هم از بین می‌روند. وقتی یک اکانت گوگل یا واتس‌آپ یا تلگرام یا مانند اینها روی گوشی نصب می‌شود، این برنامه‌ها می‌توانند به کمک API اندروید درخواست دسترسی به این اطلاعات کنند. آنها سپس این اطلاعات را به سرورهایشان در اینترنت ارسال می‌کنند. مثلا یک اکانت گوگل می‌تواند تقویم و دفترچه تلفن را بین گوشی اندروید و سرورهای گوگل سینک کند که آنلاین هم در دسترس است و خیلی محبوب است (ولی اگر روی گوشی اکانت گوگل نداشته باشید یا نخواهید یا روی پلتفرم شما ساپورت نشود نمی‌توان از این روش و روش‌های مشابه استفاده کرد.) در همه موارد بالا یک قطعه برنامه دائما تقویم و دفترچه تلفن روی گوشی را با یک سرور اینترنتی که معمولا متعلق به یک شرکت غول‌پیکر اینترنتی است سینک می‌کند. اکثر این قبیل برنامه‌ها هم اوپن سورس نیستند و شرکت سازنده طبق اولویت‌های تجاری‌اش تصمیم می‌گیرد برنامه کجا و چگونه ارائه بشود. ## راه حل آلترناتیو راه حل آلترناتیو ما مسئله را با در نظر گرفتن شروطی که ذکر کردیم حل می‌کند. نه تنها بدون بکارگیری سرور مرکزی سینک انجام می‌شود و آزادی عمل ما تامین می‌شود، بلکه ابزارآلات بکاررفته هم همگی اوپن سورس هستند. روشی که به کار می‌گیریم خیلی هوشمندانه و در عین حال بسیار ساده است. پس کمی دقت لازم است تا بفهمیم چطور کار می‌کند. در این روش برای سینک کردن کانتکت‌ها و تقویم گوشی (فعلا فقط اندروید) با کامپیوتر دو برنامه مهم را بکار می‌بریم: ‏[DecSync CC] و سینک‌تینگ. برنامه اول پیاده‌سازی دک‌سینک برای اندروید است. این برنامه یک تقویم و دفترچه‌تلفن قابل سینک لوکال روی گوشی می‌سازد. منظور از قابل سینک ذخیره آن در فرمتی است که برای سینک دوطرفه مناسب باشد (فرمت دک‌سینک) و به اصطلاح conflict free باشد. بدون چنین فرمتی امکان ویرایش دوطرفه وجود نمی‌داشت. کار برنامه دوم هم اینست که همواره داده‌های برنامه اول را سینک کند. در حقیقت سینک‌تینگ هر داده‌ای را بین چند کامپیوتر که ما تعریف می‌کنیم سینک می‌کند و برایش اصلا مهم نیست این داده چیست. برنامه سومی را هم بکار برای مشاهده و ویرایش دفترچه تلفن و تقویم روی کامپیوتر نصب می‌کنیم. این کار را به کمک یک پلاگین اوولوشن بنام [Evolution-DecSync] انجام می‌دهیم. روش کار ما اینجا یک تفاوت بنیادی با سایر روش‌های رایج دارد. عموم برنامه‌های این چنینی مستقیما با یک سرور اینترنتی ارتباط برقرار می‌کنند و داده‌ها را جایی لابلای ابرها ذخیره می‌کنند. در حالی که اینجا ما همه داده‌ها را روی خود گوشی ذخیره می‌کنیم و برنامه سینک ما اصلا قابلیت اتصال به یک سرور اینترنتی را ندارد. بخش سینک داده‌ها به طور جداگانه توسط سینک‌تینگ انجام می‌شود. ## نصب و راه‌اندازی برنامه‌ها در ادامه هر دو برنامه را معرفی و روی یک اندروید و لینوکس نصب و راه‌اندازی می‌کنیم. اول می‌رویم سراغ سینک‌تینگ که بدون آن راه به جایی نمی‌بریم. ### Syncthing سینک‌تینگ برنامه‌ایست که فایل‌ها را به صورت دائمی بین چند نقطه سینک می‌کند. این نقطه‌ها کامپیوترهایی هستند که یک نسخه از سینک‌تینگ روی آنها در حال اجراست. سینک‌تینگ فایل‌ها و پوشه‌هایی را که به آن بدهیم بین تمام این کامپیوترها به صورت دوطرفه و دائم سینک می‌کند. مجموع این سینک‌تینگ‌های در حال اجرا روی کامپیوترهای مختلف وقتی به هم متصل شود تشکیل یک شبکه می‌دهند که فایل‌های ما را همواره بین یکدیگر سینک می‌کنند. مثلا دو گوشی و یک کامپیوتر رومیزی و یک رزبری‌پای می‌توانند شبکه ما را تشکیل بدهند. علاوه‌براین همه این نقل و انتقالات رمزنگاری شده هستند. کل این پروژه هم به همت اولیه یک هکر سوئدی بنام [جاکوب بورگ] ایجاد شده و یک پروژه‌ی شرکتی نیست. > سینک‌تینگ یک برنامه‌ی سینک پیوسته‌ی فایل‌هاست. سینک‌تینگ فایل‌ها را بلادرنگ (real time) بین دو یا چند کامپیوتر، تماما محفوظ از چشمهای کاوشگر، سینک می‌کند. داده‌ی شما تنها داده‌ی شماست و این شما هستید که باید انتخاب کنید کجا ذخیره بشود و اینکه آیا با شخص سومی به اشتراک گذاشته بشود و اینکه چگونه در اینترنت منتقل بشود. -- سایت سینک‌تینگ (ترجمه از من) سینک‌تینگ با زبان برنامه‌نویسی گو نوشته شده است و هرجا که برنامه گو اجرا بشود کار می‌کند یا برایش کامپایل می‌شود، مانند لینوکس و ویندوز و مک و اندروید و رزبری پای. البته اجرا روی آی‌او‌اس هنوز به خاطر [مشکلاتی] هنوز پیاده‌سازی نشده است. به طور ساده سینک‌تینگ دو گروه چیز را به هم وصل می‌کند. تعدادی کامپیوتر و تعدادی فایل. تنظیمات و جزئیات زیاد دارد ولی اصل ماجرا همین است. رابط کاربری نسخه [لینوکس] و [ویندوز] یک برنامه‌ی وب است و روی اندروید [یک اپ]. در [صفحه دانلود سینک‌تینگ] لینک‌های دانلود بیشتری برای سیستم‌های مختلف هست. سینک‌تینگ را که روی یک کامپیوتر نصب و اجرا کنید (با دنبال کردن لینک‌های بالا) و [لوکال‌هاست] را باز کنید صفحه زیر را خواهید دید (البته خالی از فولدر و کامپیوتر): ![Syncthing Image](assets/pimg/syncthing.png) باید برنامه را روی اندروید یا یک کامپیوتر دیگر هم نصب کرد و بعد _Device ID_ یکی از سینک‌تینگ‌ها را به صورت متنی یا از طریق اسکن _QR Code_ به دیگری اضافه کرد. روی کامپیوتر _Device ID_ را در منوی _Actions -> Show ID_ پیدا می‌کنید. در اندروید هم سایدبار. ![Syncthing Android](assets/pimg/syncthing_android.png) برنامه اندروید خیلی خوشدست است. گوشه بالا دست راست یک بعلاوه وجود دارد. در تب کامپیوترها باشید معنایش اضافه کردن یک کامپیوتر جدید به جمیع کامپیوترهای سینک‌تینگی‌تان است و در تب فولدرها که باشید معنایش اضافه کردن یک فولدر جدید برای سینک شدن است. سینک‌تینگ به صورت پیشفرض فولدری بنام _Sync_ را در _User Home_ سینک می‌کند. بعد از نصب، _Device ID_ را از یکی بخوانید و در دیگری کپی کنید. اگر دسکتاپ است در مسیر _Add Remote Device_ و اگر اندروید است در منوی بعلاوه وارد کنید. بعد باید یک مدتی صبر کنید تا سینک‌تینگ دیگر این درخواست را به شما نمایش دهد. بعد از تایید نهایی تازه این‌ها به هم وصل می‌شوند. همین ترتیب نیز باید برای اضافه کردن یک فولدر جدید رعایت بشود. حالا هر زمان این کامپیوترها روشن باشند سینک‌تینگ‌ها یکدیگر را پیدا می‌کنند و فایل‌ها را سینک می‌کنند. برای پیدا کردن یکدیگر در حال حاضر از سروری در اینترنت کمک می‌گیرند ولی انتقال داده‌ها مستقیم انجام می‌شود. اگر علاقه‌مند به جزئیات فنی هستید [مستندات سینک‌تینگ] و بویژه [پروتکل سینک‌تینگ] را ببینید. ### DecSync حالا که فوندانسیون را با سینک‌تینگ ریختیم نوبت سوار کردن دک‌سینک روی آن است. دک‌سینک یک فرمت است که می‌تواند تعدادی کلید و داده‌های مربوط به آنها را به شیوه‌ای فارغ از تضاد و تداخل ذخیره کند. همه آنچه ما اینجا بکار می‌گیریم توسط هکری احتمالا هلندی بنام [آلدو گونسینگ] بوجود آمده. او بر اساس این فرمت برنامه‌های مختلفی نوشته که ما اینجا دو تا از آنها را لازم داریم: 1. [DecSync CC] 2. [Evolution-DecSync] ### DecSync CC دک‌سینک سی‌سی یک برنامه‌ی اندروید است که از فرمت دک‌سینک پشتیبانی می‌کند و دفترچه تلفن و تقویم را در یک فولدر روی گوشی ذخیره می‌کند. دک‌سینک سی‌سی از روی [F-Droid] قابل نصب است. ـF-Droidـ یک پلی‌استور آلترناتیو اندروید برای برنامه‌های اوپن‌سورس و برنامه‌های غیرقابل انتشار روی گوگل‌پلی است و باید با [دانلود از سایتشان] نصب شود چرا که گوگل اجازه انتشار به آن نمی‌دهد. بعد از نصب، دک‌سینک سی‌سی را باز کنید و یک تقویم و یک دفترچه تلفن بسازید. دقت کنید که چیزی به طور خودکار از سایر دفترچه تلفن‌ها و تقویم‌ها به این‌ها منتقل نمی‌شود. من از دفترچه‌تلفن گوشی‌ام یک اکسپورت گرفتم و در این دفترچه تلفن جدید ایمپورت کردم. تقویم را هم اصلا ایمپورت نگرفتم و فقط رویدادهای جدید را در این تقویم ثبت کردم. تصویر زیر اگر لود بشود صفحه اصلی دک‌سینک سی‌سی اندروید را با یک دفترچه تلفن و یک تقویم که با آن اضافه کرده‌ام نمایش می‌دهد. {: .center} ![Decsync Android](assets/pimg/decsync_android.jpg) دک‌سینک این دفترچه و تقویم را به اندروید اضافه می‌کند و اطلاعات آنها را در فولدری بنام _DecSync_ ذخیره می‌کند. دقت کنید که روح دک‌سینک هم از سینک‌تینگ خبری ندارد. جهان دک‌سینک به همین فولدر خلاصه می‌شود و تمام. این فولدر را هم می‌دهیم به سینک‌تینگ تا با یک کامپیوتر یا رزبری سینک بکند. بعد از این می‌توانید از این دفترچه‌تلفن و تقویم برای ثبت اطلاعات اضافه کنید. فقط قبل از اینکه کاملا به این روش اتکا کنید مطمئن شوید که سینک‌تینگ را درست راه‌انداخته‌اید. در غیر ایصورت اطلاعات روی گوشی می‌ماند و با جایی سینک نمی‌شود. ### Evolution-DecSync برای نصب پلاگین اوولوشن طبق [مستندات برنامه] عمل کنید. برای آرچ و اوبونتو و دبیان و فدورا پکیج دارد. برای سایر دیستروها باید خودتان زحمت کامپایل از سورس را بکشید. این برنامه که نصب بشود فولدر ‫‫‫‫`~/.local/share/decsync` را می‌خواند. کافیست این فولدر را به جایی که سینک‌تینگ فولدر اندرویدی ما را سینک کرده است لینک بکنیم. مثلا: ```bash $ ln -s ~/Sync/DecSync ~/.local/share/decsync ``` حالا وقتی از منوی `File -> Add -> New ->` گزینه‌های _Calender_ یا _Address Book_ را انتخاب کنیم و اگر همه چیز درست پیش رفته باشد باید یک سورس جدید بنام _decsync_ قابل انتخاب باشد. {: .center} ![decsync calendar](assets/pimg/decsync_calendar.png) {: .center} ![decsync address book](assets/pimg/decsync_addressbook.png) ### بونس: سینک‌تینگ روی رزبری همه این چیزها که گفتیم اگر جایی نداشته باشیم که سینک‌تینگ همواره در حال اجرا باشد سود چندانی ندارد. چرا که تا وقتی کامپیوتر را روشن نکنیم داده‌ها سینک نمی‌شود. بنابراین بهترین روش اینست که روی یک کامپیوتر مثل رزبری سینک‌تینگ را نصب کنید. من رزبری و کامپیوترهای مشابه را به صورت هدلس نصب می‌کنم. یعنی بدون دسکتاپ. سینک‌تینگ اما روی لوکال‌هاست اجرا می‌شود پس باید برای دسترسی به آن از `ssh` استفاده کرد و پورت ریموت را لوکال کرد. دستورش را در ادامه می‌آورم که اگر کسی به اینجا رسید لنگ نماند. ```bash pi@raspberrypi:~ $ lsb_release -a No LSB modules are available. Distributor ID: Raspbian Description: Raspbian GNU/Linux 10 (buster) Release: 10 Codename: buster pi@raspberrypi:~ $ sudo apt install syncthing ## Enable for user `pi`. By default will sync `~/Sync` pi@raspberrypi:~ $ sudo systemctl enable syncthing@pi.service ## Check service status pi@raspberrypi:~ $ sudo systemctl status syncthing@pi.service ``` برای دسترسی به یک وب سایت ریموت هم دستور زیر به کار می‌آید: ```bash $ ssh -N -L 8888:localhost:8384 username@remote_ip ``` پورت ۸۳۸۴ پورت پیشفرض صفحه وب سینک‌تینگ است. ۸۸۸۸ هم یک پورت دلخواه روی کامپیوتر خودمان است. این دستور را اجرا کنیم صفحه وب سینک‌تینگ را روی پورت ۸۸۸۸ کامپیوترمان می‌توانیم باز کنیم. بدرد کنترل یک سرور ریموت می‌خورد. # خلاصه در این مقاله از اهمیت سینک‌کردن داده‌هایمان و مزایا و معایب اتکا به ابرشرکت‌ها نوشتیم. با یک راه حل آلترناتیو برای سینک دفترچه تلفن و تقویم اندروید بدون سرور مرکزی و دخالت شخص سوم آشنا شدیم. سینک‌تینگ و دک‌سینک رو به این منظور معرفی کردیم و نصب و راه‌اندازی‌شان کردیم. [DecSync]: https://github.com/39aldo39/DecSync [Syncthing]: https://syncthing.net/ [DecSync CC]: https://github.com/39aldo39/DecSyncCC [Evolution-DecSync]: https://github.com/39aldo39/Evolution-DecSync [مشکلاتی]: https://github.com/syncthing/syncthing/issues/102 [F-Droid]: https://f-droid.org/packages/org.decsync.cc/ [مستندات برنامه]: https://github.com/39aldo39/Evolution-DecSync [دانلود از سایتشان]: https://f-droid.org/FDroid.apk [صفحه دانلود سینک‌تینگ]: https://syncthing.net/downloads/ [یک اپ]: https://play.google.com/store/apps/details?id=com.nutomic.syncthingandroid [لینوکس]: https://github.com/syncthing/syncthing/releases/download/v1.4.0/syncthing-linux-amd64-v1.4.0.tar.gz [ویندوز]: https://github.com/syncthing/syncthing/releases/download/v1.4.0/syncthing-windows-amd64-v1.4.0.zip [لوکال‌هاست]: http://127.0.0.1:8384/ [پروتکل سینک‌تینگ]: https://docs.syncthing.net/specs/bep-v1.html#bep-v1 [جاکوب بورگ]: https://github.com/calmh [مستندات سینک‌تینگ]: https://docs.syncthing.net/ [آلدو گونسینگ]: https://github.com/39aldo39