DISTROBOX-UPGRADE(1) User Manual DISTROBOX-UPGRADE(1)

distrobox-assemble - ایجاد یا حذف دسته‌ای کانتینرها بر اساس فایل مانیفست

دستور distrobox-assemble وظیفه ایجاد یا نابودی دسته‌ای کانتینرها را بر اساس یک فایل مانیفست بر عهده دارد. فایل مانیفست به صورت پیش‌فرض ./distrobox.ini است، اما می‌توان آن را با استفاده از پرچم --file مشخص کرد.

distrobox assemble

--file:         مسیر یا نشانی (URL) فایل مانیفست/ini برای distrobox
--name/-n:      اجرا فقط برای یک مدخل منفرد در فایل مانیفست/ini
--replace/-R:   جایگزینی distroboxهای از پیش موجود با نام‌های یکسان
--dry-run/-d:   تنها چاپ دستور تولیدشده برای مدیر کانتینر
--verbose/-v:   نمایش خروجی با جزئیات بیشتر
--version/-V:   نمایش نسخه

این نمونه‌ای از یک فایل مانیفست برای ایجاد دو کانتینر است:

[ubuntu]
additional_packages="git vim tmux nodejs"
image=ubuntu:latest
init=false
nvidia=false
pull=true
root=false
replace=true
start_now=false
# می‌توانید با استفاده از # یادداشت اضافه کنید
[arch] # یادداشت‌های درون‌خطی نیز پشتیبانی می‌شوند
additional_packages="git vim tmux nodejs"
home=/tmp/home
image=archlinux:latest
init=false
start_now=true
init_hooks="touch /init-normal"
nvidia=true
pre_init_hooks="touch /pre-init"
pull=true
root=false
replace=false
volume="/tmp/test:/run/a /tmp/test:/run/b"

ایجاد (Create)

می‌توانیم آن‌ها را به سادگی با دستور زیر بالا بیاوریم:

distrobox assemble create

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

distrobox assemble create --file /my/custom/path.ini

یا حتی با استفاده از یک نشانی اینترنتی (URL)، یک فایل از راه دور را مشخص کنید:

distrobox-assemble create --file https://raw.githubusercontent.com/89luca89/dotfiles/master/distrobox.ini

جایگزینی (Replace)

به طور پیش‌فرض، distrobox assemble تنها در صورتی یک کانتینر را جایگزین می‌کند که replace=true در فایل مانیفست مشخص شده باشد.

در مثال مانیفست بالا، کانتینر ubuntu هنگام اجرای distrobox assemble create همواره جایگزین خواهد شد، در حالی که کانتینر arch جایگزین نمی‌شود.

برای اجبار به جایگزینی تمام کانتینرهای موجود در یک مانیفست، از پرچم --replace استفاده کنید:

distrobox assemble create --replace [--file my/custom/path.ini]

حذف (Remove)

می‌توانیم تمام کانتینرهای تعریف‌شده در یک فایل مانیفست را به سادگی با اجرای دستور زیر متوقف و حذف کنیم:

distrobox assemble rm

یا با استفاده از یک مسیر سفارشی برای فایل ini:

distrobox assemble rm --file my/custom/path.ini

آزمایش (Test)

همواره می‌توانید با استفاده از پرچم --dry-run آزمایش کنید که distrobox چه کاری انجام خواهد داد. این دستور فقط دستوراتی را که distrobox انجام می‌داد چاپ می‌کند، بدون اینکه واقعاً آن‌ها را اجرا کند.

شبیه‌سازی (Clone)

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

گزینه‌های موجود

این فهرستی از گزینه‌های موجود به همراه نوع داده متناظر آن‌ها است:

راهنمای انواع داده:

•
bool: مقدار true یا false
•
string: یک رشته منفرد، به عنوان مثال home="/home/luca-linux/dbox"
•
string_list: چندین رشته، به عنوان مثال additional_packages="htop vim git". توجه داشته باشید که string_list می‌تواند چندین بار برای ترکیب شدن اعلان شود:
[ubuntu]
image=ubuntu:latest
additional_packages="git vim tmux nodejs"
additional_packages="htop iftop iotop"
additional_packages="zsh fish"
نام پرچم نوع توضیحات
additional_flags string_list پرچم‌های اضافی برای ارسال به مدیر کانتینر
additional_packages string_list بسته‌های اضافی برای نصب در داخل کانتینر
home string دایرکتوری خانگی (home) مورد استفاده کانتینر
hostname string تنظیم نام میزبان (hostname) کانتینر
image string تصویری که کانتینر باید استفاده کند؛ برای مشاهده فهرست به اینجا مراجعه کنید
clone string نام کانتینر Distrobox برای استفاده به عنوان پایه کانتینر جدید (کانتینر باید متوقف شده باشد).
include string نام مدخل در مانیفست جهت گنجاندن در تعریف جاری.
init_hooks string_list دستورهایی که پس از راه‌اندازی بسته‌ها، درون کانتینر اجرا می‌شوند
pre_init_hooks string_list دستورهایی که پیش از راه‌اندازی بسته‌ها، درون کانتینر اجرا می‌شوند
volume string_list فضاهای ذخیره‌سازی (volume) اضافی برای سوار کردن درون کانتینرها
exported_apps string_list نام برنامه‌ها یا مسیرهای desktopfile برای برون‌بری
exported_bins string_list فایل‌های اجرایی (باینری) برای برون‌بری
exported_bins_path string مسیر اختیاری برای برون‌بری فایل‌های اجرایی (پیش‌فرض: $HOME/.local/bin)
entry bool تولید یک مدخل برای کانتینر در فهرست برنامه‌ها (پیش‌فرض: false)
start_now bool راه‌اندازی فوری کانتینر (پیش‌فرض: false)
init bool مشخص کردن اینکه آیا کانتینر از نوع initful است (پیش‌فرض: false)
nvidia bool مشخص کردن تمایل به فعال‌سازی یکپارچه‌سازی با درایورهای NVidia (پیش‌فرض: false)
pull bool مشخص کردن اینکه آیا تصویر هر بار دریافت (pull) شود یا خیر (پیش‌فرض: false)
root bool مشخص کردن اینکه آیا کانتینر دسترسی ریشه (rootful) دارد (پیش‌فرض: false)
unshare_groups bool مشخص کردن اینکه کانتینر گروه‌های اضافی کاربر را جداسازی (unshare) کند (پیش‌فرض: false)
unshare_ipc bool مشخص کردن اینکه کانتینر فضای‌نام ipc را جداسازی (unshare) کند (پیش‌فرض: false)
unshare_netns bool مشخص کردن اینکه کانتینر فضای‌نام شبکه را جداسازی (unshare) کند (پیش‌فرض: false)
unshare_process bool مشخص کردن اینکه کانتینر فضای‌نام فرایند (pid) را جداسازی (unshare) کند (پیش‌فرض: false)
unshare_devsys bool مشخص کردن اینکه کانتینر دایرکتوری /dev را جداسازی (unshare) کند (پیش‌فرض: false)
unshare_all bool مشخص کردن اینکه کانتینر تمام گزینه‌های جداسازی قبلی را اعمال کند (پیش‌فرض: false) .TE گزینهٔ include مشخصه‌های یک تعریف را درون تعریفی دیگر کپی می‌کند. گنجاندن‌های بازگشتی مجاز هستند. این گزینه روی فایل مانیفست اعمال می‌شود و کانتینرهای distrobox حاصل هیچ‌گونه ارتباطی با یکدیگر نخواهند داشت. لطفاً توجه داشته باشید که مشخصه‌ها در تعریف شامل‌کننده، مشخصه‌های تعریف گنجانده‌شده را بازنویسی یا پنهان (shadow) نمی‌کنند، بلکه صرفاً تکرار می‌شوند. برای توضیحات بیشتر دربارهٔ هر یک از سایر گزینه‌های موجود در فهرست، راهنمای کاربرد distrobox create را بررسی کنید؛ هر گزینه متناظر با یکی از پرچم‌های دستور create است. مثال پیشرفته [tumbleweed_distrobox] image=registry.opensuse.org/opensuse/distrobox pull=true additional_packages="acpi bash-completion findutils iproute iputils sensors inotify-tools unzip" additional_packages="net-tools nmap openssl procps psmisc rsync man tig tmux tree vim htop xclip yt-dlp" additional_packages="git git-credential-libsecret" additional_packages="patterns-devel-base-devel_basis" additional_packages="ShellCheck ansible-lint clang clang-tools codespell ctags desktop-file-utils gcc golang jq python3" additional_packages="python3-bashate python3-flake8 python3-mypy python3-pipx python3-pycodestyle python3-pyflakes python3-pylint python3-python-lsp-server python3-rstcheck python3-yapf python3-yamllint rustup shfmt" additional_packages="kubernetes-client helm" init_hooks=GOPATH="${HOME}/.local/share/system-go" GOBIN=/usr/local/bin go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest; init_hooks=GOPATH="${HOME}/.local/share/system-go" GOBIN=/usr/local/bin go install github.com/onsi/ginkgo/v2/ginkgo@latest; init_hooks=GOPATH="${HOME}/.local/share/system-go" GOBIN=/usr/local/bin go install golang.org/x/tools/cmd/goimports@latest; init_hooks=GOPATH="${HOME}/.local/share/system-go" GOBIN=/usr/local/bin go install golang.org/x/tools/gopls@latest; init_hooks=GOPATH="${HOME}/.local/share/system-go" GOBIN=/usr/local/bin go install sigs.k8s.io/kind@latest; init_hooks=ln -sf /usr/bin/distrobox-host-exec /usr/local/bin/conmon; init_hooks=ln -sf /usr/bin/distrobox-host-exec /usr/local/bin/crun; init_hooks=ln -sf /usr/bin/distrobox-host-exec /usr/local/bin/docker; init_hooks=ln -sf /usr/bin/distrobox-host-exec /usr/local/bin/docker-compose; init_hooks=ln -sf /usr/bin/distrobox-host-exec /usr/local/bin/flatpak; init_hooks=ln -sf /usr/bin/distrobox-host-exec /usr/local/bin/podman; init_hooks=ln -sf /usr/bin/distrobox-host-exec /usr/local/bin/xdg-open; exported_apps="htop" exported_bins="/usr/bin/htop /usr/bin/git" exported_bins_path="~/.local/bin" مثال همانندسازی (Clone) [ubuntu] additional_packages="git vim tmux" image=ubuntu:latest init=false nvidia=false pull=true root=false replace=true start_now=true [deno_ubuntu] clone=ubuntu init=false nvidia=false pull=true root=false replace=true start_now=true pre_init_hooks=curl -fsSL https://deno.land/install.sh | sh; [bun_ubuntu] clone=ubuntu init=false nvidia=false pull=true root=false replace=true start_now=true pre_init_hooks=curl -fsSL https://bun.sh/install | bash; مثال پوستهٔ ورود سفارشی [ubuntu] image=ubuntu:latest pre_init_hooks="export SHELL=/bin/bash;" مثال گنجاندن (ارث‌بری فیلدها از distrobox دیگر) [ubuntu] image=ubuntu:latest additional_packages="git vim tmux nodejs" additional_packages="htop iftop iotop" additional_packages="zsh fish" [ubuntu-nvidia] include=ubuntu nvidia=true ' این پروژه به ایمیج اختصاصی نیازی ندارد. این ابزار می‌تواند از هر ایمیج OCI موجود در docker-hub، quay.io، یا هر رجیستری دلخواه دیگری استفاده کند. بسیاری از ایمیج‌های ابری به منظور کاهش حجم عمداً کوچک‌سازی شده‌اند و ممکن است شامل دستورهایی مانند which، mount، less یا vi نباشند. بسته‌های اضافی را می‌توان پس از ورود به کانتینر نصب کرد. اگر نیاز دارید مکرراً کانتینرهای جدید ایجاد کنید، توصیه می‌کنیم از ابزار خودکارسازی مورد نظر خود در داخل کانتینر استفاده کنید. نگهداری ایمیج سفارشی خودتان نیز یک گزینه است. ملاحظه اصلی، وجود ابزارهای پایه‌ای لینوکس (mount)، ابزارهای پایه‌ای مدیریت کاربر (usermod, passwd) و پیکربندی صحیح sudo است. "مدیران کانتینر پشتیبانی‌شده (SUPPORTED CONTAINER MANAGERS)" دستور distrobox می‌تواند روی هر یک از podman، docker یا https://github.com/89luca89/lilipod lilipod اجرا شود. این برنامه به podman پیکربندی‌شده در حالت rootless یا docker پیکربندی‌شده بدون sudo وابسته است (از https://docs.docker.com/engine/install/linux-postinstall این دستورالعمل‌ها پیروی کنید) • 2 حداقل نسخه podman: 2.1.0 • 2 حداقل نسخه کلاینت docker: 19.03.15 • 2 حداقل نسخه lilipod: v0.0.1 راهنمای رسمی نصب را در اینجا دنبال کنید: • 2 https://podman.io/getting-started/installation • 2 https://docs.docker.com/engine/install • 2 https://docs.docker.com/engine/install/linux-postinstall "توزیع‌های کانتینر (CONTAINERS DISTROS)" مهمان‌های Distrobox با موفقیت با ایمیج‌های کانتینر زیر آزمایش شده‌اند: tab(@); lw(23.3n) lw(23.3n) lw(23.3n). T{ توزیع
نسخه
T} ایمیج‌ها
AlmaLinux (Toolbox) 8 9 quay.io/toolbx-images/almalinux-toolbox:8 quay.io/toolbx-images/almalinux-toolbox:9 quay.io/toolbx-images/almalinux-toolbox:latest
Alpine (Toolbox) 3.20 3.21 3.22 edge quay.io/toolbx-images/alpine-toolbox:3.20 quay.io/toolbx-images/alpine-toolbox:3.21 quay.io/toolbx-images/alpine-toolbox:3.22 quay.io/toolbx-images/alpine-toolbox:edge quay.io/toolbx-images/alpine-toolbox:latest
AmazonLinux (Toolbox) 2 2022 quay.io/toolbx-images/amazonlinux-toolbox:2 quay.io/toolbx-images/amazonlinux-toolbox:2023 quay.io/toolbx-images/amazonlinux-toolbox:latest
Archlinux (Toolbox) quay.io/toolbx/arch-toolbox:latest
ALT Linux p10 p11 sisyphus docker.io/library/alt:p10 docker.io/library/alt:p11 docker.io/library/alt:sisyphus
Bazzite Arch ghcr.io/ublue-os/bazzite-arch:latest ghcr.io/ublue-os/bazzite-arch-gnome:latest
Centos (Toolbox) stream9 stream10 quay.io/toolbx-images/centos-toolbox:stream9 quay.io/toolbx-images/centos-toolbox:stream10 quay.io/toolbx-images/centos-toolbox:latest
Debian (Toolbox) 11 12 13 testing unstable quay.io/toolbx-images/debian-toolbox:11 quay.io/toolbx-images/debian-toolbox:12 quay.io/toolbx-images/debian-toolbox:13 quay.io/toolbx-images/debian-toolbox:testing quay.io/toolbx-images/debian-toolbox:unstable quay.io/toolbx-images/debian-toolbox:latest
Fedora (Toolbox) 38 39 40 41 42 43 Rawhide registry.fedoraproject.org/fedora-toolbox:38 registry.fedoraproject.org/fedora-toolbox:39 registry.fedoraproject.org/fedora-toolbox:40 quay.io/fedora/fedora-toolbox:41 quay.io/fedora/fedora-toolbox:42 quay.io/fedora/fedora-toolbox:43 quay.io/fedora/fedora-toolbox:rawhide
openSUSE (Toolbox) registry.opensuse.org/opensuse/distrobox:latest
RedHat (Toolbox) 8 9 registry.access.redhat.com/ubi8/toolbox registry.access.redhat.com/ubi9/toolbox
Rocky Linux (Toolbox) 8 9 quay.io/toolbx-images/rockylinux-toolbox:8 quay.io/toolbx-images/rockylinux-toolbox:9 quay.io/toolbx-images/rockylinux-toolbox:latest
Ubuntu (Toolbox) 16.04 18.04 20.04 22.04 24.04 quay.io/toolbx/ubuntu-toolbox:16.04 quay.io/toolbx/ubuntu-toolbox:18.04 quay.io/toolbx/ubuntu-toolbox:20.04 quay.io/toolbx/ubuntu-toolbox:22.04 quay.io/toolbx/ubuntu-toolbox:24.04 quay.io/toolbx/ubuntu-toolbox:latest
Chainguard Wolfi (Toolbox) quay.io/toolbx-images/wolfi-toolbox:latest
Ublue ubuntu-toolbox fedora-toolbox wolfi-toolbox archlinux-distrobox ghcr.io/ublue-os/ubuntu-toolbox ghcr.io/ublue-os/fedora-toolbox ghcr.io/ublue-os/wolfi-toolbox ghcr.io/ublue-os/arch-toolbox
AlmaLinux 8 8-minimal 9 9-minimal docker.io/library/almalinux:8 docker.io/library/almalinux:9
Alpine Linux 3.20 3.21 3.22 edge docker.io/library/alpine:3.20 docker.io/library/alpine:3.21 docker.io/library/alpine:3.22 docker.io/library/alpine:edge docker.io/library/alpine:latest
AmazonLinux 1 2 2023 public.ecr.aws/amazonlinux/amazonlinux:1 public.ecr.aws/amazonlinux/amazonlinux:2 public.ecr.aws/amazonlinux/amazonlinux:2023
Archlinux docker.io/library/archlinux:latest
Blackarch docker.io/blackarchlinux/blackarch:latest
CentOS Stream 8 9 10 quay.io/centos/centos:stream8 quay.io/centos/centos:stream9 quay.io/centos/centos:stream10
Chainguard Wolfi cgr.dev/chainguard/wolfi-base:latest
Chimera Linux docker.io/chimeralinux/chimera:latest
Crystal Linux registry.gitlab.com/crystal-linux/misc/docker:latest
Debian 7 8 9 10 11 12 13 docker.io/debian/eol:wheezy docker.io/debian/eol:buster docker.io/debian/eol:bullseye docker.io/library/debian:bookworm-backports docker.io/library/debian:stable-backports
Debian Testing docker.io/library/debian:testing docker.io/library/debian:testing-backports
Debian Unstable docker.io/library/debian:unstable
deepin 20 (apricot) 23 (beige) docker.io/linuxdeepin/apricot docker.io/linuxdeepin/deepin:beige
Fedora 38 39 40 41 42 43 Rawhide quay.io/fedora/fedora:38 quay.io/fedora/fedora:39 quay.io/fedora/fedora:40 quay.io/fedora/fedora:41 quay.io/fedora/fedora:42 quay.io/fedora/fedora:43 quay.io/fedora/fedora:rawhide
Gentoo Linux rolling docker.io/gentoo/stage3:latest
KDE neon Latest invent-registry.kde.org/neon/docker-images/plasma:latest
Kali Linux rolling docker.io/kalilinux/kali-rolling:latest
Mint 22.3 docker.io/linuxmintd/mint22.3-amd64
Neurodebian nd120 docker.io/library/neurodebian:nd120
openSUSE Leap registry.opensuse.org/opensuse/leap:latest
openSUSE Tumbleweed registry.opensuse.org/opensuse/distrobox:latest registry.opensuse.org/opensuse/tumbleweed:latest registry.opensuse.org/opensuse/toolbox:latest registry.opensuse.org/opensuse/distrobox-bpftrace:latest
Oracle Linux 8 8-slim 9 9-slim 10 10-slim container-registry.oracle.com/os/oraclelinux:8 container-registry.oracle.com/os/oraclelinux:8-slim container-registry.oracle.com/os/oraclelinux:9 container-registry.oracle.com/os/oraclelinux:9-slim container-registry.oracle.com/os/oraclelinux:10 container-registry.oracle.com/os/oraclelinux:10-slim
RedHat (UBI) 7 8 9 registry.access.redhat.com/ubi7/ubi registry.access.redhat.com/ubi8/ubi  registry.access.redhat.com/ubi8/ubi-init registry.access.redhat.com/ubi8/ubi-minimal registry.access.redhat.com/ubi9/ubi registry.access.redhat.com/ubi9/ubi-init registry.access.redhat.com/ubi9/ubi-minimal
Rocky Linux 8 8-minimal 9 quay.io/rockylinux/rockylinux:8 quay.io/rockylinux/rockylinux:8-minimal quay.io/rockylinux/rockylinux:9 quay.io/rockylinux/rockylinux:latest
Slackware docker.io/vbatts/slackware:current
SteamOS ghcr.io/linuxserver/steamos:latest
Ubuntu 14.04 16.04 18.04 20.04 22.04 24.04 docker.io/library/ubuntu:14.04 docker.io/library/ubuntu:16.04 docker.io/library/ubuntu:18.04 docker.io/library/ubuntu:20.04 docker.io/library/ubuntu:22.04 docker.io/library/ubuntu:24.04
Vanilla OS VSO ghcr.io/vanilla-os/vso:main
Void Linux glibc musl ghcr.io/void-linux/void-glibc-full:latest ghcr.io/void-linux/void-musl-full:latest
تصویرهای علامت‌گذاری‌شده با Toolbox تصویرهای سفارشی حاصل تلاش‌های جامعه در
https://github.com/toolbx-images/images
toolbx-images/images
 هستند، بنابراین برای استفاده در میزکار مناسب‌تر بوده و راه‌اندازی نخست آن‌ها زمان کمتری می‌برد.
با این وجود توجه داشته باشید اگر از یک تصویر از‌پیش‌پیکربندی‌نشده برای toolbox استفاده کنید، نخستین اجرای distrobox-enter ممکن است مدتی طول بکشد، زیرا وابستگی‌های ناموجود را بارگیری و نصب خواهد کرد.
هزینهٔ زمانی اندکی که برای توانایی استفاده از هر نوع تصویری پرداخت می‌شود.
این مورد پس از مرتبهٔ اول رخ نخواهد داد؛ ورودهای بعدی بسیار سریع‌تر خواهند بود.
توزیع NixOS به عنوان یک کانتینر پشتیبانی نمی‌شود و در حال حاضر هیچ برنامه‌ای برای افزودن پشتیبانی از آن وجود ندارد.
اگر به دنبال محیط‌های بدون امتیاز (unprivileged) برای NixOS هستید، پیشنهاد می‌کنیم به
https://nixos.org/manual/nix/unstable/command-ref/nix-shell.html
nix-shell
 یا
https://github.com/DavHau/nix-portable
nix portable
 نگاهی بیندازید.
پشتیبانی از توزیع‌های جدید (NEW DISTRO SUPPORT)
اگر توزیع انتخابی شما در فهرست نیست، یک issue برای درخواست پشتیبانی از آن باز کنید؛ ما می‌توانیم با همکاری یکدیگر بررسی کنیم که آیا افزودن پشتیبانی برای آن امکان‌پذیر است یا خیر.
یا به‌سادگی آن را به هر حال امتحان کنید؛ اگر کار کرد، یک issue باز کنید تا به فهرست اضافه شود!
توزیع‌های قدیمی‌تر (OLDER DISTRIBUTIONS)
برای توزیع‌های قدیمی‌تر مانند CentOS 5، CentOS 6، Debian 6 و Ubuntu 12.04، سازگاری تضمین نمی‌شود.
نسخهٔ libc آن‌ها با نسخه‌های هستهٔ >=4.11 به بعد ناسازگار است.
یک راهکار برای این مسئله، استفاده از پرچم vsyscall=emulate در بوت‌لودر میزبان است.
همچنین به یاد داشته باشید که ممکن است آینه‌ها برای چنین نسخه‌های قدیمی از دسترس خارج شده باشند، بنابراین لازم است یک تصویر سفارشی distrobox بسازید تا مطمئن شوید نیازمندی‌های اولیه برآورده شده‌اند.
پشتیبانی از شتاب‌دهنده گرافیکی (GPU ACCELERATION SUPPORT)
برای پردازنده‌های گرافیکی Intel و AMD، پشتیبانی توکار است، زیرا کانتینرها آخرین راه‌اندازهای mesa/dri موجود را نصب خواهند کرد.
برای NVidia، می‌توانید در زمان ساخت از پرچم --nvidia استفاده کنید؛ مستندات distrobox-create را بررسی کنید تا از نحوهٔ استفاده از آن مطلع شوید.
همچنین، می‌توانید از ابزار nvidia-container-toolkit برای راه‌اندازی این یکپارچه‌سازی، مستقل از پرچم اختصاصی distrobox استفاده کنید.
"نام (NAME)"
distrobox create
distrobox-create
"توضیحات (DESCRIPTION)"
دستور distrobox-create وظیفهٔ ساخت کانتینر با نام و تصویر ورودی را بر عهده دارد.
کانتینر ایجادشده به طور یکپارچه با سیستم میزبان ادغام خواهد شد و امکان اشتراک‌گذاری دایرکتوری HOME کاربر، حافظه ذخیره‌سازی خارجی، دستگاه‌های usb خارجی، برنامه‌های گرافیکی (X11/Wayland) و صدا را فراهم می‌سازد.
"خلاصه دستور (SYNOPSIS)"
distrobox create
--image/-i: تصویر مورد استفاده برای کانتینر پیش‌فرض: ${container_image_default}
--name/-n: نام برای distrobox پیش‌فرض: ${container_name_default}
--hostname: نام میزبان برای distrobox پیش‌فرض: <container-name>.$(uname -n)
--pull/-p: دریافت تصویر حتی در صورت وجود محلی (به همراه --yes)
--yes/-Y: غیرتعاملی، دریافت تصویرها بدون پرسش
--root/-r: اجرای podman/docker/lilipod با دسترسی‌های ریشه. توجه کنید که در صورت نیاز به دسترسی ریشه، این روش
نسبت به "sudo distrobox" ارجح است (نکته: در صورت لزومِ استفاده از برنامه‌ای غیر از 'sudo' برای دسترسی ریشه،
آن را از طریق متغیر محیطی DBX_SUDO_PROGRAM یا متغیر پیکربندی 'distrobox_sudo_program' مشخص کنید)
--clone/-c: نام کانتینر distrobox برای استفاده به عنوان پایه برای یک کانتینر جدید
این گزینه برای تغییر نام یک distrobox موجود یا داشتن چند نسخه
از همان محیط کاربردی خواهد بود.
--home/-H: انتخاب یک دایرکتوری HOME سفارشی برای کانتینر. مفید برای جلوگیری از پر شدن خانهٔ میزبان با فایل‌های موقت.
--volume: حجم‌های اضافی برای افزودن به کانتینر
--additional-flags/-a: پرچم‌های اضافی برای ارسال به دستور مدیر کانتینر
--additional-packages/-ap: بسته‌های اضافی برای نصب در زمان راه‌اندازی اولیهٔ کانتینر
--init-hooks: دستورهای اضافی برای اجرا در پایان مقداردهی اولیهٔ کانتینر
--pre-init-hooks: دستورهای اضافی برای اجرا در ابتدای مقداردهی اولیهٔ کانتینر
--init/-I: استفاده از سیستم init (مانند systemd) درون کانتینر.
این کار باعث می‌شود فرآیندهای میزبان از داخل کانتینر قابل مشاهده نباشند. (به همراه --unshare-process)
بسته به تصویر کانتینر ممکن است به بسته‌های اضافی نیاز داشته باشد: https://github.com/89luca89/distrobox/blob/main/docs/useful_tips.md#using-init-system-inside-a-distrobox
--nvidia: تلاش برای یکپارچه‌سازی راه‌اندازهای nVidia میزبان در مهمان
--platform: مشخص کردن پلتفرم مورد استفاده، مثلاً: linux/arm64
--unshare-devsys: عدم اشتراک‌گذاری دستگاه‌های میزبان و دایرکتوری‌های sysfs از میزبان
--unshare-groups: عدم انتقال گروه‌های اضافی کاربر به درون کانتینر
--unshare-ipc: عدم اشتراک‌گذاری فضای نام ipc با میزبان
--unshare-netns: عدم اشتراک‌گذاری فضای نام net با میزبان
--unshare-process: عدم اشتراک‌گذاری فضای نام process با میزبان
--unshare-all: فعال‌سازی همهٔ پرچم‌های unshare زیر
--compatibility/-C: نمایش فهرست تصویرهای سازگار
--help/-h: نمایش این پیام
--no-entry: عدم ایجاد ورودی کانتینر در فهرست برنامه‌ها
--dry-run/-d: صرفاً چاپ دستور تولیدشدهٔ مدیر کانتینر
--verbose/-v: نمایش جزئیات بیشتر
--version/-V: نمایش نسخه
--absolutely-disable-root-password-i-am-really-positively-sure: ⚠️ ⚠️ هنگام راه‌اندازی distrobox با دسترسی ریشه، این گزینه از تنظیم گذرواژه کاربر صرف‌نظر کرده و آن را خالی می‌گذارد. ⚠️ ⚠️
"سازگاری (COMPATIBILITY)"
برای مشاهده فهرستی از ایمیج‌ها و مدیرهای کانتینر سازگار، لطفاً به صفحات راهنما مراجعه کنید:
man distrobox
man distrobox-compatibility
یا به صفحه مستندات در پیوند زیر مراجعه نمایید: https://github.com/89luca89/distrobox/blob/main/docs/compatibility.md#containers-distros
"مثال‌ها (EXAMPLES)"
ایجاد یک distrobox با ایمیج alpine به نام کانتینر my-alpine
distrobox create --image alpine my-alpine-container
ایجاد یک distrobox از ایمیج fedora-toolbox:35
distrobox create --image registry.fedoraproject.org/fedora-toolbox:35 --name fedora-toolbox-35
شبیه‌سازی (کلون) یک کانتینر distrobox موجود
distrobox create --clone fedora-35 --name fedora-35-copy
دریافت همیشگی (pull) ایمیج جدید هنگام ایجاد یک distrobox
distrobox create --pull --image centos:stream9 --home ~/distrobox/centos9
افزودن متغیرهای محیطی اضافی به کانتینر
distrobox create --image fedora:35 --name test --additional-flags "--env MY_VAR=value"
افزودن volume‌های اضافی به کانتینر
distrobox create --image fedora:35 --name test --volume /opt/my-dir:/usr/local/my-dir:rw --additional-flags "--pids-limit -1"
افزودن بسته‌های اضافی به کانتینر
distrobox create --image alpine:latest --name test2 --additional-packages "git tmux vim"
استفاده از init-hooks برای انجام یک عملیات هنگام راه‌اندازی کانتینر
distrobox create --image alpine:latest --name test --init-hooks "touch /var/tmp/test1 && touch /var/tmp/test2"
استفاده از pre-init-hooks برای انجام یک عملیات در ابتدای راه‌اندازی کانتینر (پیش از آغاز به کار هرگونه مدیر بسته)
distrobox create -i docker.io/almalinux/8-init --init --name test --pre-init-hooks "dnf config-manager --enable powertools && dnf -y install epel-release"
استفاده از init برای ایجاد یک کانتینر Systemd (مشابه عملکرد یک LXC):
distrobox create -i ubuntu:latest --name test --additional-packages "systemd libpam-systemd pipewire-audio-client-libraries" --init
استفاده از init برای ایجاد یک کانتینر OpenRC (مشابه عملکرد یک LXC):
distrobox create -i alpine:latest --name test --additional-packages "openrc" --init
استفاده از قابلیت یکپارچه‌سازی درایورهای NVidia میزبان
distrobox create --image ubuntu:22.04 --name ubuntu-nvidia --nvidia
عدم استفاده از IP میزبان درون کانتینر:
distrobox create --image ubuntu:latest --name test --unshare-netns
ایجاد یک کانتینر ایزوله‌تر که در آن تنها $HOME، سوکت‌های اولیه و فایل‌سیستم میزبان (در /run/host) به اشتراک گذاشته می‌شوند:
distrobox create --name unshared-test --unshare-all
ایجاد یک کانتینر ایزوله‌تر به همراه سامانه init اختصاصی آن؛ این حالت عملکردی بسیار شبیه به یک کانتینر کامل LXC خواهد داشت:
distrobox create --name unshared-init-test --unshare-all --init --image fedora:latest
استفاده از متغیرهای محیطی برای تعیین نام کانتینر، ایمیج و مدیر کانتینر:
DBX_CONTAINER_MANAGER="docker" DBX_NON_INTERACTIVE=1 DBX_CONTAINER_NAME=test-alpine DBX_CONTAINER_IMAGE=alpine distrobox-create
DBX_CONTAINER_ALWAYS_PULL
DBX_CONTAINER_CUSTOM_HOME
DBX_CONTAINER_HOME_PREFIX
DBX_CONTAINER_IMAGE
DBX_CONTAINER_MANAGER
DBX_CONTAINER_NAME
DBX_CONTAINER_HOSTNAME
DBX_NON_INTERACTIVE
DBX_SUDO_PROGRAM
متغیر DBX_CONTAINER_HOME_PREFIX مشخص می‌کند که دایرکتوری‌های خانگی کانتینرها در کجا قرار خواهند گرفت.
اگر آن را به‌صورت ~/dbx تعریف کنید، دایرکتوری خانگی همهٔ کانتینرهای بعدی ~/dbx/$container_name خواهد بود.
"موارد تکمیلی (EXTRA)"
گزینهٔ --additional-flags یا -a برای تغییر مقادیر پیش‌فرض هنگام ساخت کانتینر مفید است.
برای مثال:
distrobox create -i docker.io/library/archlinux -n dev-arch
podman container inspect dev-arch | jq '.[0].HostConfig.PidsLimit'
2048
distrobox rm -f dev-arch
distrobox create -i docker.io/library/archlinux -n dev-arch --volume $CBL_TC:/tc --additional-flags "--pids-limit -1"
podman container inspect dev-arch | jq '.[0].HostConfig,.PidsLimit'
0
فضاهای ذخیره‌سازی اضافی (volumes) را می‌توان با پرچم --volume مشخص کرد.
این پرچم برای تعیین نقطهٔ اتصال (mount point) از همان استاندارد docker و podman پیروی می‌کند، بنابراین قالب آن به‌صورت --volume SOURCE_PATH:DEST_PATH:MODE است.
distrobox create --image docker.io/library/archlinux --name dev-arch --volume /usr/share/:/var/test:ro
هنگام ساخت کانتینر، می‌توان (با استفاده از additional-flags) برخی متغیرهای محیطی را تعیین کرد که درون کانتینر ماندگار بوده و از محیط شما مستقل باشند:
distrobox create --image fedora:35 --name test --additional-flags "--env MY_VAR=value"
گزینهٔ --init-hooks برای افزودن دستورات به نقطهٔ ورود (init) کانتینر کاربرد دارد.
این قابلیت برای ساخت کانتینرهایی با مجموعه‌ای از برنامه‌های از پیش نصب‌شده یا افزودن کاربران و گروه‌ها مفید است.
distrobox create --image fedora:35 --name test --init-hooks "dnf groupinstall -y \"C Development Tools and Libraries\""
گزینهٔ --init برای ساخت کانتینری مفید است که از سیستم init مجزای داخلی خود استفاده می‌کند.
برای نمونه با استفاده از:
distrobox create -i docker.io/almalinux/8-init --init --name test
distrobox create -i docker.io/library/debian --additional-packages "systemd" --init --name test-debian
در داخل کانتینر قادر خواهیم بود از واحدهای عادی systemd استفاده کنیم:
~$ distrobox enter test
user@test:~$ sudo systemctl enable --now sshd
user@test:~$ sudo systemctl status sshd
● sshd.service - OpenSSH server daemon
Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2022-01-28 22:54:50 CET; 17s ago
Docs: man:sshd(8)
man:sshd_config(5)
Main PID: 291 (sshd)
توجه داشته باشید که فعال‌سازی --init یکپارچه‌سازی فرآیندهای میزبان را غیرفعال خواهد کرد.
از درون کانتینر قادر به دیدن و مدیریت فرآیندهای میزبان نخواهید بود.
این امر به این دلیل ضروری است که /sbin/init باید pid شماره ۱ باشد.
اگر می‌خواهید از ایمیجی استفاده کنید که از قبل آماده نشده است، لازم است بسته‌های اضافی را مشخص کنید:
distrobox create -i alpine:latest --init --additional-packages "openrc" -n test
distrobox create -i debian:stable --init --additional-packages "systemd libpam-systemd pipewire-audio-client-libraries" -n test
distrobox create -i ubuntu:22.04 --init --additional-packages "systemd libpam-systemd pipewire-audio-client-libraries" -n test
distrobox create -i archlinux:latest --init --additional-packages "systemd" -n test
distrobox create -i registry.opensuse.org/opensuse/tumbleweed:latest --init --additional-packages "systemd" -n test
distrobox create -i registry.fedoraproject.org/fedora:39 --init --additional-packages "systemd" -n test
پرچم --init برای ایجاد کانتینرهای سیستمی مناسب است؛ جایی که کانتینر بیشتر شبیه به یک ماشین مجازی (VM) کامل عمل می‌کند تا یک کانتینر برنامه‌ای.
در داخل آن سیستم init مجزا، نشست کاربری (user-session)، دیمن‌ها و غیره را در اختیار خواهید داشت.
پرچم --home به شما امکان می‌دهد یک دایرکتوری خانگی (HOME) سفارشی برای کانتینر مشخص کنید.
توجه داشته باشید که این کار مانع از اتصال (mount) دایرکتوری خانگی میزبان نخواهد شد، اما تضمین می‌کند که پیکربندی‌ها و dotfileها آن را شلوغ نکنند.
پرچم --root به شما اجازه می‌دهد کانتینری با دسترسی‌های واقعی ریشه (root) بسازید.
در اولین اجرای enter از کاربر خواسته می‌شود تا یک گذرواژه تعیین کند.
این کار به این منظور انجام می‌شود که در یک کانتینر با دسترسی ریشه (rootful)، امکان اجرای sudo/su بدون گذرواژه فراهم نشود؛ چرا که در این حالت، کاربر ریشه درون کانتینر، همان کاربر ریشه در بیرون کانتینر است!
گزینهٔ --absolutely-disable-root-password-i-am-really-positively-sure از تنظیم گذرواژهٔ کاربر صرف‌نظر کرده و آن را خالی می‌گذارد.
این کار واقعاً خطرناک است و شما قطعاً و مؤکداً نباید آن را فعال کنید.
از نسخهٔ 1.4.0 ابزار distrobox، هنگامی که کانتینر جدیدی می‌سازید، یک مدخل در فهرست برنامه‌های کاربردی نیز ایجاد می‌شود..SS یکپارچه‌سازی NVidia
اگر میزبان شما دارای یک پردازنده گرافیکی NVidia با درایورهای اختصاصی نصب‌شده باشد،
می‌توانید با استفاده از پرچم --nvidia آن‌ها را با مهمان‌ها یکپارچه‌سازی کنید:
distrobox create --nvidia --image ubuntu:latest --name ubuntu-nvidia
توجه داشته باشید که این قابلیت با سیستم‌های غیر glibc سازگار نیست
و برای کارکرد صحیح به توزیع‌های تا حدی جدیدتر نیاز دارد.
کارکرد این ویژگی روی موارد زیر آزمایش شده است:
• 2
Almalinux
• 2
Archlinux
• 2
Centos 7 و جدیدتر
• 2
Clearlinux
• 2
Debian 10 و جدیدتر
• 2
OpenSUSE Leap
• 2
OpenSUSE Tumbleweed
• 2
Rockylinux
• 2
Ubuntu 18.04 و جدیدتر
• 2
Void Linux (glibc)
"نام (NAME)"
distrobox-enter - ورود به کانتینر distrobox
"توضیحات (DESCRIPTION)"
دستور distrobox-enter وظیفهٔ ورود به کانتینر با نام مشخص‌شده را بر عهده دارد.
دستور پیش‌فرضی که اجرا می‌شود SHELL شماست، اما می‌توانید شل‌های دیگر یا دستورهای کاملی را برای اجرا مشخص کنید.
اگر از آن داخل یک اسکریپت، یک برنامه یا یک سرویس استفاده می‌کنید، می‌توانید حالت –headless را برای غیرفعال کردن tty و تعاملی بودن مشخص کنید.
"خلاصه دستور (SYNOPSIS)"
distrobox enter
--name/-n: نام برای distrobox پیش‌فرض: my-distrobox
--/-e: پایان آرگومان‌ها؛ اجرای باقی‌مانده به عنوان دستور هنگام ورود پیش‌فرض: شل پیش‌فرض ${USER}
--no-tty/-T: عدم ایجاد tty
--no-workdir/-nw: شروع همیشگی کانتینر از دایرکتوری خانگی کانتینر
--additional-flags/-a: پرچم‌های اضافی برای ارسال به دستور مدیر کانتینر
--help/-h: نمایش این پیام
--root/-r: راه‌اندازی podman/docker/lilipod با امتیازات root. توجه داشته باشید در صورت نیاز به root این روش
نسبت به "sudo distrobox" ارجح است (نکته: در صورت نیاز به برنامه‌ای جز 'sudo' برای امتیازات root،
آن را از طریق متغیر محیطی DBX_SUDO_PROGRAM یا متغیر پیکربندی 'distrobox_sudo_program' مشخص کنید)
--dry-run/-d: فقط چاپ دستور تولیدشده مدیر کانتینر
--verbose/-v: نمایش جزئیات بیشتر
--version/-V: نمایش نسخه
"مثال‌ها (EXAMPLES)"
ورود به یک distrobox با نام “example”
distrobox-enter example
ورود به یک distrobox با مشخص کردن یک دستور
distrobox-enter --name fedora-toolbox-35 -- bash -l
distrobox-enter my-alpine-container -- sh -l
استفاده از پرچم‌های اضافی podman/docker/lilipod هنگام ورود به یک distrobox
distrobox-enter --additional-flags "--preserve-fds" --name test -- bash -l
تعیین متغیرهای محیطی اضافی هنگام ورود به یک distrobox
distrobox-enter --additional-flags "--env MY_VAR=value" --name test -- bash -l
MY_VAR=value distrobox-enter --additional-flags "--preserve-fds" --name test -- bash -l
همچنین می‌توانید از متغیرهای محیطی برای تعیین مدیر کانتینر و نام کانتینر استفاده کنید:
DBX_CONTAINER_MANAGER="docker" DBX_CONTAINER_NAME=test-alpine distrobox-enter
DBX_CONTAINER_NAME
DBX_CONTAINER_MANAGER
DBX_SKIP_WORKDIR
DBX_SUDO_PROGRAM
"اطلاعات بیشتر (EXTRA)"
این دستور برای ورود به خود distrobox استفاده می‌شود.
شخصاً، من فقط چندین نمایه (profile) در
gnome-terminal خود ایجاد می‌کنم تا توزیع‌های متعددی در دسترس داشته باشم.
گزینهٔ --additional-flags یا -a برای تغییر
دستور پیش‌فرض هنگام اجرا در کانتینر مفید است.
برای مثال:
distrobox enter -n dev-arch --additional-flags "--env my_var=test"; -- printenv &| grep my_var
my_var=test
این کار همچنین با استفاده از متغیرهای محیطی معمولی امکان‌پذیر است:
my_var=test distrobox enter -n dev-arch --additional-flags -- printenv &| grep my_var
my_var=test
اگر می‌خواهید وارد یک کانتینر با دسترسی ریشه (rootful) شوید به‌طوری‌که distrobox
از برنامه‌ای غیر از “sudo” برای اجرای podman/docker/lilipod با دسترسی ریشه استفاده کند، مانند
“pkexec” یا “doas”، می‌توانید آن را با متغیر محیطی
DBX_SUDO_PROGRAM مشخص کنید.
برای مثال، جهت استفاده از “doas” برای ورود به یک کانتینر با دسترسی ریشه:
DBX_SUDO_PROGRAM="doas" distrobox enter -n container --root
علاوه بر این، در یکی از مسیرهای فایل پیکربندی که distrobox پشتیبانی می‌کند،
مانند ~/.distroboxrc، می‌توانید خط
distrobox_sudo_program="doas" را نیز (برای مثال) اضافه کنید تا همیشه
دستورهای distrobox مربوط به کانتینرهای با دسترسی ریشه را با استفاده از “doas” اجرا کند.
"نام (NAME)"
distrobox-ephemeral - ایجاد یک distrobox موقت با حذف خودکار
distrobox ephemeral
distrobox-ephemeral
"توضیحات (DESCRIPTION)"
دستور distrobox-ephemeral یک distrobox موقت ایجاد می‌کند که با
خاتمه یافتن دستور، به طور خودکار نابود می‌شود.
"خلاصه دستور (SYNOPSIS)"
distrobox ephemeral
--root/-r: اجرای podman/docker/lilipod با دسترسی ریشه. توجه داشته باشید اگر به ریشه نیاز دارید، این روش
بر "sudo distrobox" ترجیح داده می‌شود (نکته: در صورت نیاز به استفاده از برنامه‌ای غیر از 'sudo' برای دسترسی ریشه،
آن را از طریق متغیر محیطی DBX_SUDO_PROGRAM یا متغیر پیکربندی 'distrobox_sudo_program' مشخص کنید)
--verbose/-v: نمایش جزئیات بیشتر
--help/-h: نمایش این پیام
--/-e: پایان دادن به آرگومان‌ها، اجرای مابقی به عنوان دستوری برای اجرا هنگام ورود پیش‌فرض: پوستهٔ پیش‌فرض ${USER}
--version/-V: نمایش نسخه
"مثال‌ها (EXAMPLES)"
distrobox-ephemeral --image alpine:latest -- cat /etc/os-release
distrobox-ephemeral --root --verbose --image alpine:latest --volume /opt:/opt
همچنین می‌توانید از گزینه‌های distrobox-create برای سفارشی‌سازی
کانتینر موقت جهت اجرا استفاده کنید.
"همچنین ببینید (SEE ALSO)"
distrobox-create --help
man distrobox-create
دستور distrobox-ephemeral از distrobox-create استفاده می‌کند؛ برای مشاهدهٔ فهرستی از
متغیرهای محیطی پشتیبانی‌شده جهت استفاده، بخش «همچنین ببینید» در distrobox-create(1) را بررسی کنید.
"نام (NAME)"
distrobox-export - برون‌بری برنامه‌ها و فایل‌های باینری از کانتینر به میزبان
"توضیحات (DESCRIPTION)"
برون‌بری برنامه و فایل باینری
دستور distrobox-export وظیفهٔ برون‌بری یک برنامه یا یک فایل باینری را از
کانتینر به سیستم میزبان بر عهده دارد.
برنامهٔ برون‌بری‌شده به‌سادگی در راه‌انداز معمول برنامه‌های شما در دسترس خواهد بود و
به‌طور خودکار از کانتینری که از آن برون‌بری شده اجرا خواهد شد.
"خلاصه دستور (SYNOPSIS)"
distrobox-export
--app/-a: نام برنامه برای برون‌بری یا مسیر مطلق به desktopfile برای برون‌بری
--bin/-b: مسیر مطلق فایل باینری برای برون‌بری
--list-apps: فهرست کردن برنامه‌های برون‌بری‌شده از این کانتینر
--list-binaries فهرست کردن باینری‌های برون‌بری‌شده از این کانتینر، از -ep برای تعیین مسیرهای سفارشی جستجو استفاده کنید
--delete/-d: حذف برنامه یا باینری برون‌بری‌شده
--export-label/-el: برچسب برای افزودن به نام برنامهٔ برون‌بری‌شده.
برای غیرفعال کردن از "none" استفاده کنید.
پیش‌فرض: (on \$container_name)
--export-path/-ep: مسیر برون‌بری فایل باینری
--extra-flags/-ef: پرچم‌های اضافی برای افزودن به دستور
--enter-flags/-nf: پرچم‌های اضافی برای افزودن به distrobox-enter
--sudo/-S: مشخص کردن اینکه آیا مورد برون‌بری‌شده با sudo اجرا شود یا خیر
--help/-h: نمایش این پیام راهنما
--verbose/-v: نمایش خروجی با جزئیات بیشتر
--version/-V: نمایش نسخه
ممکن است بخواهید برنامه‌های گرافیکی یا ابزارهای خط فرمان (CLI) را در
distrobox خود نصب کنید.
استفاده از distrobox-export از داخل کانتینر به
شما امکان می‌دهد تا مستقیماً از خود سیستم میزبان از آن‌ها استفاده کنید.
"مثال‌ها (EXAMPLES)"
distrobox-export --app mpv [--extra-flags "flags"] [--delete] [--sudo]
distrobox-export --bin /path/to/bin [--export-path ~/.local/bin] [--extra-flags "flags"] [--delete] [--sudo]
مثال برون‌بری برنامه
distrobox-export --app abiword
این ابزار به‌سادگی فایل‌های .desktop اصلی را به همراه آیکون‌های
مورد نیاز کپی کرده، پیشوند
/usr/local/bin/distrobox-enter -n distrobox_name -e ... را به
دستورات اجرایی اضافه می‌کند و آن‌ها را در پوشهٔ خانگی (home) شما ذخیره می‌نماید
تا مستقیماً از میزبان مانند یک برنامهٔ معمولی استفاده شوند.
distrobox-export --app /opt/application/my-app.desktop
این کار از جستجو برای desktopfile در مسیرهای استاندارد صرف‌نظر کرده و تنها
از مسیر فایل ارائه‌شده استفاده می‌کند.
مثال برون‌بری باینری
distrobox-export --bin /usr/bin/code --extra-flags "--foreground" --export-path $HOME/.local/bin
در صورت برون‌بری باینری‌ها، باید مشخص کنید که آن را در کجا
برون‌بری کند (--export-path) و ابزار یک اسکریپت پوششی (wrapper script)
کوچک ایجاد خواهد کرد که باینری مورد نظر را با distrobox-enter -e
از سیستم میزبان اجرا می‌کند.
این ویژگی همراه با استفاده از direnv برای داشتن نسخه‌های مختلف
از یک باینری یکسان بر اساس env یا پروژهٔ شما بسیار کاربردی است.
باینری‌های برون‌بری‌شده در “–export-path” انتخابی به صورت یک
اسکریپت پوششی ایجاد می‌شوند که چه در سیستم میزبان و چه در کانتینر عملکردی
کاملاً طبیعی دارد.
پرچم‌های اضافی
می‌توانید پرچم‌های اضافی را برای افزوده شدن به دستور مشخص کنید؛ برای مثال
اگر می‌خواهید یک برنامهٔ electron را برون‌بری کنید، می‌توانید پرچم
“–foreground” را به دستور اضافه نمایید:
distrobox-export --app atom --extra-flags "--foreground"
distrobox-export --bin /usr/bin/vim --export-path ~/.local/bin --extra-flags "-p"
این قابلیت هم برای باینری‌ها و هم برای برنامه‌ها کار می‌کند.
پرچم‌های اضافی تنها زمانی به کار می‌روند که برنامه یا باینری برون‌بری‌شده
از سیستم میزبان اجرا شود؛ اجرای آن‌ها در داخل کانتینر شامل این پرچم‌ها نخواهد بود.
لغو برون‌بری
گزینهٔ “–delete” وضعیت برون‌بری یک برنامه یا باینری را لغو (un-export) می‌کند:
distrobox-export --app atom --delete
distrobox-export --bin /usr/bin/vim --export-path ~/.local/bin --delete
اجرا به عنوان کاربر ریشه در کانتینر
گزینهٔ “–sudo” مورد برون‌بری‌شده را به عنوان کاربر ریشه (root)
در داخل distrobox اجرا می‌کند.
نکات
توجه داشته باشید که می‌توانید از –app یا –bin استفاده کنید، اما نه هر دو با هم.
[تصویر:
https://user-images.githubusercontent.com/598882/144294795-c7785620-bf68-4d1b-b251-1e1f0a32a08d.png
app-export
]
app-export
نکته: برخی برنامه‌های electron مانند vscode و atom برای کارکرد از داخل
کانتینر به پرچم‌های اضافی نیاز دارند؛ از گزینهٔ --extra-flags
برای ارائهٔ مجموعه‌ای از پرچم‌ها استفاده کنید، برای نمونه:
distrobox-export --app atom --extra-flags "--foreground"
distrobox generate-entry - ایجاد نماد میزکار برای یکی از distroboxهای موجود
"توضیحات (DESCRIPTION)"
دستور distrobox-generate-entry یک نماد میزکار برای یکی از distroboxهای موجود
ایجاد خواهد کرد.
این نماد در زمان حذف distrobox متناظر، پاک خواهد شد.
"خلاصه دستور (SYNOPSIS)"
distrobox generate-entry
--help/-h: نمایش این پیام
--all/-a: اجرا برای تمام distroboxها
--delete/-d: حذف مدخل
--icon/-i: مشخص کردن یک نماد سفارشی [/path/to/icon] (پیش‌فرض auto)
--root/-r: اجرا روی distroboxهای دارای دسترسی ریشه (rootful)
--verbose/-v: نمایش جزئیات بیشتر
--version/-V: نمایش نسخه
"مثال‌ها (EXAMPLES)"
ایجاد یک مدخل برای یک کانتینر
distrobox generate-entry my-container-name
مشخص کردن یک نماد سفارشی برای مدخل
distrobox generate-entry my-container-name --icon /path/to/icon.png
ایجاد یک مدخل برای تمام distroboxها
distrobox generate-entry --all
حذف یک مدخل
distrobox generate-entry container-name --delete
"نام (NAME)"
distrobox-host-exec - اجرای دستورات روی سیستم میزبان از داخل کانتینر
"توضیحات (DESCRIPTION)"
دستور distrobox-host-exec امکان اجرای دستور را روی میزبان، در حین حضور در داخل
یک کانتینر فراهم می‌کند.
در پشت صحنه، distrobox-host-exec از host-spawn استفاده می‌کند؛
پروژه‌ای که امکان اجرای دوباره دستورات روی میزبان را فراهم می‌سازد.
اگر این ابزار پیدا نشود، از کاربر خواسته می‌شود تا آن را نصب کند.
"خلاصه دستور (SYNOPSIS)"
تنها کافی است هر دستور و تمام آرگومان‌های آن (در صورت وجود) را به “distrobox-host-exec”
ارسال کنید.
--help/-h: نمایش این پیام
--verbose/-v: نمایش جزئیات بیشتر
--version/-V: نمایش نسخه
--yes/-Y: پاسخ خودکار بله به اعلان‌ها:
در صورت عدم شناسایی host-spawn، این ابزار
روی سیستم مهمان نصب خواهد شد.
این رفتار هنگام اجرا در یک پوسته غیرتعاملی پیش‌فرض است.
اگر هیچ دستوری ارائه نشود، “$SHELL” را اجرا خواهد کرد.
به عنوان روشی دیگر، می‌توانید نام یک دستور را به
distrobox-host-exec پیوند نمادین (symlink) دهید و سپس همان دستور را با نامش
از داخل یک کانتینر، روی میزبان فراخوانی کنید.
"مثال‌ها (EXAMPLES)".SS اجرای دستورهای تکی
distrobox-host-exec ls
distrobox-host-exec bash -l
distrobox-host-exec flatpak run org.mozilla.firefox
distrobox-host-exec podman ps -a
ورود به پوسته میزبان
~$: distrobox-host-exec # بدون دستور، "$SHELL" را روی میزبان اجرا می‌کند
~$: distrobox-host-exec # این دستور اکنون روی میزبان اجرا می‌شود
You must run distrobox-host-exec inside a container!
ایجاد پیوند نمادین به دستورهای میزبان
برای ایجاد یک پیوند نمادین (symlink) به
distrobox-host-exec، از نام دستور میزبان استفاده کنید.
سپس می‌توانید دستور میزبان را از داخل کانتینر فراخوانی کنید.
~$: git # ما git را در کانتینر نداریم
bash: git: command not found
~$: sudo ln -s /usr/bin/distrobox-host-exec /usr/local/bin/git
~$: git version
git version 2.51.1
می‌توانید podman روی میزبان را از داخل کانتینر به صورت زیر کنترل کنید:
~$: ln -s /usr/bin/distrobox-host-exec /usr/local/bin/podman
~$: ls -l /usr/local/bin/podman
lrwxrwxrwx. 1 root root 51 Jul 11 19:26 /usr/local/bin/podman -> /usr/bin/distrobox-host-exec
~$: podman version
...این روی میزبان اجرا می‌شود...
"نام (NAME)"
distrobox-init - مقداردهی اولیه distrobox (نباید به صورت دستی اجرا شود)
"توضیحات (DESCRIPTION)"
مقداردهی اولیه distrobox (نباید به صورت دستی اجرا شود)
دستور distrobox-init نقطه ورود (entrypoint) یک distrobox ایجادشده است.
توجه داشته باشید که این دستور حتماً باید از داخل یک distrobox اجرا شود و
در صورت اجرا از روی سیستم میزبان، کار نخواهد کرد.
این برنامه برای استفاده دستی طراحی نشده است، بلکه توسط
distrobox-create برای تنظیم نقطه ورود کانتینر به کار می‌رود.
دستور distrobox-init نصب وابستگی‌های ناموجود (مانند sudo)، راه‌اندازی
کاربر و گروه‌ها، و سوار کردن (mount) دایرکتوری‌ها از میزبان را جهت
اطمینان از یکپارچگی کامل بر عهده خواهد داشت.
"خلاصه دستور (SYNOPSIS)"
distrobox-init
--name/-n: نام کاربر
--user/-u: شناسه کاربر (UID)
--group/-g: شناسه گروه (GID)
--home/-d: مسیر دایرکتوری خانگی کاربر
--help/-h: نمایش این پیام
--additional-packages: بسته‌های تکمیلی برای نصب
--init/-I: استفاده یا عدم استفاده از init
--pre-init-hooks: دستورهایی برای اجرا پیش از init
--nvidia: تلاش برای یکپارچه‌سازی درایورهای nVidia میزبان در مهمان
--upgrade/-U: اجرای init در حالت ارتقا
--verbose/-v: نمایش خروجی با جزئیات بیشتر
--version/-V: نمایش نسخه
--: پایان آرگومان‌ها؛ اجرای باقی‌مانده به عنوان دستور در حین init
"مثال‌ها (EXAMPLES)"
distrobox-init --name test-user --user 1000 --group 1000 --home /home/test-user
distrobox-init --upgrade
distrobox list
distrobox-list
"توضیحات (DESCRIPTION)"
دستور distrobox-list کانتینرهای distrobox موجود را فهرست می‌کند.
این دستور آن‌ها را شناسایی کرده و به‌طور جداگانه از سایر کانتینرهای
عادی فهرست می‌کند.
"خلاصه دستور (SYNOPSIS)"
distrobox list
--help/-h: نمایش این پیام
--no-color: غیرفعال کردن قالب‌بندی رنگی
--root/-r: اجرای podman/docker/lilipod با دسترسی‌های ریشه. توجه داشته باشید در صورت نیاز به ریشه، این روش
نسبت به "sudo distrobox" ارجح است (نکته: در صورتی که استفاده از برنامه‌ای غیر از 'sudo' برای دسترسی‌های ریشه ضروری است،
آن را از طریق متغیر محیطی DBX_SUDO_PROGRAM یا متغیر پیکربندی 'distrobox_sudo_program' مشخص کنید)
--verbose/-v: نمایش جزئیات بیشتر
--version/-V: نمایش نسخه
"مثال‌ها (EXAMPLES)"
distrobox-list
همچنین می‌توانید از متغیرهای محیطی برای مشخص کردن مدیر کانتینر استفاده کنید:
DBX_CONTAINER_MANAGER="docker" distrobox-list
"محیط (ENVIRONMENT)"
DBX_CONTAINER_MANAGER
DBX_SUDO_PROGRAM
[IMAGE:
https://user-images.githubusercontent.com/598882/147831082-24b5bc2e-b47e-49ac-9b1a-a209478c9705.png
image
]
image
"نام (NAME)"
distrobox rm
distrobox-rm
"توضیحات (DESCRIPTION)"
دستور distrobox-rm یکی از کانتینرهای distrobox موجود را حذف می‌کند.
"خلاصه دستور (SYNOPSIS)"
distrobox rm
--all/-a: حذف تمام distroboxها
--force/-f: اجبار در حذف
--rm-home: حذف پوشه خانگی متصل‌شده در صورتی که با پوشه کاربر میزبان متفاوت باشد
--root/-r: اجرای podman/docker/lilipod با دسترسی‌های ریشه. توجه داشته باشید در صورت نیاز به ریشه، این روش
نسبت به "sudo distrobox" ارجح است (نکته: در صورتی که استفاده از برنامه‌ای غیر از 'sudo' برای دسترسی‌های ریشه ضروری است،
آن را از طریق متغیر محیطی DBX_SUDO_PROGRAM یا متغیر پیکربندی 'distrobox_sudo_program' مشخص کنید)
--help/-h: نمایش این پیام
--verbose/-v: نمایش جزئیات بیشتر
--version/-V: نمایش نسخه
"مثال‌ها (EXAMPLES)"
distrobox-rm container-name [--force] [--all]
همچنین می‌توانید از متغیرهای محیطی برای مشخص کردن مدیر کانتینر و نام آن استفاده کنید:
DBX_CONTAINER_MANAGER="docker" DBX_CONTAINER_NAME=test-alpine distrobox-rm
DBX_CONTAINER_MANAGER
DBX_CONTAINER_NAME
DBX_NON_INTERACTIVE
DBX_SUDO_PROGRAM
"نام (NAME)"
distrobox stop
distrobox-stop
"توضیحات (DESCRIPTION)"
دستور distrobox-stop یک distrobox در حال اجرا را متوقف می‌کند.
distroboxها حتی پس از خروج از آن‌ها در حال اجرا باقی می‌مانند تا
ورودهای بعدی بسیار سریع انجام شوند.
از این طریق می‌توان آن‌ها را متوقف کرد.
"خلاصه دستور (SYNOPSIS)"
distrobox stop
--all/-a: متوقف کردن همه distroboxها
--yes/-Y: غیرتعاملی، توقف بدون پرسش
--help/-h: نمایش این پیام
--root/-r: اجرای podman/docker/lilipod با امتیازات root. توجه داشته باشید که در صورت نیاز به root،
این روش بر "sudo distrobox" ارجحیت دارد (نکته: در صورت لزوم استفاده از برنامه‌ای غیر از
'sudo' برای امتیازات root، آن را از طریق متغیر محیطی DBX_SUDO_PROGRAM یا متغیر
پیکربندی 'distrobox_sudo_program' مشخص کنید)
--verbose/-v: نمایش جزئیات بیشتر
--version/-V: نمایش نسخه
"مثال‌ها (EXAMPLES)"
distrobox-stop container-name1 container-name2
distrobox-stop container-name
distrobox-stop --all
همچنین می‌توانید از متغیرهای محیطی برای تعیین مدیر کانتینر و نام آن
استفاده کنید:
DBX_CONTAINER_MANAGER="docker" DBX_CONTAINER_NAME=test-alpine distrobox-stop
"متغیرهای محیطی (ENVIRONMENT VARIABLES)"
DBX_CONTAINER_MANAGER
DBX_CONTAINER_NAME
DBX_NON_INTERACTIVE
DBX_SUDO_PROGRAM
"نام (NAME)"
distrobox-upgrade
"توضیحات (DESCRIPTION)"
دستور distrobox-upgrade وارد فهرست کانتینرهای مشخص‌شده می‌شود و با
استفاده از مدیر بستهٔ کانتینر، ارتقا را انجام می‌دهد.
"خلاصه دستور (SYNOPSIS)"
distrobox upgrade
--help/-h: نمایش این پیام
--all/-a: انجام برای همه distroboxها
--running: انجام فقط برای distroboxهای در حال اجرا
--root/-r: اجرای podman/docker/lilipod با امتیازات root. توجه داشته باشید که در صورت نیاز به root،
این روش بر "sudo distrobox" ارجحیت دارد (نکته: در صورت لزوم استفاده از برنامه‌ای غیر از
'sudo' برای امتیازات root، آن را از طریق متغیر محیطی DBX_SUDO_PROGRAM یا متغیر
پیکربندی 'distrobox_sudo_program' مشخص کنید)
--verbose/-v: نمایش جزئیات بیشتر
--version/-V: نمایش نسخه
ارتقای تمام distroboxها
distrobox-upgrade --all
ارتقای تمام distroboxهای در حال اجرا
distrobox-upgrade --all --running
ارتقای یک distrobox مشخص
distrobox-upgrade alpine-linux
ارتقای فهرستی از distroboxها
distrobox-upgrade alpine-linux ubuntu22 my-distrobox123
به‌روزرسانی خودکار تمام distroها
می‌توانید یک سرویس systemd بسازید تا distrobox-upgrade به‌صورت خودکار اجرا شود؛ این مثال نحوهٔ اجرای روزانهٔ آن را نشان می‌دهد:
~/.config/systemd/user/distrobox-upgrade.service
[Unit]
Description=distrobox-upgrade Automatic Update
[Service]
Type=simple
ExecStart=distrobox-upgrade --all
StandardOutput=null
~/.config/systemd/user/distrobox-upgrade.timer
[Unit]
Description=distrobox-upgrade Automatic Update Trigger
[Timer]
OnBootSec=1h
OnUnitInactiveSec=1d
[Install]
WantedBy=timers.target
سپس کافی است دستور زیر را اجرا کنید:
systemctl --user daemon-reload && systemctl --user enable --now distrobox-upgrade.timer
Mar 2026 Distrobox