STAPRUN(8) System Manager's Manual STAPRUN(8)

staprun - محیط زمان‌اجرای Systemtap

staprun [ OPTIONS ] MODULE [ MODULE-OPTIONS ]

برنامه staprun بخش پس‌فرجام (back-end) ابزار Systemtap است. این برنامه انتظار یک ماژول هسته را دارد که توسط ابزار پیش‌فرجام (front-end) stap تولید شده باشد.

تقسیم ابزار Systemtap به دو بخش پیش‌فرجام و پس‌فرجام به کاربر امکان می‌دهد تا یک اسکریپت Systemtap را در یک ماشین توسعه که دارای ابزارهای توسعه هسته (مورد نیاز برای کامپایل اسکریپت) است کامپایل کرده و سپس ماژول هسته حاصل را به یک ماشین عملیاتی که هیچ ابزار توسعه‌ای روی آن نصب نیست منتقل کند.

لطفاً برای اطلاع از شماره نسخه به stappaths(7) مراجعه کنید، یا دستورات زیر را اجرا نمایید:

rpm -q systemtap (fedora/red hat)
apt-get -v systemtap (ubuntu)

برنامه staprun از گزینه‌های زیر پشتیبانی می‌کند. هر گزینه دیگری، فهرستی از گزینه‌های پشتیبانی‌شده را چاپ می‌کند.

حالت باجزئیات (Verbose). سطح جزئیات را می‌توان در متغیر محیطی SYSTEMTAP_VERBOSE نیز تنظیم کرد.
نمایش شماره نسخه و خروج.
نادیده گرفتن هشدارهای اسکریپت.
بارگذاری ماژول uprobes.ko.
دستور CMD اجرا خواهد شد و برنامه staprun هنگام اتمام CMD خارج می‌شود. متغیر '_stp_target' حاوی pid مربوط به CMD خواهد بود.
متغیر '_stp_target' بر روی PID تنظیم خواهد شد.
متغیر '_stp_namespaces_pid' را بر روی PID تنظیم می‌کند.
ارسال خروجی به FILE. اگر ماژول از حالت انبوه (bulk mode) استفاده کند، خروجی در فایل‌های مجزا به ازای هر پردازنده به نام FILE_x (در حالت پس‌زمینه و حالت انبوه FILE_cpux) ذخیره می‌شود که در آن 'x' شماره پردازنده است. این گزینه از قالب‌های strftime(3) برای FILE پشتیبانی می‌کند.
ماژول Systemtap اندازه بافر را مشخص می‌کند. تنظیم اندازه در اینجا مقدار مذکور را بازنویسی می‌کند. مقدار باید یک عدد صحیح بین ۱ و ۴۰۹۵ باشد که به عنوان اندازه بافر بر حسب مگابایت در نظر گرفته می‌شود. در صورت استفاده از حالت انبوه، این مقدار به ازای هر پردازنده اعمال خواهد شد.
بارگذاری ماژول و شروع پروب‌ها (probes)، سپس جدا شدن از ماژول در حالی که پروب‌ها در حال اجرا باقی می‌مانند. بعداً با استفاده از گزینه -A می‌توان مجدداً به ماژول متصل شد.
اتصال به ماژول بارگذاری‌شده Systemtap.
کنترل رنگ‌بندی پیام‌های خطا. مقدار WHEN باید یکی از موارد "never"، "always" یا "auto" باشد (یعنی فقط در صورت اجرا در یک ترمینال فعال شود). در صورت حذف این گزینه، مقدار "auto" پیش‌فرض خواهد بود. رنگ‌ها را می‌توان با استفاده از متغیر محیطی SYSTEMTAP_COLORS سفارشی کرد. برای اطلاعات بیشتر درباره نحو و رفتار، به صفحه راهنمای stap(1) مراجعه کنید.
فعال‌سازی حالت پایشگر (monitor) با فاصله زمانی INTERVAL ثانیه بین به‌روزرسانی‌ها.
حذف یک ماژول. تنها ماژول‌های جداشده یا استفاده‌نشده‌ای که کاربر مجوز دسترسی به آن‌ها را دارد حذف خواهند شد. برای حذف تمام ماژول‌های استفاده‌نشده از "*" (داخل نقل‌قول) استفاده کنید.
اجرای staprun در پس‌زمینه به عنوان یک دیمن (daemon) و نمایش pid آن.
تغییر نام ماژول به یک نام یکتا قبل از درج آن در هسته.
ارسال عدد و داده‌های URI داده‌شده به توابع tapset شامل remote_id() و remote_uri().
حداکثر اندازه فایل خروجی و حداکثر تعداد فایل‌های خروجی را تعیین می‌کند. اگر اندازه فایل خروجی از size مگابایت فراتر رود، Systemtap خروجی را به فایل بعدی تغییر می‌دهد. همچنین اگر تعداد فایل‌های خروجی از N بیشتر شود، Systemtap قدیمی‌ترین فایل خروجی را حذف می‌کند. می‌توانید آرگومان دوم را حذف کنید.
حداکثر زمانی که رشته خواننده (reader thread) قبل از تخلیه بافر ردگیری منتظر می‌ماند را تنظیم می‌کند. مقدار بر حسب میلی‌ثانیه است و مقدار پیش‌فرض ۲۰۰ میلی‌ثانیه می‌باشد. تعیین یک مقدار بزرگ، تعداد بیدارباش‌های stapio را کاهش داده و امکان خواب عمیق‌تر را برای پلتفرم‌های تعبیه‌شده فراهم می‌سازد؛ اما تعامل‌پذیری در ترمینال را تحت تأثیر قرار می‌دهد زیرا در شرایط توان عملیاتی پایین، تخلیه بافر ردگیری با دفعات کمتری صورت می‌گیرد. برای توان عملیاتی بالا هیچ تأثیری بر تعامل‌پذیری یا کارایی وجود ندارد، زیرا قبل از سپری شدن این مدت‌زمان، بافر به محض پر شدن تخلیه می‌شود.
مقدار متغیر سراسری var1 را به val تنظیم می‌کند. متغیرهای سراسری موجود در یک ماژول به عنوان گزینه‌های ماژول در نظر گرفته می‌شوند و می‌توان آن‌ها را از خط فرمان staprun مقداردهی کرد.

MODULE یا مسیر یک ماژول است یا نام آن. اگر نام ماژول باشد، ماژول در دایرکتوری زیر جستجو خواهد شد (که در آن 'VERSION' خروجی "uname -r" است):

/lib/modules/VERSION/systemtap

هر آرگومان اضافی دیگری در خط فرمان به ماژول منتقل می‌شود. یکی از کاربردهای این آرگومان‌های اضافی ماژول، مقداردهی متغیرهای سراسری اعلان‌شده در ماژول است.

$ stap -p4 -m mod1 -e 'global var1="foo"; probe begin{printf("%s\n", var1); exit()}'

اجرای این مورد با یک آرگومان اضافی ماژول:

$ staprun mod1.ko var1="HelloWorld"
HelloWorld

در حال حاضر نمی‌توان فاصله‌ها (spaces) و علامت‌های تعجب را از این طریق به متغیرهای سراسری منتقل کرد.

برای مجموعه‌ای از اسکریپت‌های نمونه، به صفحه راهنمای stapex(3stap) مراجعه کنید.

در اینجا یک مثال بسیار ابتدایی از نحوه استفاده از staprun آورده شده است. ابتدا از stap برای کامپایل یک اسکریپت استفاده کنید. برنامه stap مسیر ماژول حاصل را گزارش می‌دهد.

$ stap -p4 -e 'probe begin { printf("Hello World!\n"); exit() }'
/home/user/.systemtap/cache/85/stap_8553d83f78c_265.ko

دستور staprun را همراه با مسیر ماژول به عنوان آرگومان اجرا کنید.

$ staprun /home/user/.systemtap/cache/85/stap_8553d83f78c_265.ko
Hello World!

پس از این‌که برنامه staprun یک ماژول هسته Systemtap را نصب کرد، کاربران می‌توانند از ماژول هسته جدا شوند (detach) و بعداً دوباره به آن متصل شوند (reattach). گزینه -L ماژول را بارگذاری کرده و به صورت خودکار از آن جدا می‌شود. کاربران همچنین می‌توانند با ارسال سیگنال SIGQUIT از طریق صفحه‌کلید (معمولاً با فشردن Ctrl-\) به صورت تعاملی از ماژول هسته جدا شوند.

برای اتصال مجدد به یک ماژول هسته، از گزینه -A برنامه staprun استفاده می‌شود.

پس از این‌که staprun برنامه stapio را اجرا کرد، در صورتی که خروجی در فایل یا فایل‌هایی نوشته شود (اجرای staprun با گزینه -o)، کاربران می‌توانند با ارسال یک سیگنال SIGUSR2 به فرآیند stapio، به آن دستور دهند که فایل خروجی را به فایل بعدی تعویض کند. هنگامی که سیگنال SIGUSR2 دریافت می‌شود، خروجی به فایل جدیدی با پسوند .N منتقل خواهد شد که در آن N شماره ترتیبی است. به عنوان مثال:

$ staprun -o foo ...

لاگ‌های ردگیری را به foo ارسال می‌کند و در صورت دریافت سیگنال SIGUSR2، خروجی را به فایل foo.1 منتقل می‌نماید. با دریافت مجدد سیگنال SIGUSR2، خروجی به فایل foo.2 منتقل خواهد شد.

ابزار Systemtap در حالت پیش‌فرض زمان‌اجرای ماژول هسته، یک ابزار مدیریتی است. این ابزار ساختارهای داده درونی هسته و اطلاعات بالقوه خصوصی کاربران را آشکار می‌سازد. برای اطلاعات بیشتر در مورد ایمنی و امنیت، به صفحه راهنمای stap(1) مراجعه کنید.

جهت افزایش امنیت سیستم، کاربران Systemtap برای اجرای این برنامه setuid با نام staprun باید کاربر ریشه (root) باشند یا در گروه stapusr عضویت داشته باشند. کاربر می‌تواند با گزینه --privilege= در stap یک سطح دسترسی خاص را انتخاب کند که staprun بعداً آن را اعمال خواهد کرد.

اعضای گروه stapdev می‌توانند ماژول‌های اسکریپت را با دسترسی‌های معادل کاربر ریشه و بدون محدودیت‌های امنیتی خاص بنویسند و بارگذاری نمایند. (بسیاری از محدودیت‌های ایمنی همچنان پابرجا هستند.)
اعضای گروه stapsys تقریباً تمام اختیارات stapdev را دارند، به جز ساختارهای حالت گورو (guru mode).
تنها اعضای گروه stapusr می‌توانند هر ماژول دارای مجوزی را که توسط مدیر سیستم در مسیر /lib/modules/VERSION/systemtap قرار داده شده است اجرا کنند.
تنها اعضای گروه stapusr همچنین می‌توانند ماژول‌های اسکریپت با سطح دسترسی پایین را بنویسند و بارگذاری کنند، که این ماژول‌ها معمولاً به دستکاری فرآیندهای خودشان محدود هستند (نه هسته و نه فرآیندهای سایر کاربران).

بخشی از سازوکار اعمال اختیارات ممکن است مستلزم استفاده از یک stap-server و اعتماد مدیریتی به امضاکننده رمزنگاری‌شده آن باشد؛ برای اطلاعات بیشتر به صفحه راهنمای stap-server(8) مراجعه کنید.

در هسته‌ای که حالت FIPS فعال باشد، staprun معمولاً از تلاش برای بارگذاری ماژول‌های هسته ایجادشده توسط Systemtap خودداری می‌کند؛ زیرا در برخی هسته‌ها این کار منجر به کرنل پنیک (kernel panic) می‌شود. اگر هسته شما شامل اصلاحیه‌هایی نظیر کامیت لینوکس #002c77a48b47 است، می‌توانید با تنظیم متغیر محیطی STAP_FIPS_OVERRIDE به هر مقداری، staprun را در هر صورت وادار به بارگذاری ماژول کنید.

/lib/modules/VERSION/systemtap
اگر MODULE نام یک ماژول باشد، ماژول در این دایرکتوری جستجو می‌شود. کاربرانی که فقط در گروه stapusr هستند می‌توانند ماژول‌های مستقر در این دایرکتوری را نصب کنند. این دایرکتوری باید در مالکیت کاربر ریشه (root) بوده و برای همگان قابل نوشتن نباشد.

stap(1), stapprobes(3stap), stap-server(8), stapdyn(8), stapex(3stap)

از پیوند باگ‌زیلا (Bugzilla) در صفحه وب پروژه یا فهرست پستی ما استفاده کنید: http://sourceware.org/systemtap، <systemtap@sourceware.org>.