task-sync(5) User Manuals task-sync(5)

task-sync - بررسی و آموزش قابلیت‌های گوناگون همگام‌سازی داده‌ها در task(1)

برنامه Taskwarrior می‌تواند وظایف شما را با یک سرور همگام‌سازی کند. این کار چندین مزیت به همراه دارد:
- دسترسی به وظایف شما از چندین سیستم مختلف را که "رپلیکا (replica)" نامیده می‌شوند ممکن می‌سازد.
- یک نسخه پشتیبان از وظایف شما فراهم می‌کند.
- در فضای دیسک صرفه‌جویی می‌کند.

برای مثال، ممکن است بخواهید یک رپلیکا از وظایف خود روی لپ‌تاپ و رپلیکای دیگری روی تلفن همراهتان داشته باشید.

نکته: یکی از اثرات جانبی همگام‌سازی این است که به محض همگام شدن تغییرات، دیگر نمی‌توان آن‌ها را واگردانی (undo) کرد. این بدان معناست که با هر بار اجرای عملیات همگام‌سازی، امکان واگردانی عملیات‌های قبلی از بین می‌رود.

برای افزودن یک رپلیکای جدید، یک رپلیکای تازه و خالی را دقیقاً مشابه رپلیکای موجود پیکربندی کرده و دستور `task sync` را اجرا کنید.

برای همگام‌سازی با یک سرور، راهکار معمول اجرای دوره‌ای دستور زیر است:

$ task sync

برای نمونه از طریق cron(8).

برنامه Taskwarrior گزینه‌های متعددی برای همگام‌سازی وظایف شما فراهم می‌کند:


- با سروری که به طور ویژه برای مدیریت داده‌های Taskwarrior طراحی شده است.
+ با ارائه‌دهندگان فضای ذخیره‌سازی ابری. در حال حاضر از هر دو سرویس AWS و GCP پشتیبانی می‌شود.
- با یک فایل محلی روی دیسک.
- از طریق یک مخزن گیت (محلی یا از راه دور).

برای اغلب این روش‌ها، به یک کلید رمزنگاری محرمانه (encryption secret) برای رمزگذاری و رمزگشایی وظایف نیاز خواهید داشت. این مقدار می‌تواند هر رشته محرمانه‌ای باشد و باید در تمامی رپلیکاهایی که وظایف را به اشتراک می‌گذارند یکسان باشد.

$ task config sync.encryption_secret <encryption_secret>

ابزارهایی مانند pwgen(1) می‌توانند مقادیر محرمانه مناسبی تولید کنند.

برای همگام‌سازی وظایف با یک سرور همگام‌سازی، به اطلاعات زیر از سوی مدیر سرور نیاز دارید:


- آدرس اینترنتی (URL) سرور (مانند "https://tw.example.com/path")
- یک شناسه کلاینت ("client_id") که وظایف شما را مشخص می‌کند

برنامه Taskwarrior را با این جزئیات پیکربندی کنید:

$ task config sync.server.url               <url>
$ task config sync.server.client_id         <client_id>

توجه داشته باشید که نشانی وب باید حتماً شامل پروتکل، مانند 'http://' یا 'https://' باشد.


$ task config sync.server.origin <origin>

یک مترادف منسوخ‌شده برای "sync.server.url" است.

برای همگام‌سازی وظایف با GCP، از کنسول GCP برای ایجاد یک پروژه جدید و درون آن پروژه یک باکت جدید در Cloud Storage استفاده کنید. تنظیمات پیش‌فرض باکت کفایت می‌کند.

احراز هویت در پروژه را با دستورات زیر انجام دهید:

$ gcloud config set project $PROJECT_NAME
$ gcloud auth application-default login

سپس Taskwarrior را به این صورت پیکربندی کنید:

$ task config sync.gcp.bucket               <bucket-name>

با این حال، اگر اطلاعات کاربری `application-default` شما قبلاً توسط برنامه دیگری استفاده می‌شود، می‌توانید اطلاعات حساب سرویس (service account) اختصاصی خود را ارائه دهید.

برای شروع، در منوی ناوبری به بخش "IAM and Admin" رفته و سپس "Roles" را انتخاب کنید.

در نوار منوی بالای بخش "Roles"، روی "CREATE ROLE" کلیک کنید. یک نام و توضیح مناسب برای نقش جدید ارائه دهید.

با استفاده از فیلتر "Service:storage" (نه جعبه ورودی "Filter permissions by role") مجوزها را به نقش جدید اضافه کنید. مجوزهای زیر را انتخاب فرمایید:


- storage.buckets.create
- storage.buckets.get
- storage.buckets.update
- storage.objects.create
- storage.objects.delete
- storage.objects.get
- storage.objects.list
- storage.objects.update

نقش جدید خود را ایجاد کنید.

در نوار کناری سمت چپ، به "Service accounts" بروید.

در نوار منوی بالای بخش "Service accounts"، روی "CREATE SERVICE ACCOUNT" کلیک کنید. نام و توضیحات مناسب برای حساب سرویس جدید وارد نمایید. نقشی را که به تازگی ایجاد کرده‌اید انتخاب کرده و فرآیند ساخت حساب سرویس را تکمیل کنید.

اکنون در داشبورد حساب‌های سرویس، وارد حساب سرویس جدید شده و در نوار منوی بالا "keys" را انتخاب کنید. روی "ADD KEY" کلیک کنید تا کلید جدیدی (یک کلید JSON) ایجاد و دانلود شود.

سپس Taskwarrior را به این صورت پیکربندی کنید:

$ task config sync.gcp.bucket               <bucket-name>
$ task config sync.gcp.credential_path      <absolute-path-to-downloaded-credentials>

برای همگام‌سازی وظایف با AWS، یک منطقه جغرافیایی نزدیک به خود را انتخاب کرده و از طریق کنسول AWS یک باکت جدید در S3 بسازید. تنظیمات پیش‌فرض باکت کفایت می‌کند. به طور خاص مطمئن شوید که هیچ خط‌مشی چرخه عمر (lifecycle policy) فعال نباشد، زیرا ممکن است اشیاء را به طور خودکار حذف کرده یا انتقال دهد و دسترسی‌پذیری داده‌ها را تحت تأثیر قرار دهد.

همچنین به یک کاربر AWS IAM با خط‌مشی زیر نیاز دارید، که در آن BUCKETNAME نام باکت شماست. یک کاربر مشترک می‌تواند برای چندین کلاینت Taskwarrior پیکربندی شود.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "TaskChampion",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:ListBucket",
                "s3:DeleteObject"
            ],
            "Resource": [
                "arn:aws:s3:::BUCKETNAME",
                "arn:aws:s3:::BUCKETNAME/*"
            ]
        }
    ]
}

برای ایجاد چنین کاربری، یک خط‌مشی جدید در کنسول IAM بسازید، گزینه JSON را در ویرایشگر خط‌مشی انتخاب کرده و خط‌مشی بالا را الصاق کنید. روی "Next" کلیک کرده و نامی مانند "TaskwarriorSync" به آن اختصاص دهید. سپس یک کاربر جدید با نام دلخواه بسازید، گزینه "Attach Policies Directly" را انتخاب کرده و خط‌مشی تازه‌ایجادشده را برگزینید.

به کلیدهای دسترسی (access keys) پیکربندی‌شده برای این کاربر جدید نیاز دارید. کاربر را در فهرست کاربران پیدا کرده، زبانه "Security Credentials" را باز کنید، سپس روی "Create access key" کلیک کرده و مراحل را دنبال کنید.

در این مرحله، می‌توانید نحوه ارائه اطلاعات کاربری به Taskwarrior را انتخاب فرمایید. ساده‌ترین روش قرار دادن مستقیم آن‌ها در پیکربندی Taskwarrior است:

$ task config sync.aws.region              <region>
$ task config sync.aws.bucket              <bucket-name>
$ task config sync.aws.access_key_id       <access-key-id>
$ task config sync.aws.secret_access_key   <secret-access-key>

به عنوان روش جایگزین، می‌توانید یک پروفایل AWS CLI با نام دلخواهی مانند "taskwarrior-creds" تنظیم کنید:

$ aws configure --profile taskwarrior-creds

شناسه کلید دسترسی (access key ID) و کلید دسترسی محرمانه (secret access key) را وارد کنید. منطقه پیش‌فرض و قالب خروجی اهمیتی ندارند. سپس Taskwarrior را به این صورت تنظیم کنید:

$ task config sync.aws.region              <region>
$ task config sync.aws.bucket              <bucket-name>
$ task config sync.aws.profile             taskwarrior-creds

برای استفاده از منابع پیش‌فرض اعتبارنامه AWS مانند متغیرهای محیطی، پروفایل پیش‌فرض یا پروفایل نمونه (instance profile)، این متغیر را تنظیم نمایید:

$ task config sync.aws.region              <region>
$ task config sync.aws.bucket              <bucket-name>
$ task config sync.aws.default_credentials true

برای بهره‌مندی از ویژگی صرفه‌جویی در فضای دیسک بدون نیاز به راه‌اندازی سرور راه دور، امکان همگام‌سازی وظایف به صورت محلی وجود دارد. برای پیکربندی همگام‌سازی محلی:

$ task config sync.local.server_dir /path/to/sync

پیکربندی پیش‌فرض همگام‌سازی با پایگاه‌داده درون پوشه وظایف ("data.location") است.

برای همگام‌سازی وظایف با استفاده از یک مخزن گیت، مسیر مخزن محلی و شاخه‌ای که باید استفاده شود را پیکربندی کنید:

$ task config sync.git.local_path     /path/to/local/repo
$ task config sync.git.branch         taskchampion
$ task config sync.encryption_secret  <encryption_secret>

در صورتی که مخزن وجود نداشته باشد، ایجاد خواهد شد. توصیه می‌شود از یک شاخه اختصاصی استفاده کنید.

برای همگام‌سازی با مخزن راه دور (push و pull)، یک منبع راه دور (remote) را نیز تنظیم کنید:

$ task config sync.git.remote         origin

منبع راه دور می‌تواند یک نام مشخص مانند "origin" یا نشانی کامل گیت مانند "git@myserver.com:/path/to/repo.git" باشد. احراز هویت تماماً توسط سامانه اعتبارسنجی گیت انجام می‌شود؛ برای همگام‌سازی با سرور راه دور، دستورات "git push" و "git pull" باید بدون درخواست تعاملی رمز عبور کار کنند (از کلیدهای SSH یا credential helper استفاده کنید).

امکان کارکرد آفلاین در حالی که منبع راه دور همچنان پیکربندی شده وجود دارد. هشدار: اگر رپلیکای دیگری نیز با منبع راه دور همگام شود، دیگر قادر نخواهید بود همگام‌سازی را از این رپلیکا به حالت قبل بازگردانید.

$ task config sync.git.local_only     true

در صورتی که به یک باینری غیر استاندارد گیت نیاز باشد، مسیر آن قابل تعیین است:

$ task config sync.git.git_path       /path/to/git

سرور همگام‌سازی TaskChampion یک سرور HTTP با قابلیت پشتیبانی از چند کاربر است. کاربران با شناسه کلاینت (client ID) شناسایی می‌شوند و کاربران دارای شناسه‌های مختلف کاملاً از یکدیگر مستقل هستند. داده‌های وظایف توسط Taskwarrior رمزگذاری می‌شوند و سرور همگام‌سازی هرگز داده‌های رمزنشده را نمی‌بیند.

این سرور در نشانی زیر توسعه داده می‌شود: https://github.com/GothenburgBitFactory/taskchampion-sync-server

برای افزودن یک کاربر جدید به سرور، یک شناسه کلاینت جدید با ابزارهایی مانند `uuidgen` یا تولیدکننده‌های آنلاین UUID بسازید. نیازی به پیکربندی سرور برای این شناسه کلاینت جدید نیست: هر زمان که شناسه کلاینت جدیدی به سرور ارائه شود، سرور همگام‌سازی به طور خودکار کاربر جدیدی ایجاد می‌کند. شناسه را همراه با نشانی سرور به کاربر بدهید تا در پیکربندی Taskwarrior خود قرار دهد. کاربر باید کلید محرمانه رمزنگاری ("encryption_secret") اختصاصی خود را تولید کند.

اگر چندین کلاینت اجرا می‌کنید که همگی با یک سرور همگام‌سازی می‌شوند، باید این دستور را روی کلاینت اصلی خود (کلاینتی که بیشتر استفاده می‌کنید) اجرا فرمایید:

$ task config recurrence on

و در سایر کلاینت‌ها این دستور را اجرا کنید:

$ task config recurrence off

این پیکربندی شما را در برابر پیامدهای باگ تکرار و همگام‌سازی محافظت می‌کند.

خدمات متعدد اشتراک‌گذاری فایل نظیر DropBox، Amazon S3، Google Drive، SkyDrive و موارد دیگر وجود دارند. این شیوه شامل نگهداری پوشه task. شما در یک پوشه مشترک تحت نظارت سرویس میزبانی فایل است.

همگام‌سازی سریع انجام می‌شود، هرچند در صورتی که اتصال شبکه قطع باشد و وظایف در دو مکان مختلف دستکاری شوند ممکن است شرایط تداخل (conflict) رخ دهد. دلیل این امر این است که سرویس اشتراک فایل تنها با ماهیت فایل‌ها سر و کار دارد و روشی برای ادغام محتوای وظایف نمی‌شناسد. با پرهیز از تغییر همزمان یک وظیفه روی دو سیستم بدون انجام همگام‌سازی بین آن‌ها، از این مشکل پیشگیری کنید.

راه‌اندازی صرفاً شامل ساخت پوشه و اصلاح متغیر پیکربندی data.location به این صورت است:

$ task config data.location /path/to/shared/directory

نقاط قوت:
- پشتیبانی مناسب کلاینت‌ها
- راه‌اندازی ساده
- استفاده شفاف و آسان

نقاط ضعف:
- وظایف به شکل مناسب ادغام نمی‌شوند

حق نشر (C) 2006 - 2021 متعلق به T. Babej, P. Beckingham, F. Hernandez.

برنامه Taskwarrior تحت شرایط مجوز MIT توزیع می‌شود. برای اطلاعات بیشتر https://www.opensource.org/licenses/mit-license.php را ببینید.

task(1), taskrc(5), task-color(5)

برای اطلاعات بیشتر درباره Taskwarrior به منابع زیر مراجعه فرمایید:

وب‌سایت رسمی در
https://taskwarrior.org
مخزن رسمی کد منبع در
https://github.com/GothenburgBitFactory/taskwarrior
تماس با پروژه از طریق رایانامه
<support@GothenburgBitFactory.org>

باگ‌های Taskwarrior را می‌توانید به بخش ردیابی مشکلات در نشانی زیر گزارش کنید:
https://github.com/GothenburgBitFactory/taskwarrior/issues
2016-02-24 task 3.5.0