Skip to content

Commit 1af934a

Browse files
feat(core): Microservices infrastructure project GSoC 2025
Signed-off-by: Muhammad Salman <chsalmanramzan422@gmail.com>
1 parent e44a7a8 commit 1af934a

25 files changed

+6236
-206
lines changed

.editorconfig

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,20 @@
22

33
# SPDX-License-Identifier: FSFAP
44

5-
# top-most EditorConfig file
6-
root = true
5+
; # top-most EditorConfig file
6+
; root = true
77

8-
[*]
9-
end_of_line = lf
10-
insert_final_newline = true
11-
charset = utf-8
12-
indent_style = space
13-
indent_size = 2
8+
; [*]
9+
; end_of_line = lf
10+
; insert_final_newline = true
11+
; charset = utf-8
12+
; indent_style = space
13+
; indent_size = 2
1414

1515
[Makefile]
1616
indent_style = tab
1717

1818
[rules]
1919
indent_style = tab
20+
; [Makefile]
21+
; indent_style = tab

Docker/Dockerfile.pkg

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@
44
#
55
# Description: Docker container image recipe for pacakges base image
66

7-
FROM debian:buster-slim as builder
7+
# FROM debian:buster-slim as builder
8+
FROM debian:buster-slim AS builder
89
LABEL maintainer="Fossology <fossology@fossology.org>"
910

1011
WORKDIR /fossology_packages/fossology
@@ -20,8 +21,22 @@ COPY . /fossology_packages/fossology
2021

2122
RUN ./utils/fo-installdeps -y -b
2223

24+
RUN apt-get update && apt-get install -y \
25+
libcurl4-openssl-dev \
26+
libdb-dev \
27+
libpq-dev \
28+
python3-dev \
29+
libgcrypt20-dev \
30+
libglib2.0-dev \
31+
debhelper
32+
2333
RUN ./utils/fo-debuild --no-sign --no-tar
2434

35+
ENV FOSSOLOGY_DB_HOST=db
36+
ENV FOSSOLOGY_DB_NAME=fossology
37+
ENV FOSSOLOGY_DB_USER=fossy
38+
ENV FOSSOLOGY_DB_PASSWORD=fossy
39+
2540
FROM scratch
2641

2742
WORKDIR /fossology_packages/fossology

Docker/Dockerfile.scheduler

Lines changed: 25 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,40 +4,52 @@
44
#
55
# Description: Docker container image recipe for scheduler
66

7+
# Builder stage to compile and package dependencies
78
FROM fossology/packages:latest as builder
89
LABEL maintainer="Fossology <fossology@fossology.org>"
910

1011
WORKDIR /fossology_packages/fossology
1112

13+
# Final runtime image
1214
FROM debian:buster-slim
1315

1416
WORKDIR /fossology
1517

1618
LABEL maintainer="Fossology <fossology@fossology.org>"
1719

20+
# Install required dependencies (client only, no server)
1821
RUN DEBIAN_FRONTEND=noninteractive apt-get update \
19-
&& DEBIAN_FRONTEND=noninteractive apt-get install postgresql postgresql-contrib dnsutils -y
22+
&& DEBIAN_FRONTEND=noninteractive apt-get install -y postgresql-client dnsutils curl libcurl4-openssl-dev
2023

24+
# Copy deb packages from builder stage
2125
COPY --from=builder /fossology_packages/fossology/packages/fossology-common_*_amd64.deb .
2226
COPY --from=builder /fossology_packages/fossology/packages/fossology-db_*_amd64.deb .
2327
COPY --from=builder /fossology_packages/fossology/packages/fossology-scheduler_*_amd64.deb .
2428

25-
RUN DEBIAN_FRONTEND=noninteractive apt-get update \
26-
&& pg_ctlcluster 11 main start && service postgresql start && service postgresql status\
27-
&& dpkg -i fossology-common_*_amd64.deb fossology-scheduler_*_amd64.deb fossology-db_*_amd64.deb || echo "deb failed" \
28-
&& DEBIAN_FRONTEND=noninteractive apt-get install -y -f
29+
# Install deb packages and force configuration skip for local DB
30+
RUN DEBIAN_FRONTEND=noninteractive dpkg -i --force-confmiss fossology-common_*_amd64.deb fossology-scheduler_*_amd64.deb fossology-db_*_amd64.deb || echo "deb failed" \
31+
&& DEBIAN_FRONTEND=noninteractive apt-get install -y -f \
32+
&& dpkg --configure --force-confmiss -a
2933

30-
RUN DEBIAN_FRONTEND=noninteractive apt-get install curl -y
31-
RUN curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl
32-
RUN chmod +x ./kubectl
33-
RUN mv ./kubectl /usr/local/bin
34+
# Install kubectl for Kubernetes interaction
35+
RUN curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl \
36+
&& chmod +x ./kubectl \
37+
&& mv ./kubectl /usr/local/bin/
3438

39+
# Copy necessary files
3540
COPY ./src/www/ui/core-schema.dat /usr/share/fossology/www/ui/
36-
41+
COPY /home/dev/Omar/fossology/src/lib/php/tests/sysconfigDirTest/fossology.conf /etc/fossology/fossology.conf
3742
COPY ./Docker/docker-entrypoint.k8s.sh /fossology/docker-entrypoint.sh
43+
44+
# Pre-apply config changes during build to avoid runtime sed issues
45+
RUN sed -i 's/address = localhost/address = db/' /etc/fossology/fossology.conf \
46+
&& sed -i 's/port = 5555/port = 5432/' /etc/fossology/fossology.conf \
47+
&& chmod 644 /etc/fossology/fossology.conf
48+
49+
# Ensure entrypoint is executable and set
3850
RUN chmod +x /fossology/docker-entrypoint.sh
3951
ENTRYPOINT ["/fossology/docker-entrypoint.sh"]
4052

41-
# scheduler needs acces to ./kube directory so it can access kubectl command
42-
RUN mkdir /root/.kube
43-
RUN chmod -R o=rwx /root/
53+
# Create kube directory for kubectl
54+
RUN mkdir -p /root/.kube \
55+
&& chmod -R o=rwx /root/

Docker/Dockerfile.web

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,27 +15,37 @@ WORKDIR /fossology
1515

1616
LABEL maintainer="Fossology <fossology@fossology.org>"
1717

18-
### install dependencies
18+
### Install dependencies
1919
COPY --from=builder /fossology_packages/fossology/packages/fossology-common_*_amd64.deb .
2020
COPY --from=builder /fossology_packages/fossology/packages/fossology-web_*_amd64.deb .
2121

2222
RUN DEBIAN_FRONTEND=noninteractive apt-get update \
23+
&& DEBIAN_FRONTEND=noninteractive apt-get install -y postgresql-client \
2324
&& dpkg -i fossology-common_*_amd64.deb fossology-web_*_amd64.deb || echo "deb failed" \
2425
&& DEBIAN_FRONTEND=noninteractive apt-get install -y -f
2526

26-
# configure php
27-
COPY ./install/scripts/php-conf-fix.sh ./install/scripts/php-conf-fix.sh
27+
# Configure PHP
28+
COPY install/scripts/php-conf-fix.sh ./install/scripts/php-conf-fix.sh
2829
RUN /fossology/install/scripts/php-conf-fix.sh --overwrite
2930

30-
# configure apache
31+
# Configure Apache
3132
RUN mkdir -p /var/log/apache2/ \
32-
&& ln -sf /proc/self/fd/1 /var/log/apache2/access.log \
33-
&& ln -sf /proc/self/fd/1 /var/log/apache2/error.log
33+
&& ln -sf /proc/self/fd/1 /var/log/apache2/access.log \
34+
&& ln -sf /proc/self/fd/1 /var/log/apache2/error.log
3435

3536
RUN DEBIAN_FRONTEND=noninteractive apt-get update \
36-
&& DEBIAN_FRONTEND=noninteractive apt-get install cron -y\
37-
&& service cron start
37+
&& DEBIAN_FRONTEND=noninteractive apt-get install -y apache2 cron \
38+
&& a2enmod rewrite \
39+
&& sed -i 's/DocumentRoot \/var\/www\/html/DocumentRoot \/usr\/share\/fossology\/www\/ui/' /etc/apache2/sites-available/000-default.conf \
40+
&& a2dissite 000-default.conf \
41+
&& a2ensite 000-default.conf
42+
43+
# Copy FOSSology UI files (ensure this path matches your project)
44+
COPY ./src/www/ui/ /usr/share/fossology/www/ui/
45+
46+
# Start services
47+
RUN service cron start
3848

3949
COPY ./Docker/docker-entrypoint.k8s.sh /fossology/docker-entrypoint.sh
4050
RUN chmod +x /fossology/docker-entrypoint.sh
41-
ENTRYPOINT ["/fossology/docker-entrypoint.sh"]
51+
ENTRYPOINT ["/fossology/docker-entrypoint.sh"]

Docker/docker-entrypoint.k8s.sh

Lines changed: 24 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -3,26 +3,22 @@
33
# SPDX-FileCopyrightText: 2021 Omar AbdelSamea <omarmohamed168@gmail.com>
44
# SPDX-License-Identifier: GPL-2.0
55
#
6-
# Description: startup helper script for the FOSSology Docker container in kuberentes
6+
# Description: startup helper script for the FOSSology Docker container in Kubernetes
7+
# Set database environment variables (override Db.conf if needed)
8+
export FOSSOLOGY_DB_HOST=db
9+
export FOSSOLOGY_DB_NAME=fossology
10+
export FOSSOLOGY_DB_USER=fossy
11+
export FOSSOLOGY_DB_PASSWORD=fossy
712

813
set -o errexit -o nounset -o pipefail
914

10-
sed -i 's/address = .*/address = '"${FOSSOLOGY_SCHEDULER_HOST:-scheduler}"'/' \
11-
/etc/fossology/fossology.conf
12-
13-
# Startup DB if needed or wait for external DB
14-
if [[ "$1" == "scheduler" ]]; then
15-
echo '*****************************************************'
16-
echo 'WARNING: No database host was set and therefore the'
17-
echo 'internal database without persistency will be used.'
18-
echo 'THIS IS NOT RECOMENDED FOR PRODUCTIVE USE!'
19-
echo '*****************************************************'
20-
bash ./fo_conf.sh db
21-
sleep 10
22-
/etc/init.d/postgresql start
23-
else
15+
# update fossology.conf with scheduler and database host
16+
sed -i 's/address = .*/address = '"${FOSSOLOGY_SCHEDULER_HOST:-scheduler}"'/' /etc/fossology/fossology.conf
17+
sed -i '/\[FOSSOLOGY\]/a DB_HOST=db' /etc/fossology/fossology.conf
18+
# wait for external database (skip for web container)
19+
if [[ "$1" != "web" ]]; then
2420
test_for_postgres() {
25-
PGPASSWORD=$db_password psql -h "$db_host" "$db_name" "$db_user" -c '\l' >/dev/null
21+
PGPASSWORD=$FOSSOLOGY_DB_PASSWORD psql -h "$FOSSOLOGY_DB_HOST" "$FOSSOLOGY_DB_NAME" "$FOSSOLOGY_DB_USER" -c '\l' >/dev/null 2>&1
2622
return $?
2723
}
2824
until test_for_postgres; do
@@ -37,31 +33,31 @@ if [[ $# -eq 0 || ($# -eq 1 && "$1" == "scheduler") ]]; then
3733
bash ./fo_conf.sh scheduler
3834
fi
3935

40-
# Start Fossology
36+
# start Fossology
4137
echo
4238
echo 'Fossology initialisation complete; Starting up...'
4339
echo
4440
if [[ $# -eq 0 ]]; then
4541
/etc/init.d/cron start
46-
/etc/fossology/mods-enabled/scheduler/agent/fo_scheduler \
47-
--log /dev/stdout \
48-
--verbose=4095 \
49-
--reset &
42+
/etc/fossology/mods-enabled/scheduler/agent/fo_scheduler --log /dev/stdout --verbose=4095 --reset &
5043
/usr/sbin/apache2ctl -D FOREGROUND
5144
elif [[ $# -eq 1 && "$1" == "scheduler" ]]; then
52-
exec /etc/fossology/mods-enabled/scheduler/agent/fo_scheduler \
53-
--log /dev/stdout \
54-
--verbose=4095 \
55-
--reset
45+
exec /etc/fossology/mods-enabled/scheduler/agent/fo_scheduler --log /dev/stdout --verbose=4095 --reset
5646
elif [[ $# -eq 1 && "$1" == "web" ]]; then
47+
# configure Apache for FOSSology
48+
sed -i 's/DocumentRoot \/var\/www\/html/DocumentRoot \/usr\/share\/fossology\/www\/ui/' /etc/apache2/sites-available/000-default.conf
49+
a2dissite 000-default.conf
50+
a2ensite 000-default.conf
51+
sed -i '/<Directory \/var\/www\/html>/,/<\/Directory>/ s/DirectoryIndex.*/DirectoryIndex index.php index.html/' /etc/apache2/mods-available/dir.conf
52+
a2enmod dir
53+
a2enmod php7.3
5754
service cron start
5855
exec /usr/sbin/apache2ctl -e info -D FOREGROUND
5956
elif [[ $# -ge 1 && "$1" == "agent" ]]; then
6057
bash ./fo_conf.sh agent $2
6158
chmod +x /usr/share/fossology/scheduler/agent/fo_cli
62-
/usr/share/fossology/scheduler/agent/fo_cli --host=${FOSSOLOGY_SCHEDULER_HOST:-scheduler} \
63-
--port=24693 --reload || echo "Scheduler is initlaizing or not running"
59+
/usr/share/fossology/scheduler/agent/fo_cli --host=${FOSSOLOGY_SCHEDULER_HOST:-scheduler} --port=24693 --reload || echo "Scheduler is initializing or not running"
6460
exec tail -f /dev/null
6561
else
6662
exec "$@"
67-
fi
63+
fi

Docker/php-conf-fix.sh

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
#!/bin/bash
2+
#
3+
# Simple shell script to adjust php.ini to recommended Fossology settings as of 2013
4+
#
5+
# uses phpIni to store file path - change if required
6+
#
7+
PHP_PATH=$(php --ini | awk '/\/etc\/php.*\/cli$/{print $5}')
8+
phpIni="${PHP_PATH}/../apache2/php.ini"
9+
10+
echo 'Automated php.ini configuration adjustments'
11+
echo
12+
if [ -f /etc/redhat-release ]; then
13+
phpIni=/etc/php.ini
14+
TIMEZONE=`readlink -f /etc/localtime | sed 's%/usr/share/zoneinfo/%%'`
15+
else
16+
TIMEZONE=`cat /etc/timezone`
17+
fi
18+
19+
if [ -z $TIMEZONE ]; then
20+
TIMEZONE="America/Denver"
21+
fi
22+
23+
if [ -e $phpIni ]
24+
then
25+
echo 'Copies php.ini to current directory and creates a backup file'
26+
echo 'Modifies it and then displays variance for confirmation.'
27+
cp $phpIni php.ini.orig
28+
cp php.ini.orig php.ini
29+
echo 'If happy with changes you should save original and move new one back.'
30+
echo 'Setting max execution time to 300 seconds (5 mins)'
31+
sed -i 's/^\(max_execution_time\s*=\s*\).*$/\1300/' php.ini
32+
echo 'Setting memory limit to 702M'
33+
sed -i 's/^\(memory_limit\s*=\s*\).*$/\1702M/' php.ini
34+
echo 'Setting post max size to 701M'
35+
sed -i 's/^\(post_max_size\s*=\s*\).*$/\1701M/' php.ini
36+
echo 'Setting max upload filesize to 700M'
37+
sed -i 's/^\(upload_max_filesize\s*=\s*\).*$/\1700M/' php.ini
38+
echo "Setting timezone to $TIMEZONE"
39+
sed -i "s%.*date.timezone =.*%date.timezone = $TIMEZONE%" php.ini
40+
echo 'php.ini adjusted!'
41+
echo
42+
echo 'Display the changes made'
43+
diff php.ini.orig php.ini
44+
echo $1
45+
if [ "$1" == "--overwrite" ]
46+
then
47+
cp -f php.ini $phpIni
48+
else
49+
echo 'If these are OK you should copy php.ini back and restart apache'
50+
fi
51+
else
52+
echo 'php.ini was not located as expected. Please adjust phpIni to suit.'
53+
fi

Dockerfile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ RUN DEBIAN_FRONTEND=noninteractive apt-get update \
2626
sudo \
2727
cmake \
2828
ninja-build \
29+
libcurl4-openssl-dev \
2930
&& rm -rf /var/lib/apt/lists/*
3031

3132
COPY ./utils/fo-installdeps ./utils/fo-installdeps

0 commit comments

Comments
 (0)