From 9fad802282ef9a571ed1ef11c2fa219f6f0cf571 Mon Sep 17 00:00:00 2001 From: Thomas Briffard Date: Tue, 29 Jun 2021 10:17:23 +0200 Subject: [PATCH] =?UTF-8?q?commit=20initial,=20premi=C3=A8res=20applicatio?= =?UTF-8?q?ns=20g=C3=A9r=C3=A9es:=20qtcreator,=20git,=20qgit,=20qcachegrin?= =?UTF-8?q?d,=20valgrind,=20kdiff3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 2 + Dockerfile_centos7_base | 64 +++++++++ Dockerfile_centos7_base_qt | 13 ++ Makefile | 33 +++++ README.md | 38 +++++ docker-compose.yml | 123 ++++++++++++++++ git/Dockerfile_centos7_git | 13 ++ git/git.desktop | 9 ++ git/git.png | Bin 0 -> 36867 bytes git/git_pre_step.sh | 7 + kdiff3/Dockerfile_centos7_kdiff3 | 12 ++ kdiff3/kdiff3.desktop | 9 ++ kdiff3/kdiff3.png | Bin 0 -> 819 bytes kdiff3/kdiff3_pre_step.sh | 7 + qcachegrind/Dockerfile_centos7_qcachegrind | 10 ++ qcachegrind/kcachegrind.png | Bin 0 -> 8285 bytes qcachegrind/qcachegrind.desktop | 159 +++++++++++++++++++++ qcachegrind/qcachegrind_pre_step.sh | 7 + qgit/Dockerfile_centos7_qgit | 11 ++ qgit/qgit.desktop | 9 ++ qgit/qgit.png | Bin 0 -> 819 bytes qgit/qgit_pre_step.sh | 7 + qtcreator/Dockerfile_centos7_qtcreator | 13 ++ qtcreator/QtProject-qtcreator.svg | 9 ++ qtcreator/qtcreator.desktop | 12 ++ qtcreator/qtcreator_post_step.sh | 6 + qtcreator/qtcreator_pre_step.sh | 18 +++ template.sh | 79 ++++++++++ valgrind/Dockerfile_centos7_valgrind | 14 ++ valgrind/valgrind.desktop | 9 ++ valgrind/valgrind.png | Bin 0 -> 8285 bytes valgrind/valgrind_pre_step.sh | 20 +++ 32 files changed, 713 insertions(+) create mode 100644 .gitignore create mode 100644 Dockerfile_centos7_base create mode 100644 Dockerfile_centos7_base_qt create mode 100644 Makefile create mode 100644 README.md create mode 100644 docker-compose.yml create mode 100644 git/Dockerfile_centos7_git create mode 100644 git/git.desktop create mode 100644 git/git.png create mode 100755 git/git_pre_step.sh create mode 100644 kdiff3/Dockerfile_centos7_kdiff3 create mode 100644 kdiff3/kdiff3.desktop create mode 100644 kdiff3/kdiff3.png create mode 100755 kdiff3/kdiff3_pre_step.sh create mode 100644 qcachegrind/Dockerfile_centos7_qcachegrind create mode 100644 qcachegrind/kcachegrind.png create mode 100644 qcachegrind/qcachegrind.desktop create mode 100755 qcachegrind/qcachegrind_pre_step.sh create mode 100644 qgit/Dockerfile_centos7_qgit create mode 100644 qgit/qgit.desktop create mode 100644 qgit/qgit.png create mode 100755 qgit/qgit_pre_step.sh create mode 100644 qtcreator/Dockerfile_centos7_qtcreator create mode 100644 qtcreator/QtProject-qtcreator.svg create mode 100644 qtcreator/qtcreator.desktop create mode 100755 qtcreator/qtcreator_post_step.sh create mode 100755 qtcreator/qtcreator_pre_step.sh create mode 100755 template.sh create mode 100644 valgrind/Dockerfile_centos7_valgrind create mode 100644 valgrind/valgrind.desktop create mode 100644 valgrind/valgrind.png create mode 100755 valgrind/valgrind_pre_step.sh diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..496ac0b --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +*.AppImage +.env diff --git a/Dockerfile_centos7_base b/Dockerfile_centos7_base new file mode 100644 index 0000000..afe48e0 --- /dev/null +++ b/Dockerfile_centos7_base @@ -0,0 +1,64 @@ +FROM centos/devtoolset-7-toolchain-centos7 + +WORKDIR / +USER root + +# on installe les outils de bases +RUN yum install -y wget && wget http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm && rpm -ivh epel-release-latest-7.noarch.rpm && yum install -y \ +autoconf \ +binutils \ +bison \ +boost-python36 \ +boost-python36-devel \ +bzip2 \ +ccache \ +clang \ +cmake3 \ +file \ +flex \ +fuse-devel \ +git \ +lapack \ +lapack-devel \ +libtool \ +libtirpc-devel \ +libXext-devel \ +libXmu-devel \ +libXpm-devel \ +libX11-devel \ +make \ +mesa-libEGL-devel \ +numactl-libs \ +numactl-devel \ +openblas \ +openblas-devel \ +pkg-config \ +python-devel \ +python3-devel \ +rh-python38 \ +rh-python38-python-devel \ +python-pip \ +python-six \ +qjson-devel \ +screen \ +tar \ +time \ +vim \ +xorg-x11-apps && \ +wget https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage && \ +wget https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage && \ +wget https://github.com/linuxdeploy/linuxdeploy-plugin-qt/releases/download/continuous/linuxdeploy-plugin-qt-x86_64.AppImage && \ +chmod +x linuxdeploy-x86_64.AppImage appimagetool-x86_64.AppImage linuxdeploy-plugin-qt-x86_64.AppImage && \ +mv linuxdeploy-x86_64.AppImage appimagetool-x86_64.AppImage linuxdeploy-plugin-qt-x86_64.AppImage /usr/bin/ && \ +yum clean all && python3 -m pip install --upgrade pip && pip3 install six + +# on fixe le fuseau horaire dans le conteneur, +ENV TZ=America/New_York +RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone && \ +echo "LC_ALL=en_US.UTF-8" >> /etc/environment && \ +echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen && \ +echo "LANG=en_US.UTF-8" > /etc/locale.conf && \ +source /etc/locale.conf + +# Exécuter une commande au démarrage de l'image. +CMD ["/bin/bash"] diff --git a/Dockerfile_centos7_base_qt b/Dockerfile_centos7_base_qt new file mode 100644 index 0000000..5e7d9db --- /dev/null +++ b/Dockerfile_centos7_base_qt @@ -0,0 +1,13 @@ +FROM cos7_base + +WORKDIR / + +ARG QT_VER=5.15.2 +ENV QT_VER=$QT_VER +ENV QMAKE=/qt/$QT_VER/gcc_64/bin/qmake +RUN yum install -y cups postgresql unixODBC ninja-build libxkbcommon-x11 xcb-util-wm xcb-util-image xcb-util-keysyms xcb-util-renderutil ninja-build && \ + mkdir qt && cd qt/ && \ + pip3 install aqtinstall && aqt install $QT_VER linux desktop + +# Exécuter une commande au démarrage de l'image. +CMD ["/bin/bash"] diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..89bcbc1 --- /dev/null +++ b/Makefile @@ -0,0 +1,33 @@ +init_env: + @echo "USER=$(shell id -u)" > .env + @echo "GROUP=$(shell id -g)" >> .env + +build_base: + docker-compose build base + +build_base_qt: build_base + docker-compose build base_qt + +qtcreator: init_env build_base_qt + docker-compose build qtcreator + docker-compose run --rm qtcreator + +git: init_env build_base + docker-compose build git + docker-compose run --rm git + +qgit: init_env build_base_qt + docker-compose build qgit + docker-compose run --rm qgit + +qcachegrind: init_env build_base_qt + docker-compose build qcachegrind + docker-compose run --rm qcachegrind + +valgrind: init_env build_base + docker-compose build valgrind + docker-compose run --rm valgrind + +kdiff3: init_env build_base_qt + docker-compose build kdiff3 + docker-compose run --rm kdiff3 diff --git a/README.md b/README.md new file mode 100644 index 0000000..8e71a89 --- /dev/null +++ b/README.md @@ -0,0 +1,38 @@ +# Collection d'applications de développement au format AppImage + +Les applications suivantes: + + - valgrind + - git + - kdiff3 + - qgit + - qtcreator + - qcachegrind + +sont compilées dans un conteneur CentOS7 (glibc 2.17) puis livrées au format [AppImage](https://appimage.org/) via les outils [linuxdeploy](https://github.com/linuxdeploy/linuxdeploy) et [appimagetool](https://github.com/AppImage/AppImageKit). + +Actuellement, toutes les applications faisant appels à Qt sont compilées avec Qt 5.15.2 + +## Pré-Requis + +Vous devez avoir installé sur votre machine : + + - [Docker](https://docs.docker.com/engine/install/) + - [docker-compose](https://docs.docker.com/compose/install/) + +## Utilisation + +``` sh +make APP_NOM +``` + +par exemple, + +``` sh +make qtcreator +make qgit +``` + +Les AppImage seront situées dans les répertoires correspondant aux applications. + +La première fois, les images docker de bases seront constuites, ce qui peut-être assez long... diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..0ed9e13 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,123 @@ +# Les services base et base_qt servent uniquement au build +version: "3.3" +services: + base: + build: + context: . + dockerfile: ./Dockerfile_centos7_base + image: cos7_base + + base_qt: + build: + context: . + dockerfile: ./Dockerfile_centos7_base_qt + image: cos7_base_qt + depends_on: + - base + + qtcreator: + build: + context: ./qtcreator/ + dockerfile: ./Dockerfile_centos7_qtcreator + image: cos7_qtcreator + container_name: docker_cos7_qtcreator + privileged: true + volumes: + - ./qtcreator:/build + - ./template.sh:/template.sh + #tty: true + env_file: + - ./.env + environment: + - CUSTOM_STEP_PRE_DEPLOY=/build/qtcreator_pre_step.sh + - CUSTOM_STEP_POST_DEPLOY=/build/qtcreator_post_step.sh + - EXTRA_QT_PLUGINS=printsupport;sql;designer + - QML_SOURCES_PATHS=/qt-creator/qtcreator_build/share/qtcreator/ + - NOM_APPIMAGE=qtcreator_4.15.1 + command : ["bash", "-c","/template.sh /qt-creator/qtcreator_build/bin/qtcreator /build"] + + git: + build: + context: ./git/ + dockerfile: ./Dockerfile_centos7_git + image: cos7_git + container_name: docker_cos7_git + privileged: true + volumes: + - ./git:/build + - ./template.sh:/template.sh + env_file: + - ./.env + environment: + - CUSTOM_STEP_PRE_DEPLOY=/build/git_pre_step.sh + - NOM_APPIMAGE=git_2.32.0 + command : ["bash", "-c","/template.sh /usr/local/bin/git /build"] + + qgit: + build: + context: ./qgit/ + dockerfile: ./Dockerfile_centos7_qgit + image: cos7_qgit + container_name: docker_cos7_qgit + privileged: true + volumes: + - ./qgit:/build + - ./template.sh:/template.sh + env_file: + - ./.env + environment: + - CUSTOM_STEP_PRE_DEPLOY=/build/qgit_pre_step.sh + - NOM_APPIMAGE=qgit_2.9 + command : ["bash", "-c","/template.sh /qgit/bin/qgit /build"] + + qcachegrind: + build: + context: ./qcachegrind/ + dockerfile: ./Dockerfile_centos7_qcachegrind + image: cos7_qcachegrind + container_name: docker_cos7_qcachegrind + privileged: true + volumes: + - ./qcachegrind:/build + - ./template.sh:/template.sh + env_file: + - ./.env + environment: + - CUSTOM_STEP_PRE_DEPLOY=/build/qcachegrind_pre_step.sh + - NOM_APPIMAGE=qcachegrind_21.04.2 + command : ["bash", "-c","/template.sh /kcachegrind/qcachegrind/qcachegrind /build"] + + valgrind: + build: + context: ./valgrind/ + dockerfile: ./Dockerfile_centos7_valgrind + image: cos7_valgrind + container_name: docker_cos7_valgrind + privileged: true + volumes: + - ./valgrind:/build + - ./template.sh:/template.sh + env_file: + - ./.env + environment: + - CUSTOM_STEP_PRE_DEPLOY=/build/valgrind_pre_step.sh + - NOM_APPIMAGE=valgrind_3.17 + command : ["bash", "-c","/template.sh /usr/local/bin/valgrind /build"] + + kdiff3: + build: + context: ./kdiff3/ + dockerfile: ./Dockerfile_centos7_kdiff3 + image: cos7_kdiff3 + container_name: docker_cos7_kdiff3 + privileged: true + volumes: + - ./kdiff3:/build + - ./template.sh:/template.sh + env_file: + - ./.env + environment: + - CUSTOM_STEP_PRE_DEPLOY=/build/kdiff3_pre_step.sh + - NOM_APPIMAGE=kdiff3_1.9.2 + command : ["bash", "-c","/template.sh /usr/local/bin/kdiff3 /build"] + diff --git a/git/Dockerfile_centos7_git b/git/Dockerfile_centos7_git new file mode 100644 index 0000000..eaf7010 --- /dev/null +++ b/git/Dockerfile_centos7_git @@ -0,0 +1,13 @@ +FROM cos7_base + +ARG GIT_VER=2.32.0 + +RUN yum install -y curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-CPAN perl-devel && \ + wget https://github.com/git/git/archive/refs/tags/v$GIT_VER.tar.gz && \ + tar -xvf v$GIT_VER.tar.gz && \ + cd git-$GIT_VER && \ + make configure && ./configure --prefix=/usr/local && \ + make -j$(nproc) && make install + +# Exécuter une commande au démarrage de l'image. +CMD ["/bin/bash"] diff --git a/git/git.desktop b/git/git.desktop new file mode 100644 index 0000000..c52cb07 --- /dev/null +++ b/git/git.desktop @@ -0,0 +1,9 @@ +[Desktop Entry] +Name=git +Type=Application +Exec=git +Icon=git +Comment=analysis tools +Categories=Development +StartupWMClass=git +Terminal=false diff --git a/git/git.png b/git/git.png new file mode 100644 index 0000000000000000000000000000000000000000..c7cf0fb6921fdd3744542edd5fac47563568d2a8 GIT binary patch literal 36867 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 K$l6nww0{9Iwnd%* literal 0 HcmV?d00001 diff --git a/git/git_pre_step.sh b/git/git_pre_step.sh new file mode 100755 index 0000000..72ced20 --- /dev/null +++ b/git/git_pre_step.sh @@ -0,0 +1,7 @@ +#!/bin/bash +fichierIcon=/build/git.png +fichierDesktop=/build/git.desktop + +AUTRES_OPTIONS="-i $fichierIcon -d $fichierDesktop" + + diff --git a/kdiff3/Dockerfile_centos7_kdiff3 b/kdiff3/Dockerfile_centos7_kdiff3 new file mode 100644 index 0000000..9e988de --- /dev/null +++ b/kdiff3/Dockerfile_centos7_kdiff3 @@ -0,0 +1,12 @@ +FROM cos7_base_qt + +ARG KDIFF3_VER=1.9.2 +ENV LD_LIBRARY_PATH=/qt/$QT_VER/gcc_64/lib:$LD_LIBRARY_PATH + +RUN yum install -y boost169-devel extra-cmake-modules kf5-ki18n-devel kf5-kcoreaddons-devel kf5-kiconthemes-devel kf5-kparts-devel kf5-kdoctools-devel kf5-kcrash-devel && \ + git clone --recursive https://github.com/KDE/kdiff3.git && \ + cd kdiff3 && git checkout $KDIFF3_VER && \ + cmake3 -DCMAKE_PREFIX_PATH=/qt/$QT_VER/gcc_64 -DBOOST_INCLUDEDIR=/usr/include/boost169 -DBOOST_LIBRARYDIR=/usr/lib64/boost169 . && make && make install + +# Exécuter une commande au démarrage de l'image. +CMD ["/bin/bash"] diff --git a/kdiff3/kdiff3.desktop b/kdiff3/kdiff3.desktop new file mode 100644 index 0000000..b9242f0 --- /dev/null +++ b/kdiff3/kdiff3.desktop @@ -0,0 +1,9 @@ +[Desktop Entry] +Type=Application +Name=kdiff3 +GenericName=Kdiff3 +Comment=compares and merges +Exec=kdiff3 +Icon=kdiff3 +Categories=Development;RevisionControl;Qt +Terminal=false diff --git a/kdiff3/kdiff3.png b/kdiff3/kdiff3.png new file mode 100644 index 0000000000000000000000000000000000000000..4816fdd303f09c6ac0ff994891dbe44eadfbe3d9 GIT binary patch literal 819 zcmV-31I+x1P)Px#32;bRa{vGf6951U69E94oEQKA0@z7JK~!ko?V3$UR8bVie^b_?K%=BuL_{A{ zf<rJ5os+3f*^7hQ3)*~3#rH=D;K3D zWglkKVy-Ye?l|*i<~|*G2Ocx?zn}m6?)jhlF%cYC^nU$Dpxu&ms4EtKQOvf=aAR|U zEf&1I*bPmi#4RKc5-89jc_>U2h-S&Q9N2BaF9ZEq%HHgX#d}<;P!u?k=YZ|cAx|&R z6Z$|%ARx=f2W|szv*f7;j#}`Oz?&>(A3If{9F=MtaL1BV(-n(9Ddj0NTIxRVHzW|y za(Wc_X2E|GT7fFmyQz8}u)<-VUaflc?2F4OR0~{lNT3C{9xf$90#kS`H0F`Rh>!2N zsyga&3fVe63upzl0yRJtFaXp6w|rK&%PiT0As`~n zz!_jssW@?Z=MMl{YAQ6|`5nN8BJ|-OaK$YC#(sHEc<6zb20_5q$kPmYM}T)}kJm{P zp5JpsWTtBs`enf?GK}(FV95k^{j^~7$$o-e&>I-GU@P+!0~_%LuBXsPi}N+*BY{A@ z1^e!lfKi%+Wz>%NRI?UfwFe&Z8;SFc12-(#X%X3*iwuj%PP2UQTDPhuT{|&AC#j3< za?fB~6_LZ{RN;NvGYG5!Hj}!gsmf4qM_?No5oyS$!3nHGRT~4_)T?SIaJERDe+}%L zj8lm=;Cz8~B!F5~9iFs3v50IpPFd-r*a&b8IOo@Koownwq!MTX8c6-oqbx%ZyhrNx xCa$WVrrfE7AyZ+ZY|`ww#y>x+YEkb9{sSM$z0P1NW1#>5002ovPDHLkV1m)iWLN+I literal 0 HcmV?d00001 diff --git a/kdiff3/kdiff3_pre_step.sh b/kdiff3/kdiff3_pre_step.sh new file mode 100755 index 0000000..a4db2b6 --- /dev/null +++ b/kdiff3/kdiff3_pre_step.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +fichierIcon=/build/kdiff3.png +fichierDesktop=/build/kdiff3.desktop + +AUTRES_OPTIONS="-i $fichierIcon -d $fichierDesktop --plugin qt" + diff --git a/qcachegrind/Dockerfile_centos7_qcachegrind b/qcachegrind/Dockerfile_centos7_qcachegrind new file mode 100644 index 0000000..cfb7669 --- /dev/null +++ b/qcachegrind/Dockerfile_centos7_qcachegrind @@ -0,0 +1,10 @@ +FROM cos7_base_qt + +# qcachegrind +ARG KCACHEGRIND_VER=v21.04.2 +RUN git clone --recursive https://github.com/KDE/kcachegrind.git && \ + cd kcachegrind && git checkout $KCACHEGRIND_VER && \ + PATH=/qt/$QT_VER/gcc_64/bin/:$PATH qmake; make + +# Exécuter une commande au démarrage de l'image. +CMD ["/bin/bash"] diff --git a/qcachegrind/kcachegrind.png b/qcachegrind/kcachegrind.png new file mode 100644 index 0000000000000000000000000000000000000000..1cca5ed481a9152687bee85d08356a74d62f8b6d GIT binary patch literal 8285 zcmZu%WmuHo(|)L>VF__*RFH5^PRLOP_Sr2hN+ z{Jz(9&YbIfnR(7LXXd`CCR#c>5j6lX07|mb+TOW`c|P7WeOZs)v*P8|=2jLXb6amxIO(4S1!JN^nDrPM zIBr6)$OfGndO(W8A6zX1gQdQMWEk|&`@d3m&>&)oZ$N_fq%s8aU^9aZ`QmzyM52kf z?W6p?+JE;vDV$5wZkIN)KX-iYy!k!;E}eH7>DUy#2!{s*xyFdJW~aX9pMY(Z_4TNUBB=@0zkq`Nh`=m zG92zk$yA5&=dc)dOK;!+FWsBrGgeW=u&H0j5HwhN92IWJM0=Xx=g64m(5zphrB##2 zQ2G#9qOuSAIW?s@%HzZinE$2rd{w-ehq6Sk?*Nb0s&N+kqz-b~RWHA(XukJ~OYy=v zDTU}+X`IyY^bg4T9Pmj% zV^`NoO+zkgvKz*Hlk5*zgI|X$};}Ajn zjeiUUNb)pr6qlAV0dFSb>@zvftu^|?Hh%$t$@$!2oeFyv+-ZNtwvEEl&?R3u7=b{% zLsr|hK0`LB#7Q#@)OoeLEs`d%bG6`${mvh0rs=`7MFUKxGaTpI+_uL@Mn<%1)Rb9e zK7(bYgBb8|B72jblQJrWFuq|vCy^=q?PJ5QZ_`9&)2t66kl&8MxW!pRs3lgf3Vp+$bfUaHUCoLU}3p^*!mDLMQcrAe@dILhR$Uz}eP)Ltdprrdp zaSjUnQ7e4Sbgc|aZ?Rs}F6iS;8lF`$?lczALv4`bnU;|;n=`gua)uugM8>RU;yv#_ zm#T(C&p<g;qY|awq1cDl-8alDU!!M%Gh8hSW zdxK3|4w{YyI{GQeL-JShyY7M!!K8qe{IuW0<|;ho=ejWGcUN*W7Hk~#VJv8YFi)(A zhGMZ%to1x$qBZ1YD&>E+_S{_$I5{{lUtF)2U{PYfj6>sZS){^!mdHH3>?#0 z5QTs1FR}Fg@>ocB$w3Dg|2T}sz!+xcpT|!mh=m$GDx+(6y5BF%;bNEx8U*b|C*Bb} zj{3M|sySuCHk&?l6sb4SFKXZqea!;S7K};CDp6c(HdXga41a_Ga#0;=@J}Q%)`S82 zFMWP?_WYE+uFLT7;@^}f!;gLRln|cH7jfq{#1v*=5g9b#V<=kslXNI#<6k(-i&p!| zj{VgV_7?rk4lJ8`xa4rpQDWwR&pIZ}Jy8%36eJ=ne1bR*XmLe+wH6lQbBGJ(0ns;I zlUZ%N5TVU1!WYP;E@J2j7)^+Y!6SddswU|Y_8Y0Nw8%~|qrEJ;uQ`rYDH`G+Xz&}c zvQo0Lm0fdLz{5~`M(gkIBK!~N?>X;itg13MnSShWJw;iV9isJsXgthM1QZPz&zPhd z;xlKV%d>uK{|1FZlM1=+zLwV9?+h8j+uN6}ksAX#-PW^&3^GFzVu6E`4vy~wf7o@a zv%ZgQz9&NWEYK7wB{#~;a}jw9Fz}NmJKU}YuCDLWv*;LXmqdT|3z7?srhF}VcB@(Lq;08r3(Bz!R` zYR=X3Adl;#LD9rr;5N>2rP$R>^Q`VQ0#?<9(omsi06wi#DJhNr^uz! zgahF{9x3##Mm~vm>O!@1o<%|BsEGc=XU)Y=)kl{}DpRWmt+T@i$H%S_CfB*e`NszP zJ-GACH^YtU2@He*`XorIK7%c6~NL) zgKZ<*?Q*)VoGJ5Bxnd40iqw~8co-YNcxFLs`bUq2rGO`5e4I%3yD3hH_hxybn0~hE z7PDOTFgBzEx+d@$B+gI&SslE*Y*fB4LXBbSP1JLt4wC>>cAC~x?UwV|IHh98Jb8*Y zJ5>%24iAHuwn9|)PV+=Pbu`(S?laauv`sp-U;vd>l_vF{o=gvrwqOlP-8hU|Ck*L+ zIqq>#1v1vn($f2U)l$NKmg4V>-D;K1R-98Q4!syuzu_t;bIQc0ned_)b}`xhOUd-* z)gqdSY&S(LWvQiQ%%0Nclru{6B+5v~&sn;~k|5zcRQL`GUk1A-qPKE1Dr@he>+3tb zgRYHa&5+<={@mHcn6Qr^q7xHVE#vpts)~*o#>N0Zlr-=#D|3b-x$fTJ9@a?MH^W7< zMx!iSCdw87mur`Msa!iIQlUBk2o%>_NoDG%DRL6ls#{Ju+b@ z^IW6fpqJ8Ai>$CX)4o`Z2r<_~4wcW*d5U7g%mzPN{vY=uC1>)umTaZe=GUnDXu z4b$H{5Whu4R)aGM2)|qKGUdwA#InTf{`n)NOO6IkmfwtX|D^FdoqgYUwZq@HoMR}b zw@BA>)Jeh8k_m+^scfsqE|p}@9R)+q$)^l1s;_%*Kjw=T?6lpd zB?zkG`mIH+#4&_bjID5KDKr15-t=arHz{QB=2J(nLt+;obJUxHgDVWOG%3X<4w3e) z=SYhRKdDk=Pk(=Zu>b9)(b45~AiGj>P9zAsaC#5S-C%8E0`&IgZySkv1s;v^XC9=b z9!R~!5W(u73rumqrM_?p{9O&!f8!9dNs`Y+>n8|8Pq1q6YAv!L&n z;!U79r9tzoT4ex1hX{DnS!)brwP9CRQNub#4a~vE^!ro5fg{LQZ$ocss z*u5*ZYZi3;zh7_to@AWTv#{C_7RL`KH=y_u*sEuQ1~JDpu}_~8rz5sty8@vj{F>|X zNM315Kwg7I=CLru==%Bwq}=a|_bXP=o8T>hBn;`wd&YIx^t57%w3K3qERc7JuvY^4?L8VMW z8gaji%FoXO8{awl(~4tQTPS*Z?N%E8#lEK0h&yC;*7giA9^#OatKBBf%h`Rs-+`yNtWx<)#dAv4yIdurbmD%K zCj>Z{=#$8<`E~yltH!)=oN4t^ODS^c5aUm7ZvEYj@sz2z48DXY?e4tx&Wyo_R6;+BBLC@)tGJ(z6sn zXm8d_yB}8`5M^bDjb^167Z;zu*tTb{m#A>1OYTP;;mb?16Jk=jBxhgc!qMg(1pOfu z+Yll8xN&QSW}u6rPQ}gM?d&|ijbQ+lc|OV!GAhZ?yxor}p1aJ%(PhW6E)CQ7kn;Vu z5mG|fgF48IwA)ujqP7!>>Z30K`p(%OsXl3%G>!Cc&G1`K&8v}PVtqK?ZdHDuh!qAU z3*aRn!~+iE0n3BYHc={x09cT2yvWhRE4OVH=QLuMXR~Y=T9=Fc>V^DL^RKJ^&$;*C22zzt7nENR5Om(eC>5;>_tU8T5+W0?$ll+d z*h|clo6x||pO&!9*eW*go31>Tt8wvcD zqyLVz1M6!X0Rs&Y`&+MgK4i5KhL(o=z?{(PN9wDUM+Onmb^v(8US8NB6=}#?5d4gz zF^(XJC;PA18@x~{Sd!9iH+k}N+o!Os?0v1SO8R9lNtw?!UN`d-bZEe+fbHZK$%i68 zs8o{X5&Ag8O{Bmc1p`Oy5Y|6dhLN)$^QquT9hqW7|5+U<6``(Y-;~zgXT|X}$ulGQ zgXc28O{Tsnf5QUHMkkVOBq!a4+}ZApKVnS!qsuRMJvH)1=o$Cc??umdxiLH4{SyHu z%LD!nVFUG5)CvZPXxme{EP*9+ab}FKKdVm>8%$AR1h+PlM|1yhJvB1i82tP?@^rH< zU*f=b+w;YTkuh((d)l>J@iq+!3~!0X)#2kSX7LEcZ&)YT=)sDNq{sLCTwyN;89^ov zjfXMyLQ>Vo>-7P>`16klY@3R@$Ud`v9s^Ok$6F@DnWb1Zpxfs`?U(DhR^fJotByoZ zA<}N@2pv@%_$@$#T!bNC;qV|An!h6Ae?N-5|J!{meq68i$9^VTJU438zMQ`(^A?MU zRwV9qBvHYg!3czIde2o)S2q0$^TE8=sCC1jJH&yNT4*bjhkVz=_0~n1RaQgnhFk34 zD~=EiJXRI|p$Cu>HNa#60U)K|FmM<|<5i>87>vMq?u@EWJu_M+4E!r6GjSkDOa5ei zx%EEhZAkW;0lAwv9>_(<`j_Vt1;lx@0~;#}#>Uc9W2RFe69B{*?}=eq4N8LzrDc$P z_y>6oCSV(AA=A8`t@B$zB}TH3U;3TU+%za)pguGA#~@w#lhMGH(51(l%p?U+gw$o) z`@)?bk|JSiQoOwTH6G9~Np0lGFP;Rjfkrado?N67wbbj^ufaW>#ev5wod)zNC2~pi zQQ+DP9+CGrSdVByX6MZoLs-EudwUs--Mzz5Y7Gns5)z#3#8gIdhrDvRl@uphFw79x z!sri%PU)EMz%hjGLZO!`uk*M&12EY&JJHvV4%C>Bc zP1Pz6&G0hcA=m%39bvZ~Qg;VA#5ie}!BG)c$$84G(wjW^Sfe*vs2}#V@)W@QBgI0l zU)uCtu6+7RNWig9sdU`1ALj>uNM=CPlJh?-#%Y2J)MXYjClH|6iZ8d+iy)8oE7}&X z+|L`C;Olrwz}6j{mYF%Bb$$|lYBGbfGAs8)>rgz{TJQnfQAKRWP7m0{q!acWUj;*H z)XyKZ9nq}Db8is!<4#Inj1yi=XL1=WPR`8<-i|gUfkj@O@EMFksZu0DS-+f_Pit+B zW)v>^qIdh>D6}3%3>0w&D-Rc#PklGj_C)g*H@1S>@EMbcQOwd0(6(RRIbP z^X!$ZrC;?8M3L1FpYkSEbA$KE_-V?0rm3wveSP$9!bD#2JsCeD%JsfXzeNy=@}f|+ z_bI!1WGF_^#159!3hXvt`#ohzK~dns!Nr}FtuydFc~3^sM$&I{(DnekpX;h&;c$0P zb<8ohqGReqgN9`2ltf7V9XN+IeD5do^{+LC%1$-0tKs`=q(`C*S8hK1%sSh>f<-$3 z_?X)Txp##gia550=4ay`dh)yA_Y zYMMgn=z3Yj%wY~!H)+e0IyNPA147)Q8PG3MDddY#zgB1hGC6B%$uMmTX!_R^4p zOg?_iMakX&Sfw0e!Z`p!HPNFtyn~Bye45UnI&u9DQZDXYQgirA#d3U*tkvh>l6s6{ z?d$LVnu($u>DpYs_P#8zj;_} zVy}4{i@2H%n$+uRE*@X1*lmxAUd6Cyc<3!v^G(;hSh~fB5JZ$5WC|1IWODUplSoR( zPec4UU&L$b{)Pjj$GG7x}qLO!O-lRX=z#j@PL4r%D^Z z`D-#NI@-Q{dpT*Fg^L>=66xG=TK1}lMXj21lh@=ACMh2kPwRsmrQ41Le+)4wRM^Tn z5?21jVD{%%=G1SzbeOfq%dO!X*NLeMtr{7YKhD8a@jeB1ddaL_{kY(18nF5n~>+m1<3Voz0*&)9?`di+I{<-B=a0ShhAM5Su6 z-%D)Jx4zz|jC5@?+&wr%`z=iVB+EoF$J~iRfS(^z8i%J-`bx?Wkt*Bl9W-Xp(k)GC zq@~42ERsi*!f5I}PnbC(@Szp4r#+radF)^m*86)SN3heF4JQOmUFbi98C88$TZx?k zMed!(+;XBVR9<|zJ((wL{yZ+kmM!m4g1q<$P7IbGie^!;-eSPDN{_78X2eyhV!!uwT>c5CZ9m2ZVQ}YV^td{9$e)uYH*r@Rd(1Kb4y(=O+~fqE zzh)PP#D6`t4LO-~Uv@G4IzMNgK99$+@(HVCBdA3 z4qVuMTXsV62|yg8Q0U>?=LdV9bYj4sD)SMyr$F#EJ5$>CY+JhOYHpc1K35&OSP214;JUxA zmVH;5@hN7E6EJhE35kfzTng!dLL_y*lkRDAdrDh>GcH|)`_N4-E#XMrw`mjTFMRO6 z%U?w58V+SY#F{s!vab8+V}P8$f9!&p((#G-lR@smEAhWSdygG{U8e*fLKZC*3;kM_ z;t|0CP*9}+q-(Xch>La0I<-0%lEOxK;qlmIe&wXV!svt|vQo0OP2woaCRmKVo|b0H zwl8-*F6`uwwZQc!M1t7#2td6`1yV(g#P&})cCRDZ>q^R=YcU0}Cs`E2{&wa^iF6(n zyqiUKX4F>O@qW(O>$pN7jz6iEy)QQ~j*(rIygTWAs9Az%G@jcS$foucEI0w(baI)pr4TRmsn9E4@ogz2NQ2% zH$t(>G$J#$bGtA671?q*#BsoQ3eQ8$bZO$kdQ-@ged05ar@8V|l{Xq@fy|gBc zd$!|@Rt$~^RBDbx9!N8$wBIw!X^8E8eiQC~Bw+9#?Hn~5@C^IXl+E&&lh8-sZ)kwL zIbDp3919z7X=kin15OA~hr~zGx{s#^h zEmzBct(4T}u90okc$o8fL;0 zrFi{EJ$z+_ZujD2->Y~&N;aAGu%G zGD;~X|M8*8vYp0{w0arbX(fYrKz&OQGiIaJxbi>6TMa*BZV^#Y^66Izjczn8c^d)+ zVRENFHL&8k%GzN0;yab_Uemu97vJd#V@`|b4YN6k-#4Jx@--jh-jR7`J|CZ+9)bqct|H2trs2 zrF@PnKjEzJ?QlXFzPtSxcFh(~`-z+r6wEiAX(+W-FlHq6fuoX$+xDpVLF?0gNbWcp z1OfqyCvm(JT#mP5&BouVqs|Q-o;z%>&3v9*4k>1ma(^|`WXl9K;9w5?iOO!RxoS52 zi-cA0YFp*L)c)5?!+droC-3qseeWh*u8e({eORj@XeHmc4k>hpo#2AqW7^Fs`FM}w zvsm-L*SFc;;(w6+mr>dZv9z3|H0g(+93KI~RwIPry4rb#=YIoBAZ)`d>xI(x4Fj|cZ_;;<*i7O zj;o!w;ZcwP*^IruWJOH>Vho9dzqYR$M4oJ61cCA3Dw)VMZhA27(Z($p z|M{mQ&xT)2#2I#vtb*eELlDNgb?urwDObnQxXV}-N{ZkF?9kv6ih>Uv+q&?rEEbhP zX%oRU;qeT2W0{okTiYGJX>{F~v+j-4F#0ln%^%)vQ9Q68ZiXa)OWZjxh}--Jc37lO z0^zp)iqgw0iPx#32;bRa{vGf6951U69E94oEQKA0@z7JK~!ko?V3$UR8bVie^b_?K%=BuL_{A{ zf<rJ5os+3f*^7hQ3)*~3#rH=D;K3D zWglkKVy-Ye?l|*i<~|*G2Ocx?zn}m6?)jhlF%cYC^nU$Dpxu&ms4EtKQOvf=aAR|U zEf&1I*bPmi#4RKc5-89jc_>U2h-S&Q9N2BaF9ZEq%HHgX#d}<;P!u?k=YZ|cAx|&R z6Z$|%ARx=f2W|szv*f7;j#}`Oz?&>(A3If{9F=MtaL1BV(-n(9Ddj0NTIxRVHzW|y za(Wc_X2E|GT7fFmyQz8}u)<-VUaflc?2F4OR0~{lNT3C{9xf$90#kS`H0F`Rh>!2N zsyga&3fVe63upzl0yRJtFaXp6w|rK&%PiT0As`~n zz!_jssW@?Z=MMl{YAQ6|`5nN8BJ|-OaK$YC#(sHEc<6zb20_5q$kPmYM}T)}kJm{P zp5JpsWTtBs`enf?GK}(FV95k^{j^~7$$o-e&>I-GU@P+!0~_%LuBXsPi}N+*BY{A@ z1^e!lfKi%+Wz>%NRI?UfwFe&Z8;SFc12-(#X%X3*iwuj%PP2UQTDPhuT{|&AC#j3< za?fB~6_LZ{RN;NvGYG5!Hj}!gsmf4qM_?No5oyS$!3nHGRT~4_)T?SIaJERDe+}%L zj8lm=;Cz8~B!F5~9iFs3v50IpPFd-r*a&b8IOo@Koownwq!MTX8c6-oqbx%ZyhrNx xCa$WVrrfE7AyZ+ZY|`ww#y>x+YEkb9{sSM$z0P1NW1#>5002ovPDHLkV1m)iWLN+I literal 0 HcmV?d00001 diff --git a/qgit/qgit_pre_step.sh b/qgit/qgit_pre_step.sh new file mode 100755 index 0000000..8eeaad7 --- /dev/null +++ b/qgit/qgit_pre_step.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +fichierIcon=/build/qgit.png +fichierDesktop=/build/qgit.desktop + +AUTRES_OPTIONS="-i $fichierIcon -d $fichierDesktop --plugin qt" + diff --git a/qtcreator/Dockerfile_centos7_qtcreator b/qtcreator/Dockerfile_centos7_qtcreator new file mode 100644 index 0000000..5c3735a --- /dev/null +++ b/qtcreator/Dockerfile_centos7_qtcreator @@ -0,0 +1,13 @@ +FROM cos7_base_qt + +ARG QTCREATOR_VER=v4.15.1 + +RUN git clone --recursive https://code.qt.io/qt-creator/qt-creator.git && \ + cd qt-creator && \ + git checkout $QTCREATOR_VER && \ + mkdir qtcreator_build && cd qtcreator_build && \ + QT_VER=$QT_VER cmake3 -DCMAKE_BUILD_TYPE=Release -G Ninja "-DCMAKE_PREFIX_PATH=/qt/$QT_VER/gcc_64/" /qt-creator/ && \ + cmake3 --build . + +# Exécuter une commande au démarrage de l'image. +CMD ["/bin/bash"] diff --git a/qtcreator/QtProject-qtcreator.svg b/qtcreator/QtProject-qtcreator.svg new file mode 100644 index 0000000..c124a24 --- /dev/null +++ b/qtcreator/QtProject-qtcreator.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/qtcreator/qtcreator.desktop b/qtcreator/qtcreator.desktop new file mode 100644 index 0000000..db08295 --- /dev/null +++ b/qtcreator/qtcreator.desktop @@ -0,0 +1,12 @@ +[Desktop Entry] +Type=Application +Exec=qtcreator %F +Name=Qt Creator +GenericName=C++ IDE for developing Qt applications +X-KDE-StartupNotify=true +Icon=QtProject-qtcreator +StartupWMClass=qtcreator +Terminal=false +Categories=Development;IDE;Qt; +MimeType=text/x-c++src;text/x-c++hdr;text/x-xsrc;application/x-designer;application/vnd.qt.qmakeprofile;application/vnd.qt.xml.resource; + diff --git a/qtcreator/qtcreator_post_step.sh b/qtcreator/qtcreator_post_step.sh new file mode 100755 index 0000000..7cde73a --- /dev/null +++ b/qtcreator/qtcreator_post_step.sh @@ -0,0 +1,6 @@ +#!/bin/bash +cp -r --preserve=links /qt-creator/qtcreator_build/lib/qtcreator $WORK_DIR/AppDir/usr/lib/ +cp -r --preserve=links /qt-creator/qtcreator_build/share/qtcreator $WORK_DIR/AppDir/usr/share/ + +wget https://thomasbriffard.com/public/mon_style_qtcreator.xml -O $WORK_DIR/AppDir/usr/share/qtcreator/styles/onedark_like.xml + diff --git a/qtcreator/qtcreator_pre_step.sh b/qtcreator/qtcreator_pre_step.sh new file mode 100755 index 0000000..485bbd2 --- /dev/null +++ b/qtcreator/qtcreator_pre_step.sh @@ -0,0 +1,18 @@ +#!/bin/bash + +cat << EOF > $WORK_DIR/AppRun +#!/bin/bash +APPDIR=\$(dirname -- "\$0") + +export LD_LIBRARY_PATH=\$APPDIR/usr/lib/:\$LD_LIBRARY_PATH + +exec \$APPDIR/usr/bin/$APP_NOM "\$@" +EOF + +fichierIcon=/build/QtProject-qtcreator.svg +fichierDesktop=/build/qtcreator.desktop + +QT_LIB=/qt/$QT_VER/gcc_64/lib/ +AUTRES_LIB="-l $QT_LIB/libQt5Help.so.5 -l $QT_LIB/libQt5QuickWidgets.so.5 -l $QT_LIB/libQt5DesignerComponents.so.5" + +AUTRES_OPTIONS="-i $fichierIcon -d $fichierDesktop $AUTRES_LIB --custom-apprun $WORK_DIR/AppRun --plugin qt" diff --git a/template.sh b/template.sh new file mode 100755 index 0000000..16c2eb7 --- /dev/null +++ b/template.sh @@ -0,0 +1,79 @@ +#!/bin/bash +# à utiliser pour builder une appimage d'une app quelconque, y compris hors cadre GIREF/BIB +# Ceci est un point départ plus qu'un script clef en main ! +function exit_on_fail() { + "$@" + local status=$? + if [ $status -ne 0 ]; then + echo "Erreur avec: $@" >&2 + exit $status + fi + return $status +} + +# Fonction permettant d'effectuer quelques vérifications de base +function verifications() { + echo "### Vérifications" + command -v linuxdeploy-x86_64.AppImage >/dev/null 2>&1 || { + echo >&2 "L'outil linuxdeploy-x86_64.AppImage n'est pas présent, pas de livraison possible !" + exit 1 + } + command -v appimagetool-x86_64.AppImage >/dev/null 2>&1 || { + echo >&2 "L'outil appimagetool-x86_64.AppImage n'est pas présent, pas de livraison possible !" + exit 1 + } +} + +if [[ "$#" -ne 2 ]] && [[ "$#" -ne 3 ]]; then + echo "Usage: $0 CHEMIN_COMPLET_VERS_APP/mon_app CHEMIN_DESTINATION_APPIMAGE" + exit 0 +fi + +script_dir=$(dirname $0) +BIN=$1 +DEST_DIR=$2 + +verifications + +APP_NOM=$(basename $BIN) +if [[ -z NOM_APPIMAGE ]]; then + if [[ "$APP_NOM" =~ "." ]]; then + NOM_APPIMAGE="${APP_NOM%.???}" + else + NOM_APPIMAGE=$APP_NOM + fi +fi + +AUTRES_OPTIONS="" + +# Répertoire de travail +WORK_DIR=$DEST_DIR/build_AppImage +rm -rf $WORK_DIR +mkdir -p $WORK_DIR/AppDir + +# Si la variable d'env CUSTOM_STEP_PRE_DEPLOY n'est pas vide, on l'utilise pour spécifier des commandes supplémentaires +# (CUSTOM_STEP_PRE_DEPLOY doit être le chemin vers le fichier contenant les commandes supplémentaires +if [[ -n $CUSTOM_STEP_PRE_DEPLOY ]]; then + echo "On source le fichier $CUSTOM_STEP_PRE_DEPLOY" + source $CUSTOM_STEP_PRE_DEPLOY +fi + +exit_on_fail linuxdeploy-x86_64.AppImage --appdir $WORK_DIR/AppDir \ + --executable $BIN \ + $AUTRES_OPTIONS + +# idem PRE_DEPLOY mais après l'appel à linuxdeploy (la structure du AppDir est alors terminée) +if [[ -n $CUSTOM_STEP_POST_DEPLOY ]]; then + echo "On source le fichier $CUSTOM_STEP_POST_DEPLOY" + source $CUSTOM_STEP_POST_DEPLOY +fi + +# Création du fichier .AppImage +echo "### Création fichier .AppImage" +exit_on_fail appimagetool-x86_64.AppImage $WORK_DIR/AppDir $DEST_DIR/$NOM_APPIMAGE.AppImage + +rm -rf $WORK_DIR + +chown $USER:$GROUP $DEST_DIR/$NOM_APPIMAGE.AppImage +echo "Création terminée ! -> $DEST_DIR/$NOM_APPIMAGE.AppImage" + diff --git a/valgrind/Dockerfile_centos7_valgrind b/valgrind/Dockerfile_centos7_valgrind new file mode 100644 index 0000000..0d8a8ea --- /dev/null +++ b/valgrind/Dockerfile_centos7_valgrind @@ -0,0 +1,14 @@ +FROM cos7_base + +ARG VALGRIND_VER=valgrind-3.17.0 + +RUN wget https://sourceware.org/pub/valgrind/$VALGRIND_VER.tar.bz2 && \ + tar -xvf $VALGRIND_VER.tar.bz2 && \ + cd $VALGRIND_VER && \ + ./configure && \ + make -j$(nproc) && \ + make install && \ + cd ../ && rm -rf $VALGRIND_VER* + +# Exécuter une commande au démarrage de l'image. +CMD ["/bin/bash"] diff --git a/valgrind/valgrind.desktop b/valgrind/valgrind.desktop new file mode 100644 index 0000000..b97f538 --- /dev/null +++ b/valgrind/valgrind.desktop @@ -0,0 +1,9 @@ +[Desktop Entry] +Name=valgrind +Type=Application +Exec=valgrind +Icon=valgrind +Comment=analysis tools +Categories=Development +StartupWMClass=valgrind +Terminal=false diff --git a/valgrind/valgrind.png b/valgrind/valgrind.png new file mode 100644 index 0000000000000000000000000000000000000000..1cca5ed481a9152687bee85d08356a74d62f8b6d GIT binary patch literal 8285 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 $WORK_DIR/AppRun +#!/bin/bash +APPDIR=\$(dirname -- "\$0") + +export PATH=\$APPDIR/usr/bin:$PATH +export LD_LIBRARY_PATH=\$APPDIR/usr/lib/:$LD_LIBRARY_PATH +export VALGRIND_LIB=\$APPDIR/valgrind + +exec \$APPDIR/usr/bin/$APP_NOM "\$@" +EOF + +fichierIcon=/build/valgrind.png +fichierDesktop=/build/valgrind.desktop + +AUTRES_OPTIONS="-i $fichierIcon -d $fichierDesktop --custom-apprun $WORK_DIR/AppRun" + +