شكرًا لكم على تطبيق المنتدى الرائع! أرجو أن تعذروني كصغير في كل من Docker وDiscourse، إذا كان سؤالًا تافهًا. النظام: Ubuntu LTS 20.04
مختصر: هل توجد أي طريقة لاستخدام git مثبتًا في مكان آخر غير /usr/bin؟
مفصل: قمت بتثبيت إصدار جديد من git (2.31.1) يدويًا في /usr/local (للتخلص من الارتباط بـ libgnutls وخطأ gnutls_handshake()) وأضفت /usr/local/bin إلى PATH. في أداة التشغيل، أضفت echo $PATH && which git قبل cd /pups/ في run_command، وعند تشغيل ./launcher rebuild app يظهر:
لأي شخص قد يكون هنا، تمكنت من إنجاز ذلك عن طريق بناء صورة جديدة، مُوسومة بـ newgit، انطلاقاً من الصورة الأساسية الرسمية لـ Discourse، ثم تثبيت Discourse عليها عن طريق تعديل متغير image في launcher.
الأوامر الرئيسية في ملف Dockerfile هي كما يلي. جميع التبعيات (مثل perl و gcc وغيرها) يتم التعامل معها بواسطة الصورة الأساسية.
# تثبيت نسخة من git خالية من gnutls
RUN cd / && \
vcurl=7.68.0 && wget http://dl.uxnr.de/mirror/curl/curl-$vcurl.tar.gz && \
vssl=1.1.1f && wget http://www.openssl.org/source/openssl-$vssl.tar.gz && \
vgit=2.31.1 && wget http://mirrors.edge.kernel.org/pub/software/scm/git/git-$vgit.tar.gz && \
tar -zxf curl-$vcurl.tar.gz && tar -zxf openssl-$vssl.tar.gz && \
tar -zxf git-$vgit.tar.gz && \
cd openssl-$vssl && ./config --prefix=/usr/local && make && make install && cd .. && \
cd curl-$vcurl && ./configure --with-ssl=/usr/local --prefix=/usr/local --without-gnutls --disable-ldap --without-librtmp && make && make install && cd .. && \
cd git-$vgit && make configure && ./configure --prefix=/usr/local --with-openssl=/usr/local --with-curl=/usr/local && make && make install && cd ../ && \
rm -rf /curl-${vurl}* /openssl-${vssl}* /git-${vgit}*
# التحقق من تثبيت git
RUN which git && git version && (ldd -v /usr/local/libexec/git-core/git-remote-https | grep gnutls) || echo "Git is not linked to libgnutls"
وهو ما ينتج /usr/local/bin/git.
أدرك أن هذا حيلة غير نظيفة ولا يوصي بها فريق التطوير. لقد وضعتها هنا فقط كمرجع من مستخدم عادي في Docker، في حال كان لدى شخص ما حاجة مشابهة.