برنامه نویسی

Podman 4.3 در Artix Linux: Installation

مقدمه

Podman یک ابزار مدیریت کانتینر برای ساخت محیط های مجازی است. این توسط Red Hat توسعه یافته و به عنوان نرم افزار متن باز (OSS) تحت مجوز Apache v2.0 منتشر شده است. در زبان Go پیاده سازی شده است.

همانطور که قبلاً نوشتم، این پلتفرم سازگار است و با درجه بالایی از سازگاری با Docker توسعه یافته است.

این مقاله مراحل نصب Podman را در لینوکس آرتیکس نشان می دهد. این مبتنی بر آرچ لینوکس است و از systemd استفاده نمی کند.

محیط

آموزش

* doas در عوض (OpenDoas). sudo نیز قابل استفاده است.

با Pacman نصب کنید

به لطف سیستم مدیریت بسته آرچ لینوکس، pacman با یک دستور ساده به شما Podman می دهد.

$ doas pacman install podman
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

خروجی زیر از شما خواسته می شود: من پیش فرض را انتخاب کردم:

doas pacman -Sy podman
:: Synchronizing package databases...
 (...)
resolving dependencies...
:: There are 3 providers available for container-network-stack:
:: Repository galaxy
   1) cni-plugins
:: Repository community
   2) cni-plugins  3) netavark

Enter a number (default=1): 
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

بعد از این خروجی این بود:

looking for conflicting packages...

Packages (14) catatonit-0.1.7-2  cni-plugins-1.2.0-2  conmon-1:2.1.5-1  containers-common-1:0.50.1-2
              criu-3.17.1-1  crun-1.7.2-1  libslirp-4.7.0-1  nftables-1:1.0.6-1  protobuf-c-1.4.1-1
              python-protobuf-21.12-1  python-six-1.16.0-6  slirp4netns-1.2.0-1  yajl-2.1.0-5
              podman-4.3.1-2

Total Download Size:    30.62 MiB
Total Installed Size:  177.23 MiB

:: Proceed with installation? [Y/n] y
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

نصب آغاز خواهد شد. خروجی این بود:

:: Retrieving packages...
 podman-4.3.1-2-x86_64             16.2 MiB  2.51 MiB/s 00:06 [#################################] 100%
 (...)
 Total (14/14)                     30.6 MiB  1457 KiB/s 00:22 [#################################] 100%
(14/14) checking keys in keyring                              [#################################] 100%
(...)
(14/14) checking available disk space                         [#################################] 100%
:: Processing package changes...
( 1/14) installing catatonit                                  [#################################] 100%
(...)
(14/14) installing podman                                     [#################################] 100%
Optional dependencies for podman
    apparmor: for AppArmor support
    btrfs-progs: support btrfs backend devices [installed]
    cni-plugins: for an alternative container-network-stack implementation [installed]
    podman-compose: for docker-compose compatibility
    podman-docker: for Docker-compatible CLI
:: Running post-transaction hooks...
(1/1) Creating temporary files...
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

پارامترهای هسته را بررسی کنید

kernel.unprivileged_userns_clone باید فعال شود.

unprivileged_userns_clone روی 1 تنظیم شده است. نباید 0 باشد:

sysctl kernel.unprivileged_userns_clone
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

خروجی این بود:

kernel.unprivileged_userns_clone = 1
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

خوب.

QEMU را نصب کنید

QEMU برای کار با ماشین مجازی Podman مورد نیاز است. این یک شبیه ساز و مجازی ساز ماشین عمومی منبع باز است.

همچنین در Pacman موجود است. بیایید نصب کنیم:

$ doas pacman -Sy qemu-base
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

خروجی زیر از شما خواسته می شود: پیش فرض ها را بپذیرید و آماده هستید:

:: Synchronizing package databases...
 (...)
:: There are 2 providers available for libwolfssl.so=35-64:
:: Repository world
   1) wolfssl
:: Repository extra
   2) wolfssl

Enter a number (default=1): 
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

خروجی این بود:

looking for conflicting packages...

Packages (44) capstone-4.0.2-6  dtc-1.6.1-4  edk2-ovmf-202211-3  libcacard-2.7.0-2.1  libnfs-5.0.2-1
              liburing-2.3-1  multipath-tools-0.9.4-1  numactl-2.0.16-1  qemu-audio-spice-7.2.0-3
              qemu-block-curl-7.2.0-3  qemu-block-dmg-7.2.0-3  qemu-block-nfs-7.2.0-3
              qemu-block-ssh-7.2.0-3  qemu-chardev-spice-7.2.0-3  qemu-common-7.2.0-3
              qemu-hw-display-qxl-7.2.0-3  qemu-hw-display-virtio-gpu-7.2.0-3
              qemu-hw-display-virtio-gpu-gl-7.2.0-3  qemu-hw-display-virtio-gpu-pci-7.2.0-3
              qemu-hw-display-virtio-gpu-pci-gl-7.2.0-3  qemu-hw-display-virtio-vga-7.2.0-3
              qemu-hw-display-virtio-vga-gl-7.2.0-3  qemu-hw-s390x-virtio-gpu-ccw-7.2.0-3
              qemu-hw-usb-host-7.2.0-3  qemu-hw-usb-redirect-7.2.0-3  qemu-hw-usb-smartcard-7.2.0-3
              qemu-img-7.2.0-3  qemu-pr-helper-7.2.0-3  qemu-system-x86-7.2.0-3
              qemu-system-x86-firmware-7.2.0-3  qemu-tools-7.2.0-3  qemu-ui-curses-7.2.0-3
              qemu-ui-opengl-7.2.0-3  qemu-ui-spice-app-7.2.0-3  qemu-ui-spice-core-7.2.0-3
              qemu-virtiofsd-7.2.0-3  seabios-1.16.1-1  snappy-1.1.9-2  spice-0.15.1-1
              usbredir-0.13.0-1  vde2-2.3.3-3  virglrenderer-0.10.4-1  wolfssl-5.5.4-1
              qemu-base-7.2.0-3

Total Download Size:    30.00 MiB
Total Installed Size:  138.25 MiB

:: Proceed with installation? [Y/n] y
:: Retrieving packages...
 edk2-ovmf-202211-3-any            15.2 MiB  2.11 MiB/s 00:07 [#################################] 100%
 (...)
 Total (44/44)                     30.0 MiB   528 KiB/s 00:58 [#################################] 100%
(44/44) checking keys in keyring                              [#################################] 100%
(...)
(44/44) checking available disk space                         [#################################] 100%
:: Processing package changes...
( 1/44) installing numactl                                    [#################################] 100%
(...)
(44/44) installing qemu-base                                  [#################################] 100%
Optional dependencies for qemu-base
    qemu-audio-alsa: for ALSA audio driver
    (...)
    qemu-virtiofsd: for virtio-fs shared filesystem daemon [installed]
    samba: for SMB/CIFS server support
:: Running post-transaction hooks...
(1/5) Creating system user accounts...
Creating group 'qemu' with GID 973.
Creating user 'qemu' (QEMU user) with UID 973 and GID 973.
(2/5) Creating temporary files...
(3/5) Reloading device manager configuration...
(4/5) Updating icon theme caches...
(5/5) Updating the desktop file MIME type cache...
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

عیب یابی

نصب پایه QEMU طبق بالا باید از خطای زیر جلوگیری کند:

$ podman machine init
Error: exec: "qemu-system-x86_64": executable file not found in $PATH
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

پیکربندی Podman

containers.conf

Artix از systemd استفاده نمی کند. بنابراین باید به ظرف پودمان در مورد آن بگوییم. بیایید فایل پیکربندی را ویرایش کنیم:

$ # バックアップの作成
$ doas cp -p /etc/containers/containers.conf /etc/containers/containers.conf.org

$ # 編集
$ doas nvim /etc/containers/containers.conf
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

[engine] در بخش بنویسید:

  #cgroup_manager = "systemd"
+ cgroup_manager = "cgroupfs"
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

uid / gid

Podman به طور پیش فرض در حالت بدون ریشه اجرا می شود. بیایید یک کاربر/گروه برای آن آماده کنیم.

/etc/subuid چه زمانی /etc/subgid فایل پیکربندی برای آن است. یک تعریف کاربری لاگین مانند این اضافه کنید:

+ {your-user}:100000:65536
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مهاجرت سیستم پودمان

موارد زیر را انجام دهید:

$ podman system migrate
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

خروجی این بود:

WARN[0000] "https://dev.to/" is not a shared mount, this could cause issues or missing mounts with rootless containers
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

اخطار صادر می شود.این ظروف است buildah این به این دلیل است که وجود ندارد با نصب از قبل می توانید از این امر جلوگیری کنید.

تنظیمات اولیه ماشین مجازی

حالا می توانید اولین ماشین مجازی خود را با پادمن بسازید!!

$ podman machine init
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

خروجی این بود:

Downloading VM image: fedora-coreos-37.20230110.2.0-qemu.x86_64.qcow2.xz: done  
Extracting compressed file
Image resized.
Error: exec: "timedatectl": executable file not found in $PATH
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

خطای بالا به این معنی است که OpenRC دارای systemd است timedatectl این به این دلیل است که چیزی به نام سفارشی کردن Timezone وجود ندارد. 😅

در مورد وضعیت فعلی چه احساسی دارید؟
ماشین مجازی ایجاد شد، اما فایل احتراق مورد استفاده آن به دلیل خطای بالا ایجاد نشد.
نه همیشه، اما گاهی اوقات کشنده. بهتره درستش کن قصد دارم در مقاله دیگری نحوه انجام این کار را بنویسم.

کار با تصاویر ظرف

اکنون می توانید تصاویر کانتینر را از سرویس میزبانی خود بیرون بکشید. بیایید Alpine Linux را از Docker Hub به عنوان مثال بیرون بکشیم. یکی از محبوب ترین تصاویر:

$ podman pull docker.io/alpine
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

فهمیدم 😉 وقتی اجراش کردم خروجی این بود:

Trying to pull docker.io/library/alpine:latest...
Getting image source signatures
Copying blob (...)
Copying config (...)
Writing manifest to image destination
Storing signatures
(...)
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

آن را کمی راحت تر کنید

راستی docker.io/ اگر می خواهید قسمت را حذف کنیدregistries.conf فقط ویرایش کنید:

$ # バックアップの作成
$ doas cp -p /etc/containers/registries.conf /etc/containers/registries.conf.org

$ # 編集
$ doas nvim /etc/containers/registries.conf
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در پایان خطوط زیر را اضافه کنید:

+ [registries.search]
+ registries = ['docker.io']
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

یک وب سرور آزمایشی را اجرا کنید

Podman آماده استفاده است، اگرچه هنوز برخی از مشکلات وجود دارد که نیاز به رفع دارد. بیایید ظرف را اجرا کنیم و با آن بازی کنیم.

سرور httpd آپاچی را که Alpine اجرا می کند بکشید:

$ podman pull docker.io/httpd:alpine
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

هنگامی که آن را دارید، اجرا کنید:

$ podman run -p 8080:80 httpd:alpine
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در مرورگر شما http://127.0.0.1:8080 دسترسی داشته باشیم
اینجوری نمایش داده نمیشه…😄

ظرف پادمن: httpd در حال اجرا است

در نتیجه

پودمان از منظر امنیت و ثبات به دقت مورد توجه قرار گرفته است. اول اینکه Podman از دیمون استفاده نمی کند. این باعث می‌شود کمتر احتمال داشته باشد که یک کانتینر در یک ماشین مجازی روی کانتینرهای دیگر تأثیر منفی بگذارد. همچنین به طور پیش‌فرض روی کانتینری قرار می‌گیرد که به حقوق ریشه نیاز ندارد. این کار کانتینرهای در حال اجرا را ایمن تر می کند.

خوب است اگر Podman بتواند محیطی با قابلیت استفاده مجدد و استقلال بالا بسازد که منجر به بهبود بهره وری توسعه و بهبود محیط عملیاتی شود.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا