Skip to content

Commit b2da0ed

Browse files
committed
test DIY install.sh script
1 parent 0cfb2c2 commit b2da0ed

File tree

4 files changed

+155
-65
lines changed

4 files changed

+155
-65
lines changed

.github/workflows/build-diy.yml

+53
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
# build diy image based on debian bullseye and bookworm
2+
# test install.sh script as-it
3+
name: Test DIY install.sh
4+
5+
# only trigger when last commit or PR modify install/**
6+
on:
7+
# only trigger CI when pull request on following branches and path
8+
pull_request:
9+
branches:
10+
- 'alpha'
11+
paths:
12+
- install/**
13+
# this is to manually trigger the worklow
14+
workflow_dispatch:
15+
inputs:
16+
logLevel:
17+
description: 'Reason'
18+
default: 'Manual launch'
19+
20+
env:
21+
GITHUB_REPOSITORY: jeedom/core
22+
23+
jobs:
24+
InstallationDIY:
25+
# This step build the same image on different runners / platforms
26+
strategy:
27+
# continue all jobs even if some fail
28+
fail-fast: false
29+
matrix:
30+
debian: [bullseye, bookworm ]
31+
targetRunner: [ ubuntu-latest] # [ ubuntu-latest, ARM, ARM64]
32+
database: [ 1] # [1, 0]
33+
34+
runs-on: ${{ matrix.targetRunner }}
35+
steps:
36+
37+
- name: Check Out Repo
38+
# Check out the repo, using current branch
39+
# https://github.com/marketplace/actions/checkout
40+
uses: actions/checkout@v4
41+
42+
- name: install jeedom:${{ matrix.debian }}
43+
# run current installation
44+
run: |
45+
echo "Running DIY install of ${GITHUB_REPOSITORY} / ${GITHUB_REF_NAME}" into ${{ matrix.debian }} >> ${GITHUB_STEP_SUMMARY}
46+
docker build -t jeedom:${{ matrix.debian }} -f tests/Dockerfile \
47+
--build-arg DEBIAN=${{ matrix.debian }} \
48+
--build-arg DATABASE=${{ matrix.database }} \
49+
--build-arg WEBSERVER_HOME=/var/www/html \
50+
--build-arg MARIADB_NAME=jeedom .
51+
docker run -p 80:80 -d --rm --name jeedom_${{ matrix.debian }} jeedom:${{ matrix.debian }}
52+
sleep 10
53+
docker exec jeedom_${{ matrix.debian }} php sick.php

install/install.sh

+69-64
Original file line numberDiff line numberDiff line change
@@ -11,18 +11,24 @@ if [ $(id -u) != 0 ] ; then
1111
fi
1212

1313
apt_install() {
14-
apt-get -o Dpkg::Options::="--force-confdef" -y install "$@"
14+
# quiet install but confirm correct installation
15+
apt-get --quiet --option Dpkg::Options::="--force-confdef" --yes install "$@" > /dev/null
1516
if [ $? -ne 0 ]; then
16-
echo "${RED}Cannot install $@ - Cancelling${NORMAL}"
17-
exit 1
17+
echo "${RED}Cannot install $@ - Continue anyway...${NORMAL}"
18+
else
19+
echo "${GREEN}$@ installed${NORMAL}"
1820
fi
1921
}
2022

2123
mariadb_sql() {
22-
echo "$@" | mariadb -uroot
24+
echo "$@" | mariadb -u root
2325
if [ $? -ne 0 ]; then
24-
echo "${RED}Cannot execute $@ in MySQL - Cancelling${NORMAL}"
25-
exit 1
26+
# try with sudo
27+
echo "$@" | sudo mariadb
28+
if [ $? -ne 0 ]; then
29+
echo "${RED}Cannot execute $@ in MySQL - Cancelling${NORMAL}"
30+
exit 1
31+
fi
2632
fi
2733
}
2834

@@ -52,42 +58,38 @@ step_1_upgrade() {
5258
echo "---------------------------------------------------------------------"
5359
echo "${YELLOW}Starting step 1 - install${NORMAL}"
5460

55-
apt-get update
56-
apt-get -f install
57-
apt-get -y dist-upgrade
61+
apt-get --quiet update
62+
apt-get --quiet -f install
63+
apt-get --quiet -y dist-upgrade
5864
echo "${GREEN} Step 1 - Install done ${NORMAL}"
5965
}
6066

6167
step_2_mainpackage() {
6268
echo "---------------------------------------------------------------------"
6369
echo "${YELLOW}Starting step 2 - packages${NORMAL}"
64-
apt-get -y install software-properties-common
65-
apt-get update
70+
apt_install software-properties-common
71+
apt-get --quiet update
6672
apt_install ntp ca-certificates unzip curl sudo cron
67-
apt-get -o Dpkg::Options::="--force-confdef" -y install locate tar telnet wget logrotate dos2unix ntpdate htop iotop vim iftop smbclient
68-
apt-get -y install usermod
69-
apt-get -y install visudo
70-
apt-get -y install git python python-pip
71-
apt-get -y install python3 python3-pip
72-
apt-get -y install libexpat1 ssl-cert
73-
apt-get -y install apt-transport-https
74-
apt-get -y install xvfb cutycapt xauth
75-
apt-get -y install at
76-
apt-get -y install mariadb-client
77-
apt-get -y install libav-tools
78-
apt-get -y install espeak
79-
apt-get -y install mbrola
80-
apt-get -y install net-tools
81-
apt-get -y install nmap
82-
apt-get -y install ffmpeg
83-
apt-get -y install usbutils
84-
apt-get -y install gettext
85-
apt-get -y install libcurl3-gnutls
86-
apt-get -y install chromium
87-
apt-get -y install librsync-dev
88-
apt-get -y install ssl-cert
89-
apt-get -y remove brltty
90-
apt-get -y iputils-ping
73+
apt_install locate tar telnet wget logrotate dos2unix ntpdate htop iotop vim iftop smbclient
74+
apt_install git python3 python3-pip
75+
apt_install libexpat1 ssl-cert
76+
apt_install apt-transport-https
77+
apt_install xvfb cutycapt xauth
78+
apt_install at
79+
apt_install mariadb-client
80+
apt_install espeak
81+
# apt_install mbrola # included in espeak
82+
apt_install net-tools
83+
apt_install nmap
84+
apt_install ffmpeg
85+
apt_install usbutils
86+
apt_install gettext
87+
apt_install libcurl3-gnutls
88+
apt_install chromium
89+
apt_install librsync-dev
90+
apt_install ssl-cert
91+
apt-get -qq -y remove brltty
92+
apt_install iputils-ping
9193
echo "${GREEN}step 2 - packages done${NORMAL}"
9294
}
9395

@@ -124,28 +126,28 @@ step_5_php() {
124126
echo "---------------------------------------------------------------------"
125127
echo "${YELLOW}Starting step 5 - php${NORMAL}"
126128
apt_install php libapache2-mod-php php-json php-mysql
127-
apt install -y php-curl
128-
apt install -y php-gd
129-
apt install -y php-imap
130-
apt install -y php-xml
131-
apt install -y php-opcache
132-
apt install -y php-soap
133-
apt install -y php-xmlrpc
134-
apt install -y php-common
135-
apt install -y php-dev
136-
apt install -y php-zip
137-
apt install -y php-ssh2
138-
apt install -y php-mbstring
139-
apt install -y php-ldap
140-
apt install -y php-yaml
141-
apt install -y php-snmp
129+
apt_install php-curl
130+
apt_install php-gd
131+
apt_install php-imap
132+
apt_install php-xml
133+
apt_install php-opcache
134+
apt_install php-soap
135+
apt_install php-xmlrpc
136+
apt_install php-common
137+
apt_install php-dev
138+
apt_install php-zip
139+
apt_install php-ssh2
140+
apt_install php-mbstring
141+
apt_install php-ldap
142+
apt_install php-yaml
143+
apt_install php-snmp
142144
echo "${GREEN}Step 5 - php done${NORMAL}"
143145
}
144146

145147
step_6_jeedom_download() {
146148
echo "---------------------------------------------------------------------"
147149
echo "${YELLOW}Starting step 6 - download Jeedom${NORMAL}"
148-
wget https://codeload.github.com/jeedom/core/zip/refs/heads/${VERSION} -O /tmp/jeedom.zip
150+
wget --no-verbose https://codeload.github.com/jeedom/core/zip/refs/heads/${VERSION} -O /tmp/jeedom.zip
149151

150152
if [ $? -ne 0 ]; then
151153
echo "${YELLOW}Cannot download Jeedom from Github. Use deployment version if exist.${NORMAL}"
@@ -157,20 +159,19 @@ step_6_jeedom_download() {
157159
echo "${RED}Cannot get jeedom.zip archive - Cancelling${NORMAL}"
158160
exit 1
159161
fi
160-
mkdir -p ${WEBSERVER_HOME}
161-
find ${WEBSERVER_HOME} ! -name 'index.html' -type f -exec rm -rf {} +
162162
rm -rf /root/core-*
163+
# unzip into /root/core-${VERSION}
163164
unzip -q /tmp/jeedom.zip -d /root/
164165
if [ $? -ne 0 ]; then
165166
echo "${RED}Cannot unpack archive - Cancelling${NORMAL}"
166167
exit 1
167168
fi
168-
cp -R /root/core-*/* ${WEBSERVER_HOME}
169-
cp -R /root/core-*/.[^.]* ${WEBSERVER_HOME}
170-
cp /root/core/.htaccess ${WEBSERVER_HOME}/.htaccess
169+
rm -rf ${WEBSERVER_HOME} && mkdir -p ${WEBSERVER_HOME}
170+
cd .
171+
mv -v -T /root/core-${VERSION} ${WEBSERVER_HOME}
172+
# force timestamp to now for all files:
171173
find ${WEBSERVER_HOME}/ -exec touch {} +
172174
rm -rf /root/core-* > /dev/null 2>&1
173-
rm -rf ${WEBSERVER_HOME}/core-* > /dev/null 2>&1
174175
rm /tmp/jeedom.zip
175176
echo "${GREEN}Step 6 - download Jeedom done${NORMAL}"
176177
}
@@ -184,7 +185,7 @@ step_7_jeedom_customization_mariadb() {
184185
echo 'Restart=always' >> /lib/systemd/system/mariadb.service.d/override.conf
185186
echo 'RestartSec=10' >> /lib/systemd/system/mariadb.service.d/override.conf
186187

187-
# do not start oany new service during docker build sequence
188+
# do not start any new service during docker build sequence
188189
if [ "${INSTALLATION_TYPE}" != "docker" ];then
189190
systemctl daemon-reload
190191

@@ -242,6 +243,7 @@ step_7_jeedom_customization_mariadb() {
242243

243244
step_8_jeedom_customization() {
244245
echo "---------------------------------------------------------------------"
246+
cd .
245247
echo "${YELLOW}Starting step 8 - Jeedom customization${NORMAL}"
246248
cp ${WEBSERVER_HOME}/install/apache_security /etc/apache2/conf-available/security.conf
247249
sed -i -e "s%WEBSERVER_HOME%${WEBSERVER_HOME}%g" /etc/apache2/conf-available/security.conf
@@ -262,7 +264,7 @@ step_8_jeedom_customization() {
262264

263265
echo '' > /etc/apache2/mods-available/alias.conf
264266

265-
mkdir /etc/systemd/system/apache2.service.d
267+
mkdir -p /etc/systemd/system/apache2.service.d
266268
echo "[Service]" > /etc/systemd/system/apache2.service.d/override.conf
267269
echo "PrivateTmp=no" >> /etc/systemd/system/apache2.service.d/override.conf
268270
echo "Restart=always" >> /etc/systemd/system/apache2.service.d/override.conf
@@ -305,15 +307,15 @@ step_9_jeedom_configuration() {
305307
echo "${YELLOW}Starting step 9 - Jeedom configuration${NORMAL}"
306308

307309
if [ "${INSTALLATION_TYPE}" != "docker" ];then
308-
echo "DROP USER 'jeedom'@'localhost';" | mariadb -uroot > /dev/null 2>&1
310+
mariadb_sql "DROP USER IF EXISTS 'jeedom'@'localhost';"
309311
mariadb_sql "CREATE USER 'jeedom'@'localhost' IDENTIFIED BY '${MARIADB_JEEDOM_PASSWD}';"
310-
mariadb_sql "DROP DATABASE IF EXISTS jeedom;"
311-
mariadb_sql "CREATE DATABASE jeedom;"
312+
mariadb_sql "DROP DATABASE IF EXISTS ${MARIADB_NAME};"
313+
mariadb_sql "CREATE DATABASE ${MARIADB_NAME}"
312314
mariadb_sql "GRANT ALL PRIVILEGES ON jeedom.* TO 'jeedom'@'localhost';"
313315

314316
cp ${WEBSERVER_HOME}/core/config/common.config.sample.php ${WEBSERVER_HOME}/core/config/common.config.php
315317
sed -i "s/#PASSWORD#/${MARIADB_JEEDOM_PASSWD}/g" ${WEBSERVER_HOME}/core/config/common.config.php
316-
sed -i "s/#DBNAME#/jeedom/g" ${WEBSERVER_HOME}/core/config/common.config.php
318+
sed -i "s/#DBNAME#/${MARIADB_NAME}/g" ${WEBSERVER_HOME}/core/config/common.config.php
317319
sed -i "s/#USERNAME#/jeedom/g" ${WEBSERVER_HOME}/core/config/common.config.php
318320
sed -i "s/#PORT#/3306/g" ${WEBSERVER_HOME}/core/config/common.config.php
319321
sed -i "s/#HOST#/localhost/g" ${WEBSERVER_HOME}/core/config/common.config.php
@@ -325,12 +327,14 @@ step_9_jeedom_configuration() {
325327

326328
step_10_jeedom_installation() {
327329
echo "---------------------------------------------------------------------"
330+
cd .
328331
echo "${YELLOW}Starting step 10 - Jeedom install${NORMAL}"
329332
chmod +x ${WEBSERVER_HOME}/resources/install_composer.sh
330333
${WEBSERVER_HOME}/resources/install_composer.sh
331334
export COMPOSER_ALLOW_SUPERUSER=1
332335
cd ${WEBSERVER_HOME}
333336
composer install --no-ansi --no-dev --no-interaction --no-plugins --no-progress --no-scripts --optimize-autoloader
337+
334338
mkdir -p /tmp/jeedom
335339
chmod 777 -R /tmp/jeedom
336340
chown www-data:www-data -R /tmp/jeedom
@@ -414,11 +418,12 @@ distrib_1_spe(){
414418
STEP=0
415419
VERSION=master
416420
WEBSERVER_HOME=/var/www/html
421+
MARIADB_NAME=${MARIADB_NAME:-jeedom}
417422
MARIADB_JEEDOM_PASSWD=${MARIADB_JEEDOM_PASSWD:-$(openssl rand -base64 32 | tr -d /=+ | cut -c -15)}
418423
INSTALLATION_TYPE='standard'
419424
DATABASE=1
420425

421-
while getopts ":s:v:w:m:i:d:" opt; do
426+
while getopts ":s:v:w:i:d:" opt; do
422427
case $opt in
423428
s) STEP="$OPTARG"
424429
;;

resources/install_composer.sh

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
echo "Begin installation of composer"
44
wget https://getcomposer.org/installer -O composer-setup.php
55
php composer-setup.php
6-
php -r "unlink('composer-setup.php');"
6+
rm composer-setup.php
77
[[ -f /usr/local/bin/composer ]] && sudo rm /usr/local/bin/composer || true
88
sudo mv composer.phar /usr/local/bin/composer
99
echo "End installation of composer"

tests/Dockerfile

+32
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
ARG DEBIAN=bookworm-slim
2+
3+
FROM debian:${DEBIAN}
4+
5+
ARG WEBSERVER_HOME=/var/www/html
6+
ENV WEBSERVER_HOME=${WEBSERVER_HOME}
7+
ARG VERSION=alpha
8+
ARG DATABASE=1
9+
ARG MARIADB_NAME=jeedom
10+
ENV MARIADB_NAME=${MARIADB_NAME}
11+
WORKDIR ${WEBSERVER_HOME}
12+
13+
COPY --chown=root:root --chmod=550 install/install.sh /install.sh
14+
RUN /install.sh -v ${VERSION} -w ${WEBSERVER_HOME} -d ${DATABASE}
15+
16+
# créer le script d'init
17+
COPY --chown=root:root --chmod=550 <<EOF /root/init.sh
18+
#!/bin/bash
19+
# démarrer mariadb
20+
service mariadb start
21+
# démarrer atd
22+
service atd start
23+
# démarrer apache2
24+
service apache2 start
25+
# démarrer cron
26+
service cron start
27+
# attendre à l'infini
28+
while :; do echo "$((COUNT++)) DAYS"; sleep 86400; done
29+
EOF
30+
31+
# définir le script d'init comme commande par défaut
32+
CMD ["/root/init.sh"]

0 commit comments

Comments
 (0)