| VARLINKCTL(1) | varlinkctl | VARLINKCTL(1) |
نام (NAME)
varlinkctl - دروننگری و فراخوانی سرویسهای Varlink
خلاصه دستور (SYNOPSIS)
varlinkctl [OPTIONS...] info ADDRESS
varlinkctl [OPTIONS...] list-interfaces ADDRESS
varlinkctl [OPTIONS...] list-methods ADDRESS [INTERFACE...]
varlinkctl [OPTIONS...] introspect ADDRESS [INTERFACE...]
varlinkctl [OPTIONS...] call ADDRESS METHOD [ARGUMENTS]
varlinkctl [OPTIONS...] --exec call ADDRESS METHOD ARGUMENTS -- CMDLINE
varlinkctl [OPTIONS...] serve METHOD {CMDLINE...}
varlinkctl [OPTIONS...] validate-idl [FILE]
توضیحات (DESCRIPTION)
varlinkctl ممکن است برای دروننگری و فراخوانی سرویسهای Varlink[1] استفاده شود.
سرویسها با یکی از موارد زیر ارجاع داده میشوند:
برای سهولت، این دو نحو سادهتر (و مازاد) آدرس سرویس نیز پشتیبانی میشوند:
فرمانها (COMMANDS)
فرمانهای زیر پشتیبانی میشوند:
info ADDRESS
افزودهشده در نسخه 255.
list-interfaces ADDRESS
افزودهشده در نسخه 255.
list-methods ADDRESS [INTERFACE...]
افزودهشده در نسخه 257.
introspect ADDRESS [INTERFACE...]
افزودهشده در نسخه 255.
call ADDRESS METHOD [ARGUMENTS]
پارامترهای پاسخ به عنوان اشیاء JSON در STDOUT نوشته میشوند.
افزودهشده در نسخه 255.
serve METHOD CMDLINE...
سوکت شنود باید از طریق فعالسازی سوکت (یعنی پروتکل $LISTEN_FDS) منتقل شود، که این امر این دستور را برای استفاده در واحدهای سرویس فعالشونده با سوکت مناسب میسازد. هنگامی که یک کلاینت متد مشخصشده را با پرچم upgrade فراخوانی میکند، سرور پاسخی برای تأیید ارتقا ارسال کرده، سپس انشعاب یافته (fork میکند) و خط فرمان دادهشده را با اتصال ارتقایافته بر روی ورودی و خروجی استاندارد خود اجرا مینماید.
این کار عملاً هر دستوری را که با پروتکلی از طریق ورودی/خروجی استاندارد گفتگو میکند، به یک سرویس Varlink تبدیل میسازد که از طریق رجیستری سرویسها قابل کشف بوده و از طریق اعتبارسنجی سوکت احراز هویت میشود. از آنجا که هر اتصال توسط یک فرایند فرزند منشعبشده مدیریت میشود، واحد سرویس میتواند گزینههای محدودسازی محیطی (sandboxing) متعلق به systemd (مانند ProtectSystem= و غیره) را اعمال کند و در محیط فراخواننده کار نمیکند.
افزودهشده در نسخه 261.
list-registry
افزودهشده در نسخه 260.
validate-idl [FILE]
افزودهشده در نسخه 255.
help
افزودهشده در نسخه 255.
گزینهها (OPTIONS)
گزینههای زیر پشتیبانی میشوند:
--more
اگر این حالت فعال باشد، خروجی به صورت خودکار به حالت JSON-SEQ تغییر مییابد تا اشیاء پاسخ جداگانه به سادگی قابل تشخیص باشند.
این سوئیچ هیچ اثری بر مهلت زمانی فراخوانی متد که به طور پیشفرض اعمال میشود ندارد. صرفنظر از اینکه --more مشخص شده باشد یا خیر، مهلت زمانی پیشفرض ۴۵ ثانیه خواهد بود. از --timeout= (زیر را ببینید) برای تغییر یا غیرفعال کردن مهلت زمانی استفاده کنید. هنگام اجرای یک فراخوانی متد که پیوسته بهروزرسانیها را برمیگرداند، معمولاً مطلوب است که مهلت زمانی با --timeout=infinity غیرفعال شود. از سوی دیگر، هنگام اجرای فراخوانی متد با --more به منظور شمارش اشیاء (که احتمالاً سریعاً تکمیل میشود)، معمولاً به دلایل پایداری و استحکام، سودمند است که منطق مهلت زمانی فعال بماند.
افزودهشده در نسخه 255.
-E
افزودهشده در نسخه 257.
--collect
افزودهشده در نسخه 256.
--oneway
افزودهشده در نسخه 255.
--upgrade
اگر --exec مشخص نشده باشد، varlinkctl به عنوان یک پروکسی دوطرفه عمل میکند: دادههای خواندهشده از ورودی استاندارد به اتصال ارتقایافته هدایت میشوند و دادههای دریافتی از اتصال در خروجی استاندارد نوشته میشوند.
اگر --exec مشخص شده باشد، سوکت اتصال ارتقایافته بر روی هر دوی ورودی استاندارد و خروجی استانداردِ فرایندِ فراخوانیشده قرار میگیرد. این شبیه به رفتار معمول --exec (بدون --upgrade) است که پاسخ فراخوانی متد را بر روی ورودی استاندارد قرار میدهد. بنابراین فرایند فراخوانیشده میتواند به سادگی از stdin/stdout برای برقراری ارتباط بر بستر پروتکل ارتقایافته بخواند و در آن بنویسد.
این گزینه ممکن است با --more، --oneway، --collect، --graceful=، یا --push-fd= ترکیب نشود.
افزودهشده در نسخه 261.
--json=MODE
افزودهشده در نسخه 255.
-j
افزودهشده در نسخه 255.
--quiet, -q
افزودهشده در نسخه 257.
--graceful=
افزودهشده در نسخه 257.
--timeout=
افزودهشده در نسخه 257.
--exec
توجه داشته باشید که اگر --exec مشخص شود، پارامتر سوم call (یعنی پارامترهای فراخوانی متد) اختیاری نخواهد بود.
افزودهشده در نسخه 258.
--push-fd=
افزودهشده در نسخه 258.
--system, --user
افزودهشده در نسخه 260.
--no-ask-password
--no-pager
-h, --help
--version
فایلها و دایرکتوریها (FILES & DIRECTORIES)
/run/varlink/registry/
از varlinkctl list-registry برای نمایش محتویات این دایرکتوری استفاده کنید.
(اینودهایی که نه به عنوان اینودهای سوکت و نه به عنوان پیوندهای نمادین به آنها واجد شرایط نباشند، باید نادیده گرفته شوند. یک توسعه در آینده ممکن است فایلها و دایرکتوریهای معمولی را برای بهبود قابلیتهای رجیستری معرفی کند.)
افزودهشده در نسخه 260.
مثالها (EXAMPLES)
مثال ۱. بررسی یک سرویس
سه دستور زیر سرویس "io.systemd.Resolve" پیادهسازیشده توسط systemd-resolved.service(8) را بازرسی میکنند، اطلاعات عمومی سرویس و رابطهای پیادهسازیشده را فهرست میکنند و سپس تعریف رابط اصلی آن را نمایش میدهند:
$ varlinkctl info /run/systemd/resolve/io.systemd.Resolve
Vendor: The systemd Project
Product: systemd (systemd-resolved)
Version: 254 (254-1522-g4790521^)
URL: https://systemd.io
Interfaces: io.systemd
io.systemd.Resolve
org.varlink.service
$ varlinkctl list-interfaces /run/systemd/resolve/io.systemd.Resolve
io.systemd
io.systemd.Resolve
org.varlink.service
$ varlinkctl introspect /run/systemd/resolve/io.systemd.Resolve io.systemd.Resolve
interface io.systemd.Resolve
type ResolvedAddress(
ifindex: ?int,
...
(تعریف رابط در مثال بالا برای رعایت اختصار کوتاه شده است.)
مثال ۲. فراخوانی یک متد
دستور زیر یک نام میزبان را از طریق فراخوانی متد ResolveHostname از systemd-resolved.service(8) تحلیل میکند.
$ varlinkctl call /run/systemd/resolve/io.systemd.Resolve io.systemd.Resolve.ResolveHostname '{"name":"systemd.io","family":2}' -j
{
"addresses" : [
{
"ifindex" : 2,
"family" : 2,
"address" : [
185,
199,
111,
153
]
}
],
"name" : "systemd.io",
"flags" : 1048577
}
مثال ۳. بررسی یک فایل اجرایی سرویس
دستور زیر فایل اجرایی /usr/lib/systemd/systemd-pcrextend و رابطهای IPC ارائهشده توسط آن را بازرسی میکند. سپس متدی را بر روی آن فراخوانی میکند:
# varlinkctl info /usr/lib/systemd/systemd-pcrextend
Vendor: The systemd Project
Product: systemd (systemd-pcrextend)
Version: 254 (254-1536-g97734fb)
URL: https://systemd.io
Interfaces: io.systemd
io.systemd.PCRExtend
org.varlink.service
# varlinkctl introspect /usr/lib/systemd/systemd-pcrextend io.systemd.PCRExtend
interface io.systemd.PCRExtend
method Extend(
pcr: int,
text: ?string,
data: ?string
) -> ()
# varlinkctl call /usr/lib/systemd/systemd-pcrextend io.systemd.PCRExtend.Extend '{"pcr":15,"text":"foobar"}'
{}
مثال ۴. فراخوانی یک متد از راه دور از طریق SSH
دستور زیر گزارشی درباره هویت یک میزبان راه دور به نام "somehost" را از systemd-hostnamed.service(8) با اتصال از طریق SSH به سوکت AF_UNIX که سرویس روی آن شنود میکند، دریافت مینماید:
# varlinkctl call ssh-unix:somehost:/run/systemd/io.systemd.Hostname io.systemd.Hostname.Describe '{}'
برای فراخوانی مستقیم یک فایل باینری سرویس Varlink بر روی میزبان از راه دور، به جای ارتباط با سرویس از طریق AF_UNIX، میتوان این کار را به شکل زیر انجام داد:
# varlinkctl call ssh-exec:somehost:systemd-creds org.varlink.service.GetInfo '{}'
مثال ۵. ارائه یک فشردهگشای ایزولهشده از طریق ارتقای پروتکل
واحدهای سوکت و سرویس زیر، فشردهگشایی xz را به عنوان یک سرویس Varlink ارائه میدهند. کلاینتها متصل میشوند و دادههای فشردهشده را از طریق اتصال ارتقایافته ارسال کرده و در پاسخ خروجی فشردهگشاییشده را دریافت میکنند.
# /etc/systemd/system/varlink-decompress-xz.socket [Socket] ListenStream=/run/varlink/registry/com.example.Decompress.XZ [Install] WantedBy=sockets.target # /etc/systemd/system/varlink-decompress-xz.service [Service] ExecStart=varlinkctl serve com.example.Decompress.XZ xz -d DynamicUser=yes PrivateNetwork=yes ProtectSystem=strict ProtectHome=yes NoNewPrivileges=yes SystemCallFilter=~@privileged @resources MemoryMax=256M
سپس یک کلاینت میتواند دادهها را از طریق این سرویس فشردهگشایی کند:
$ echo "hello" | xz | varlinkctl call --upgrade \
unix:/run/varlink/registry/com.example.Decompress.XZ \
com.example.Decompress.XZ '{}'
hello
برای آزمایش سریع بدون نیاز به فایلهای واحد، systemd-socket-activate میتواند برای ارائه سوکت شنود استفاده شود:
$ systemd-socket-activate -l /tmp/decompress.sock -- varlinkctl serve com.example.Decompress.XZ xz -d &
$ echo "hello" | xz | varlinkctl call --upgrade unix:/tmp/decompress.sock com.example.Decompress.XZ '{}'
hello
همچنین ببینید (SEE ALSO)
busctl(1), Varlink[1]
نکات (NOTES)
- 1.
- Varlink
| systemd 261.2 |