Installing A package From source

نصب برنامه از کد منبع:به طور کلی در سیستم های لینوکسی ما از ابزار های مدیریت پکیج برای نصب برنامه ها استفاده می کنیم. اما ممکنه پکیجی که می خایم نصب کنیم تو ریپازیتوری های سیستم موجود نباشه یا به هر دلیلی دوست داشته باشیم همه ی مراحل نصب رو خودمون دستی انجام بدیم. برای انجام این کار لازمه مراحل زیر رو طی کنیم:۱. دانلود کد منبع (source code) برنامه۲. دانلود و نصب ابزارای مورد نیاز برای ویرایش و کامپایل کردن کد برنامه. با توجه به توزیعی از لینوکس که استفاده می کنیم و کدی که برنامه با آن نوشته شده، ابزار های مختلفی نیاز هستش. برای مثال نمی تونیم برای کامپایل کردن یک برنامه که با زبان پایتون نوشته شده از کامپایلر gcc که برای زبان برنامه نویسی c هستش، استفاده کنیم.۳. اگر لازم هستش، یک کاربر جدید برای این برنامه ایجاد می کنیم.۴. تنظیماتی رو که دوست داریم در کد برنامه اعملا می کنیم. یا به اصطلاح config می کنیم.۵. کد رو کامپایل می کنیم و نصب رو انجام می دیم.۶. برنامه رو به عنوان یک سرویس روی سیستم تعریف می کنیم.۷. با استفاده از نرم افزاری که باهاش سرویس ها رو مدیریت می کنیم‌ (systemd مثلا!) این سرویس رو اجرا می کنیم.۸. از برنامه استفاده می کنیم.در این مقاله ما وب سرور Nginx رو از کد منبع نصب می کنیم که بتونیم تمام مراحل بالا رو با هم ببینیم.۱. بر روی سیستم تست ما که ubuntu 20.04 LTS هستش، ما به پکیج های زیر نیاز داریم که باید نصبشون کنیم.# apt install build-essential libpcre3-dev zlib1g-dev libssl-dev libatomic-ops-dev libxml2-dev libxslt1-dev libgeoip1 libgeoip-dev libgd-dev google-perftools libgoogle-perftools-dev libperl-dev۲. کد منبع وب سرور رو از روی سایتش دانلود می کنیم.# wget -c http://nginx.org/download/nginx-1.15.8.tar.gzهمونطور که می بینید فایلی که دانلود کردیم آرشیو شده. لازمه به شکل زیر از این حالت خارجش کنیم که باهاش کار کنیم.# tar xf nginx-1.15.8.tar.gzبه شکل زیر وارد دایرکتوری که کد منبع برنامه توش هستش می شیم.# cd nginx-1.15.8۳. قبل از اینکه کار های پیکربندی برنامه رو شروع کنیم، یک کاربر برای این برنامه ایجاد می کنیم به نام nginx.نکته: توجه کنید که این کاربر فقط برای این برنامه ایجاد شده و امکان لاگین نداره.# sudo useradd -s /sbin/nologin nginx۴. اینجا بخش حساس قضیس. باید پیکربندی برنامه رو انجام بدیم. اینکه چه ماژول هایی رو لود کنیم و برنامه با چه ویژگی هایی نصب بشه. این بخش به دانش خیلی زیادی نیاز داره که از بحث این مقاله خارجه.# sudo ./configure --user=nginx --group=nginx --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --with-select_module --with-poll_module --with-threads --with-file-aio --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_addition_module --with-http_xslt_module --with-http_xslt_module=dynamic --with-http_image_filter_module --with-http_image_filter_module=dynamic --with-http_geoip_module --with-http_geoip_module=dynamic --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_auth_request_module --with-http_random_index_module --with-http_secure_link_module --with-http_degradation_module --with-http_slice_module --with-http_stub_status_module --with-http_perl_module --with-http_perl_module=dynamic --with-mail --with-mail=dynamic --with-mail_ssl_module --with-stream --with-stream=dynamic --with-stream_ssl_module --with-stream_realip_module --with-stream_geoip_module --with stream_geoip_module=dynamic --with-stream_ssl_preread_module --with-google_perftools_module --with-cpp_test_module --with-compat --with-pcre --with-pcre-jit --with-zlib-asm=CPU --with-libatomic --with-debug --with-ld-opt=&quot-Wl,-E&quotاین پروسه باید بدون خطا و به شکل زیر تموم بشه.۵. تو این مرحله باید کد برنامه رو با توجه به پیکربندی که تو مرحله قبل مشخص کردیم کامپایل و نصب کنیم.# make && sudo make installدر آخر با یه صحنه ای مثل شکل زیر باید برخورد کنید. اگر به خطا خوردید، بررسی کنیم تا حل بشه.۶. حالا لازمه این برنامه رو به عنوان یه سرویس روی سیستم تعریف کنیم که بشه مدیریتش کرد. برای این کار باید فایل زیر رو ایجاد کنیم و محتوای مشخص شده رو توش بزاریم.# vi /lib/systemd/system/nginx.serviceمتن زیر رو وارد این فایل می کنیم.[Unit] Description=The Nginx 1.15.8 service After=syslog.target network.target remote-fs.target nss-lookup.target [Service] Type=forking PIDFile=/usr/local/nginx/logs/nginx.pid ExecStartPre=/usr/sbin/nginx -t ExecStart=/usr/sbin/nginx ExecReload=/usr/sbin/nginx -s reload ExecStop=/bin/kill -s QUIT $MAINPID PrivateTmp=true [Install] WantedBy=multi-user.targetدر ادامه Systemctl رو یک بار reload می کنیم که این سرویس جدید رو بشناسه و تغییراتی که ایجاد کردیم اعمال بشه.# systemctl daemon-reload۷. برنامه رو با استفاده از Systemctl روشن می کنیم.# systemctl start nginxبه شکل زیر می تونمی ببینیم که این برنامه ایجاد شده و در حال اجراست.# systemctl status nginx