Adding support for another packages lists 70/103970/4
authorJan Benedikt <j.benedikt@partner.samsung.com>
Thu, 19 Mar 2020 15:03:25 +0000 (16:03 +0100)
committerJan Benedikt <j.benedikt@partner.samsung.com>
Thu, 30 Apr 2020 07:38:41 +0000 (09:38 +0200)
Adding support for another packages lists in create_repo script.
Additional package lists is for packages which are for example helpful tools for debugging.

Issue-ID: OOM-2340
Signed-off-by: Jan Benedikt <j.benedikt@partner.samsung.com>
Change-Id: If0bcb437809b60d83ed92436adade086314ccfac

build/create_repo.sh
build/docker-entrypoint.sh

index 4403a4e..fa53e68 100755 (executable)
@@ -15,16 +15,28 @@ container_offline_volume="/mnt/offline/"
 # Path inside container where will be created repository
 container_repo_volume="/mnt/repo/"
 
+# Path inside container where will be stored additional packages lists
+container_list_volume="/mnt/additional-lists/"
+
 # Show help for using this script
 help () {
-    echo "Script for run docker container creating DEB or RPM repository"
-    echo "Type of repository is created based on user input or if input is empty type of host OS"
-    echo "usage: create_repo.sh [-d|--destination-repository output directory] [-c|--cloned-directory input directory] [-t|--target-platform (ubuntu/rhel/centos) target platform for repository]"
-    echo "-h --help: Show this help"
-    echo "-d --destination-repository: set path where will be stored RPM packages. Default value is current directory"
-    echo "-c --cloned-directory: set path where is stored this script and docker-entrypoint script (offline-installer/build directory). Fill it just when you want to use different script/datalists"
-    echo "-t --target-platform: set target platform for repository"
-    echo "If build folder from offline repository is not specified will be used default path of current folder."
+cat <<EOF
+Script for run docker container creating DEB or RPM repository
+
+Type of repository is created based on user input or if input is empty type of host OS
+
+usage: create_repo.sh [-d|--destination-repository output directory] [-c|--cloned-directory input directory] 
+                      [-t|--target-platform centos target platform for repository]
+                      [-a|----additional-lists path to additional package list]
+-h --help: Show this help
+-d --destination-repository: set path where will be stored RPM packages. Default value is current directory
+-c --cloned-directory: set path where is stored this script and docker-entrypoint script (offline-installer/build directory). Fill it just when you want to use different script/datalists
+-t --target-platform: set target platform for repository (ubuntu/rhel/centos) 
+-a --additional-list: add additional packages list
+                      can be used multiple times for more additional lists
+
+If build folder from offline repository is not specified will be used default path of current folder.
+EOF
 }
 
 # Get type of distribution
@@ -76,11 +88,16 @@ do
             # Sets path where will be repository created
             volume_repo_directory="$2"
             ;;
-        -t|--type)
+        -t|--target-platform)
             # Repository type (rpm/deb)
             # Sets target platform for repository
             target_input="$2"
             ;;
+        -a|--additional-list)
+            # Array with more packages lists
+            # Add more packages lists to download
+            additional_lists+=("$2")
+            ;;
         *)
             # unknown option
             help # show help
@@ -124,15 +141,28 @@ if [ ! "$(docker ps -q -f name=$container_name)" ]; then
     # run repo container
     # name of container $container_name
     # docker entrypoint script from mounted volume
-    #
+    # with dynamic parameters
+    # mount additional packages lists to container
+    param_array=()
+    mounted_lists=()
+    param_array+=(--directory ${container_repo_volume})
+    param_array+=(--list ${container_offline_volume}data_lists/)
+    param_array+=(--packages-lists-path ${container_list_volume})
+    [[ ! ${#additional_lists[@]} -eq 0 ]] && \
+        for array_list in "${additional_lists[@]}";
+        do
+            param_array+=(--additional-list "${array_list##*/}") && \
+            mounted_lists+=(-v ${array_list}:${container_list_volume}${array_list##*/})
+        done
+
     docker run -d \
                --name $container_name \
                -v ${volume_offline_directory}:${container_offline_volume} \
                -v ${volume_repo_directory}:${container_repo_volume} \
+               "${mounted_lists[@]}" \
                --rm \
                --entrypoint="${container_offline_volume}docker-entrypoint.sh" \
                     -it ${docker_image} \
-                    --directory ${container_repo_volume} \
-                    --list ${container_offline_volume}data_lists/
+                    "${param_array[@]}"
     docker logs $(docker ps --filter "name=${container_name}" --format '{{.ID}}' -a) -f
 fi
index a36eb9e..b3306e2 100755 (executable)
@@ -21,16 +21,27 @@ OFFLINE_REPO_DIR=""
 # Path where is stored onap_rpm.list and onap_deb.list file
 PCKG_LIST_DIR=""
 
+# Path where is stored additional packages lists
+ADD_LIST_DIR=""
+
+# Show help for using this script
 help () {
-    echo -e "Docker entrypoint script for creating RPM/DEB repository based on linux distribution where script is running\n"
-    echo "usage: create-repo.sh [-d|--directory output directory] [-l|--list input rpm/deb list directory]"
-    echo "-h --help: Show this help"
-    echo "-d --directory: set path for repo directory in container"
-    echo -e "-l --list: set path where rpm or deb list is stored in container\n"
-    echo "Both paths have to be set with shared volume between"
-    echo "container and host computer. Default path in container is: /tmp/"
-    echo "Repository will be created at: /<path>/resources/pkg/rhel/"
-    echo "RMP/DEB list is stored at: ./data_list/"
+cat <<EOF
+Docker entrypoint script for creating RPM/DEB repository based on linux distribution where script is running
+
+usage: create-repo.sh [-d|--directory output directory] [-l|--list input rpm/deb list directory] [-a|--additional-lists list1.list]
+-h --help: Show this help
+-d --directory: set path for repo directory in container
+-l --list: set path where rpm or deb list is stored in container
+-a --additional-list: add name of additional packages list
+                      can be used multiple times for more additional lists
+-p --packages-lists-path: set path for other additional packages lists
+
+Both paths have to be set with shared volume between
+container and host computer. Default path in container is: /tmp/
+Repository will be created at: /<path>/resources/pkg/rhel/
+RMP/DEB list is stored at: ./data_list/
+EOF
 }
 
 # Getting input parametters
@@ -57,6 +68,15 @@ do
             # Sets path where is stored onap_rpm.list or onap_deb.list file
             PCKG_LIST_DIR="$2"
             ;;
+        -p|--packages-lists-path)
+            # Path parametter
+            # Sets path where is stored additional packages lists
+            ADD_LIST_DIR="$2"
+            ;;
+        -a|--additional-list)
+            # Array of additional packages lists
+            ADDITIONAL_LISTS+=("$2")
+            ;;
         *)
             # unknown option
             help # show help
@@ -83,6 +103,13 @@ then
     PCKG_LIST_DIR="/tmp/offline/data_list/"
 fi
 
+# Testing if additional packages list parametter was used
+# If not variable is sets to default value /tmp/additional-lists
+if test -z "$PCKG_LIST_DIR"
+then
+    PCKG_LIST_DIR="/tmp/additional-lists/"
+fi
+
 case "$distro_type" in
     ubuntu)
         # Change current working dir
@@ -108,20 +135,35 @@ case "$distro_type" in
         # Download all packages from onap_deb.list via apt-get to repository folder
         for i in $(cat ${PCKG_LIST_DIR}onap_deb.list | awk '{print $1}');do apt-get download $i -y; done
         for i in $(cat ${PCKG_LIST_DIR}onap_deb.list | awk '{print $1}');
-        do
-            for depends in $(apt-cache depends $i | grep -E 'Depends' | cut -d ':' -f 2,3 | sed -e s/'<'/''/ -e s/'>'/''/);
-                do apt-get download $depends -y;
-            done;
-        done
+                    do
+                    for depends in $(apt-cache depends $i | grep -E 'Depends' | cut -d ':' -f 2,3 | sed -e s/'<'/''/ -e s/'>'/''/);
+                        do apt-get download $depends -y;
+                    done;
+                done
+
+        # Download all packages with dependecies from all additional packages lists via apt-get to repository folder
+        if ! [ ${#ADDITIONAL_LISTS[@]} -eq 0 ]; then
+            for list in ${ADDITIONAL_LISTS[@]}
+            do
+                for i in $(cat ${ADD_LIST_DIR}$list | awk '{print $1}');do apt-get download $i -y; done
+                for i in $(cat ${ADD_LIST_DIR}$list | awk '{print $1}');
+                    do
+                    for depends in $(apt-cache depends $i | grep -E 'Depends' | cut -d ':' -f 2,3 | sed -e s/'<'/''/ -e s/'>'/''/);
+                        do apt-get download $depends -y;
+                    done;
+                done
+            done
+        fi
 
         # In repository folder create gz package with deb packages
         dpkg-scanpackages . /dev/null | gzip -9c > Packages.gz
     ;;
 
     rhel)
-        # Install createrepo package for create repository in folder
-        # and yum-utils due to yum-config-manager for adding docker repository
-        yum install createrepo yum-utils -y
+        # Install createrepo package for create repository in folder,
+        # yum-utils due to yum-config-manager for adding docker repository
+        # and epel-release for additional packages (like jq etc.)
+        yum install createrepo yum-utils epel-release -y
 
         # Add official docker repository
         yum-config-manager --add-repo=https://download.docker.com/linux/centos/7/x86_64/stable/
@@ -129,6 +171,14 @@ case "$distro_type" in
         # Download all packages from onap_rpm.list via yumdownloader to repository folder
         for i in $(cat ${PCKG_LIST_DIR}onap_rpm.list | awk '{print $1}');do yumdownloader --resolve --downloadonly --destdir=${OFFLINE_REPO_DIR} $i -y; done
 
+        # Download all packages from all additional packages lists via apt-get to repository folder
+        if ! [ ${#ADDITIONAL_LISTS[@]} -eq 0 ]; then
+            for list in ${ADDITIONAL_LISTS[@]}
+            do
+                for i in $(cat ${ADD_LIST_DIR}$list | awk '{print $1}');do yumdownloader --resolve --downloadonly --destdir=${OFFLINE_REPO_DIR} $i -y; done
+            done
+        fi
+
         # In repository folder create repositor
         createrepo $OFFLINE_REPO_DIR
     ;;