FAKECHROOT(1) FAKECHROOT(1) نام (NAME) fakechroot - ایجاد یک محیط chroot ساختگی خلاصه دستور (SYNOPSIS) fakechroot [-s|--use-system-libs] [-l|--lib library] [-d|--elfloader ldso] [-e|--environment type] [-c|--config-dir directory] [-b|--bindir directory] [--] [command] fakechroot -h|--help fakechroot -v|--version توضیحات (DESCRIPTION) دستور fakechroot فرمانی را در محیطی اجرا می‌کند که در آن امکان استفاده از دستور chroot(8) بدون داشتن امتیازات ریشه (root) فراهم شده است. این ابزار برای این سودمند است که به کاربران اجازه دهد محیط chrooted اختصاصی خود را بسازند و بسته‌های دیگر را بدون نیاز به دسترسی‌های ریشه نصب کنند. ابزار fakechroot برخی از توابع کتابخانه C (chroot(2)، open(2) و غیره) را با توابعی جایگزین می‌کند که اثر فراخوانی شدن با امتیازات ریشه را شبیه‌سازی می‌نمایند. این توابع پوششی (wrapper) به عنوان یک کتابخانه مشترک libfakechroot.so ارائه می‌شوند که از طریق سازوکار "LD_PRELOAD" بارگذار پویای سیستم (dynamic loader) بارگذاری می‌گردد (به ld.so(8) نگاه کنید). در یک chroot ساختگی، می‌توانید به عنوان مثال با دستور debootstrap(8) سیستم پایه دبیان را نصب کنید. در چنین محیطی می‌توانید دستورهایی مانند apt-get(8) را برای نصب بسته‌های دیگر اجرا کنید. شما نیازی به دسترسی‌های ویژه ندارید و می‌توانید آن را در حساب کاربری معمولی اجرا نمایید. گزینه‌ها (OPTIONS) -b|--bindir directory مشخص کردن دایرکتوری حاوی فایل‌های اجرایی جایگزین ارائه‌شده همراه با fakechroot. این پرونده‌ها اسکریپت‌هایی با پسوند ".fakechroot" هستند. به صورت پیش‌فرض آنها در دایرکتوری‌های "bin" و "sbin" در پیشوند نصب fakechroot توزیع می‌شوند، اما گاهی یک مکان ثابت در زمان ساخت امکان‌پذیر نیست. -c|--config-dir directory مشخص کردن دایرکتوری حاوی پیکربندی‌های اضافی برای fakechroot. دایرکتوری‌های پیش‌فرض "$HOME/.fakechroot" و "/etc/fakechroot" هستند. -d ldso|--elfloader ldso مشخص کردن پیونددهنده پویای (dynamic linker) جایگزین. این بارگذار پویا مستقیماً فراخوانی خواهد شد. -e|--environment type بارگذاری پیکربندی اضافی به همراه محیط. این فایل پیکربندی یک اسکریپت شل است که پیش از فراخوانی command اجرا می‌شود. این اسکریپت می‌تواند متغیرهای محیطی اضافی تنظیم کند؛ به عنوان مثال: "FAKECHROOT_EXCLUDE_PATH"، "FAKECHROOT_CMD_SUBST" یا "LD_LIBRARY_PATH". نوع محیط بر اساس نام دستور پس از حذف پسوند اختیاری حدس زده می‌شود (برای نمونه اجرای gettext.sh فایل محیطی "gettext" را بارگذاری می‌کند). اگر آرگومان command برابر fakeroot(1) باشد، این آرگومان نادیده گرفته شده و آرگومان بعدی به عنوان نوع محیط در نظر گرفته می‌شود. نام فایل پیکربندی type.env است و در دایرکتوری‌های $HOME/.fakechroot و /etc/fakechroot جستجو می‌شود. نوع محیط پیش‌فرض default است و نام فایل پیکربندی آن "default.env" می‌باشد. محیط ویژه none به این معنی است که اصلاً هیچ تنظیمات محیطی بارگذاری نمی‌شود. -l library|--lib library مشخص کردن کتابخانه پوششی (wrapper) جایگزین. پیش‌فرض libfakechroot.so است. -h|--help نمایش راهنما. -s|--use-system-libs استفاده از کتابخانه‌های سیستم قبل از کتابخانه‌های chroot. این گزینه می‌تواند راه‌حلی باشد اگر پیونددهنده پویای سیستم نتواند libc.so را از chroot ساختگی بارگذاری کند. اگر خطاهای زیر را مشاهده کردید، این تنظیم را امتحان کنید: $ fakechroot /usr/sbin/chroot /tmp/sarge /bin/true /bin/true: relocation error: /srv/sarge/lib/tls/libc.so.6: symbol _dl _starting_up, version GLIBC_PRIVATE not defined in file ld-linux.so.2 with link time reference $ fakechroot /usr/sbin/chroot /tmp/centos4 /bin/true Segmentation fault -v|--version نمایش نگارش. [--] command هر دستوری که می‌خواهید به عنوان fakechroot اجرا شود. اگر دستور شامل گزینه‌های دیگری است که ممکن است با تجزیه گزینه‌های fakechroot تداخل داشته باشد، از '--' استفاده کنید. مثال‌ها (EXAMPLES) یک نشست نمونه با fakechroot: $ id uid=1000(dexter) gid=1000(dexter) groups=1000(dexter) $ fakechroot fakeroot debootstrap sid /tmp/sid I: Retrieving Release I: Retrieving Release.gpg I: Checking Release signature ... I: Base system installed successfully. $ fakechroot fakeroot chroot /tmp/sid apt-get install -q hello Reading package lists... Building dependency tree... Reading state information... The following NEW packages will be installed: hello 0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. Need to get 57.4 kB of archives. After this operation, 558 kB of additional disk space will be used. Get:1 http://ftp.us.debian.org/debian/ sid/main hello amd64 2.8-4 [57.4 kB] Fetched 57.4 kB in 0s (127 kB/s) Selecting previously unselected package hello. (Reading database ... 24594 files and directories currently installed.) Unpacking hello (from .../archives/hello_2.8-4_amd64.deb) ... Processing triggers for man-db ... Processing triggers for install-info ... Setting up hello (2.8-4) ... $ fakechroot chroot /tmp/sid hello Hello, world! فیک‌روت (FAKEROOT) ابزار fakeroot(1) یک ابزار مکمل است که محیط root را شبیه‌سازی می‌کند. fakeroot و fakechroot ممکن است توابع کتابخانه C یکسانی را پوشش دهند، به عنوان مثال تابع mknod(2). بسیار مهم است که محیط ساختگی را با ترتیب مناسب آغاز کنید. fakeroot باید در داخل fakechroot اجرا شود: $ fakechroot fakeroot chroot /tmp/sid /bin/mknod /tmp/device c 1 2 جنبه‌های امنیتی (SECURITY ASPECTS) برنامه fakechroot یک برنامه معمولی و غیر setuid است. این ابزار امتیازات کاربر را افزایش نمی‌دهد. نباید از fakechroot به عنوان ابزاری برای ارتقای امنیت سیستم مانند جداسازی و قرنطینه‌سازی (sandboxing) برنامه‌ها استفاده شود. فرار از یک محیط chroot ساختگی بسیار آسان است. دستور fakechroot نباید با امتیازات واقعی ریشه اجرا شود. این کار ممکن است امنیت سیستم را کاهش دهد زیرا fakechroot نگارش‌های اختصاصی از توابع اصلی را با رفتارهایی وابسته به متغیرهای محیطی فراهم می‌کند. فایل‌ها (FILES) libfakechroot.so کتابخانه مشترک حاوی توابع پوششی (wrapper). محیط (ENVIRONMENT) FAKECHROOT مقدار آن برای محیط chroot ساختگی برابر true است. FAKECHROOT_AF_UNIX_PATH دایرکتوری ریشه برای سوکت‌های یونیکس. مقدار پیش‌فرض آن مشابه "FAKECHROOT_BASE" است و در صورتی که "FAKECHROOT_BASE" خیلی طولانی باشد و مسیر سوکت یونیکس از محدودیت 108 بایت فراتر رود، می‌تواند جداگانه تنظیم شود. FAKECHROOT_BASE دایرکتوری ریشه محیط chroot ساختگی. FAKECHROOT_CMD_SUBST فهرستی از جایگزینی‌های دستور. اگر برنامه‌ای تلاش کند یکی از دستورهای مشخص‌شده را اجرا کند (مسیر نسبت به chroot، نقطه پایانی حذف می‌شود)، دستور جایگزین به جای آن اجرا خواهد شد (مسیر دستور جایگزین chrooted نیست). دستور جایگزین متغیرهای "FAKECHROOT_*" را به ارث می‌برد، به جز متغیر اصلی "FAKECHROOT_BASE" که به عنوان "FAKECHROOT_BASE_ORIG" ذخیره می‌شود. این بدان معناست که دستور جایگزین‌شده در خارج از محیط fakechroot اجرا می‌شود. همچنین نام دستور اصلی به عنوان "FAKECHROOT_CMD_ORIG" ذخیره می‌گردد. به عنوان مثال: export FAKECHROOT_CMD_SUBST=/usr/bin/mkfifo=/bin/true دستور "/bin/true" را به جای "/usr/bin/mkfifo" قرار می‌دهد و نصب بسته دودویی sysvinit را ممکن می‌سازد. می‌توانید به تعداد دلخواه دستورهای جایگزین را با جداکننده دو نقطه ":" مشخص کنید. پیشنهاد می‌شود حداقل موارد زیر جایگزین شوند: • "/bin/mount=/bin/true" • "/sbin/insserv=/bin/true" • "/sbin/ldconfig=/bin/true" • "/usr/bin/env=/usr/bin/env.fakechroot" • "/usr/bin/ischroot=/bin/true" • "/usr/bin/ldd=/usr/bin/ldd.fakechroot" • "/usr/bin/mkfifo=/bin/true" تا ابزار debootstrap(8) به درستی کار کند. برای جلوگیری از بروز حلقه‌های تکرار، جایگزینی دستور فقط در صورتی انجام می‌شود که متغیر "FAKECHROOT_CMD_ORIG" در حال حاضر تنظیم نشده باشد. FAKECHROOT_DEBUG در صورت تنظیم بودن این متغیر، کتابخانه fakechroot اطلاعات اشکال‌زدایی را تخلیه می‌کند. FAKECHROOT_DETECT اگر این متغیر تنظیم شده باشد، رشته "fakechroot version" در خروجی استاندارد چاپ شده و فرآیند جاری با وضعیت دریافت شده از این متغیر خاتمه می‌یابد. این می‌تواند روشی برای بررسی بارگذاری صحیح fakechroot باشد. $ case "`FAKECHROOT_DETECT=1 /bin/echo`" in fakechroot*) echo LOADED;; esac FAKECHROOT_ELFLOADER مسیری به یک پیونددهنده پویای دیگر (مثلاً /lib/ld-linux.so.2 برای معماری i386، یا /lib64/ld-linux-x86-64.so.2 برای معماری x86_64). این پیونددهنده پویا مستقیماً فراخوانی خواهد شد. پیونددهنده پویا اجازه تغییر "argv[0]" به جز نام فایل اجرایی را نمی‌دهد، بنابراین برخی برنامه‌ها به درستی کار نخواهند کرد، مانند busybox(1). FAKECHROOT_EXCLUDE_PATH فهرستی از دایرکتوری‌ها که از شمول chroot خارج می‌شوند. عناصر فهرست با دو نقطه (:) از هم جدا می‌شوند. دایرکتوری‌های /dev، /proc و /sys در صورتی که این متغیر محیطی تنظیم نشده باشد، به صورت پیش‌فرض مستثنی هستند. این فهرست باید حداکثر شامل ۱۰۰ عنصر باشد. FAKECHROOT_EXTRA_LIBRARY_PATH فهرستی از دایرکتوری‌های اضافی در محیط chroot ساختگی که به متغیر "LD_LIBRARY_PATH" افزوده می‌شوند. این دایرکتوری‌ها ممکن است توسط برخی دستورهای مهم که از کتابخانه‌های واقع در runpath استفاده می‌کنند به کار روند. در این حالت پیونددهنده پویا نمی‌تواند بدون این مسیرهای اضافی کتابخانه، دایرکتوری درست را در محیط chroot ساختگی پیدا کند. مقدار پیش‌فرض "/lib/systemd:/usr/lib/man-db" برای دستورهای systemctl(1) و man(1) است. FAKECHROOT_VERSION شماره نگارش کتابخانه جاری fakechroot. LD_LIBRARY_PATH, LD_PRELOAD ابزار fakechroot با پوشش‌دهی فراخوانی‌های سیستمی پیاده‌سازی شده است. این کار با تنظیم "LD_PRELOAD=libfakechroot.so" انجام می‌شود. اگر پیونددهنده پویا نتواند این کتابخانه را پیدا کند، فایل /etc/ld.so.conf یا متغیر "LD_LIBRARY_PATH" باید اصلاح شوند. محدودیت‌ها (LIMITATIONS) • پرونده‌های /lib/ld-linux.so.2 و /lib64/ld-linux-x86-64.so.2 همیشه از محیط واقعی بارگذاری می‌شوند. این مسیر توسط پیونددهنده برای تمامی فایل‌های باینری هاردکد شده است. می‌توانید متغیر محیطی "FAKECHROOT_ELFLOADER" را تنظیم کرده یا از گزینه "--elfloader" استفاده کنید. • هر دستوری که در fakechroot اجرا می‌شود باید به همان نسخه از پیونددهنده پویای محیط واقعی لینک شده باشد. اگر کتابخانه‌های درون chroot سازگار نیستند، سعی کنید از گزینه "--use-system-libs" استفاده نمایید. • می‌توانید پیوندهای نمادین (symlinks) به بیرون ایجاد کنید. پیوند نمادین باید قبل از فراخوانی chroot ایجاد شده باشد. این می‌تواند برای دسترسی به دایرکتوری‌های واقعی /proc و /dev مفید باشد. همچنین می‌توانید متغیر محیطی "FAKECHROOT_EXCLUDE_PATH" را تنظیم کنید: $ export FAKECHROOT_EXCLUDE_PATH=/tmp:/proc:/dev:/sys:/var/run:/home • برنامه‌های با پیوند ایستا (statically linked) کار نمی‌کنند، به ویژه ldconfig(8)، بنابراین باید این دستور را با نسخه‌ای ساختگی بپوشانید و متغیر محیطی مناسب "FAKECHROOT_CMD_SUBST" را تنظیم نمایید. • دستور ldd(1) نیز کار نمی‌کند. باید از "alias ldd='LD_TRACE_LOADED_OBJECTS=1'" استفاده کنید یا به جای آن از یک پوشش (wrapper) بهره ببرید. این پوشش به صورت ldd.fakechroot نصب می‌شود و می‌تواند با متغیر محیطی "FAKECHROOT_CMD_SUBST" به کار رود. • برنامه‌های تمام‌صفحه در صورتی که فایل /dev/tty یک دستگاه واقعی نباشد قفل می‌کنند. فایل /dev/tty یا کل دایرکتوری /dev را به نمونه واقعی پیوند دهید یا آن را با متغیر "FAKECHROOT_EXCLUDE_PATH" از محیط chroot ساختگی خارج کنید. • توابع lckpwdf(3) و ulckpwdf(3) نادیده گرفته می‌شوند، بنابراین دستور passwd(1) باید کار کند. • شناسه کاربر (uid) واقعی شما باید در /etc/passwd وجود داشته باشد. آن را با دستور adduser --uid realuid realuser در داخل محیط chroot ساختگی ایجاد کنید. • دستور debuild(1) متغیرهای محیط را پاک می‌کند. از گزینه --preserve-env برای جلوگیری از این رفتار استفاده کنید. • دستور rpmbuild(8) از پیاده‌سازی glob(3) اختصاصی خود استفاده می‌کند که عملکرد fakechroot را مختل می‌سازد، بنابراین دایرکتوری buildroot باید در داخل و خارج fakechroot یکسان باشد. همچنین ببینید (SEE ALSO) fakeroot(1), debuild(1), debootstrap(8), rinse(8), اشکالات (BUGS) اگر با اشکالی مواجه شدید یا تمایل به پیاده‌سازی قابلیت‌های جدید دارید، لطفاً آن را در نشانی زیر گزارش کنید: نویسندگان (AUTHORS) حق نشر (c) 2003-2017, 2019 Piotr Roszatycki حق نشر (c) 2007 Mark Eichin حق نشر (c) 2006, 2007 Alexander Shishkin حق نشر (c) 2006, 2007 Lionel Tricon کپی‌رایت و تکثیر (COPYING) ابزار fakechroot تحت مجوز گنو لسر جی‌پی‌ال (LGPL 2.1 یا بالاتر) توزیع می‌شود. fakechroot 16 Mar 2019 FAKECHROOT(1)