Create vendor image and vendor rpm database sandbox/jkryszyn/vendor
authorJacek Kryszyn <j.kryszyn@samsung.com>
Fri, 14 Feb 2025 12:01:30 +0000 (13:01 +0100)
committerJacek Kryszyn <j.kryszyn@samsung.com>
Tue, 11 Mar 2025 13:11:28 +0000 (14:11 +0100)
This patch adds a post script for boot kickstarts
which creates a vendor image using building-blocks
and creates vendor rpm db placed on the image.

Change-Id: I4e239adf47ff1a36106150a025ce3ff254e98a3c

16 files changed:
common.yaml
ks/tizen-boot-aarch64-rpi-rt.yaml
ks/tizen-boot-aarch64-rpi.yaml
ks/tizen-boot-arm64-rpi4-rt.yaml
ks/tizen-boot-arm64-rpi4.yaml
ks/tizen-boot-armv7hl-rpi4.yaml
ks/tizen-boot-armv7l-rpi-rt.yaml
ks/tizen-boot-armv7l-rpi.yaml
ks/tizen-boot-armv7l-rpi4-rt.yaml
ks/tizen-boot-armv7l-rpi4.yaml
ks/tizen-boot-riscv64-vf2.yaml
partitions/common-mbr-boot
patterns/iot-boot-vf2.yaml
patterns/iot-vendor-rpi4.yaml [new file with mode: 0644]
patterns/iot-vendor-vf2.yaml [new file with mode: 0644]
scripts/iot-vendor.post [new file with mode: 0644]

index 96f07719f58d0e6a42b96b96b27f47b0c4cd118e..cb43975ec31465c014047f097ac977828ab80ed7 100644 (file)
@@ -26,6 +26,7 @@ Boot-RPi4:
     Groups: []
     PostScripts:
         - iot-hal-backend
+        - iot-vendor
     Repos: []
 
 Boot-RPi4-32Bit:
@@ -36,6 +37,7 @@ Boot-RPi4-32Bit:
     Groups: []
     PostScripts:
         - iot-hal-backend
+        - iot-vendor
     Repos: []
 
 Boot-VIM3:
@@ -88,6 +90,7 @@ Boot-VisionFive2:
     Groups: []
     PostScripts:
         - iot-hal-backend
+        - iot-vendor
     Repos: []
 
 Boot-QEMU-RISC-V:
index 9fa00e62edf698564df7883b72fa4bbf0fa85672..ebdaf3283515973ec8be439588547f26ab3d3e03 100644 (file)
@@ -10,6 +10,7 @@ Groups:
 - IoT Boot RPi4 RT
 - IoT Hal Base
 - IoT Hal Backend RPI4
+- IoT Vendor RPI4
 Repos:
 - unified-standard
 - base-standard
index be8f044414220e4dedfead82440166f5fa9513c8..df685083e9feb9311ad7df2b3fde6f8ddadcfad3 100644 (file)
@@ -10,6 +10,7 @@ Groups:
 - IoT Boot RPi4
 - IoT Hal Base
 - IoT Hal Backend RPI4
+- IoT Vendor RPI4
 Repos:
 - unified-standard
 - base-standard
index 62b8363b867d7edc1331bc0fce5d66186e675a1c..bb995bb6fbe147a9fc29a91179959b4917f93b32 100644 (file)
@@ -10,6 +10,7 @@ Groups:
 - IoT Boot RPi4 RT
 - IoT Hal Base
 - IoT Hal Backend RPI4
+- IoT Vendor RPI4
 Repos:
 - unified-standard
 - base-standard
index 42c0b40a4f368b96fc7d2d86751c46858b08cd1c..48b774d807753dc935d689fca68c57593dc70aa3 100644 (file)
@@ -10,6 +10,7 @@ Groups:
 - IoT Boot RPi4
 - IoT Hal Base
 - IoT Hal Backend RPI4
+- IoT Vendor RPI4
 Repos:
 - unified-standard
 - base-standard
index 9105f8997d60bf20519263f7d5d530b1979f2ad6..1d4a9551bf968bb02ccf4383b872da1a1ba7cc91 100644 (file)
@@ -10,6 +10,7 @@ Groups:
 - IoT Boot RPi4 32Bit
 - IoT Hal Base
 - IoT Hal Backend RPI4
+- IoT Vendor RPI4
 Repos:
 - unified-standard
 - base-standard
index 3d645adae374273ede0d160ad58e209b94ee4217..bae660dbbaba87b644cbdd980d41c9b6eb3cedae 100644 (file)
@@ -10,6 +10,7 @@ Groups:
 - IoT Boot RPi4 RT 32Bit
 - IoT Hal Base
 - IoT Hal Backend RPI4
+- IoT Vendor RPI4
 Repos:
 - unified-standard
 - base-standard
index 7d46f7b8918f82ebd57d97b6481fefc71a9cd053..d27eb649380ec93e9eca4ea33fb96ffb8aa4168b 100644 (file)
@@ -10,6 +10,7 @@ Groups:
 - IoT Boot RPi4 32Bit
 - IoT Hal Base
 - IoT Hal Backend RPI4
+- IoT Vendor RPI4
 Repos:
 - unified-standard
 - base-standard
index 61603010b7864f331d593a7cb43e480d704a78fc..b790aae8af2766d4c0ef23d0e810b3ea03acdbef 100644 (file)
@@ -10,6 +10,7 @@ Groups:
 - IoT Boot RPi4 RT 32Bit
 - IoT Hal Base
 - IoT Hal Backend RPI4
+- IoT Vendor RPI4
 Repos:
 - unified-standard
 - base-standard
index 6ace942387e5d948434efb219d4fd3b6ef9cd2e4..38dfb77e41916dc794ec60c5454b62833e9184ae 100644 (file)
@@ -10,6 +10,7 @@ Groups:
 - IoT Boot RPi4 32Bit
 - IoT Hal Base
 - IoT Hal Backend RPI4
+- IoT Vendor RPI4
 Repos:
 - unified-standard
 - base-standard
index b987cce2a190cdc5f1ab63f1433733bf99030e1f..9595c73986789e85fcd59ba72774ec1e3084facf 100644 (file)
@@ -12,6 +12,7 @@ Groups:
 - IoT Boot VisionFive2
 - IoT Hal Base
 - IoT Hal Backend VISIONFIVE2
+- IoT Vendor VISIONFIVE2
 Attachment:
 - /var/tmp/u-boot.itb
 - /var/tmp/u-boot-spl.bin.normal.out
index 3aae6cae27b2f33560868c375fd6e960757b1793..4184e778ce485197b13ce00d61bd62efb20f5804 100644 (file)
@@ -1,3 +1,4 @@
 part /boot --fstype="vfat" --size=64 --ondisk=mmcblk0 --active --label boot --fsoptions=defaults,noatime
 part /lib/modules --fstype="ext4" --size=32 --ondisk=mmcblk0 --active --label modules --fsoptions=defaults,noatime
 part /hal --fstype="ext4" --size=256 --ondisk=mmcblk0 --active --label hal --fsoptions=defaults,noatime
+part /mnt/vendor --fstype="ext4" --size=128 --ondisk=mmcblk0 --active --label vendor --fsoptions=defaults,noatime
\ No newline at end of file
index 341ae0d8c1bfbeff1cb4f60abd85c5a8510a612e..06923b63e0ae67020fa4a9ab2477985da54dcf36 100644 (file)
@@ -6,3 +6,4 @@ Packages:
 - riscv-visionfive2-linux-kernel-modules
 - linux-tizen-modules-visionfive2
 - u-boot-visionfive2
+- building-blocks-sub1-domain_Vendor-VISIONFIVE2
diff --git a/patterns/iot-vendor-rpi4.yaml b/patterns/iot-vendor-rpi4.yaml
new file mode 100644 (file)
index 0000000..7ecd3be
--- /dev/null
@@ -0,0 +1,5 @@
+Summary: IoT Vendor RPI4
+Description: IoT Vendor RPI4
+Name: iot-vendor-rpi4
+Packages:
+- building-blocks-sub1-domain_Vendor-RPI4
diff --git a/patterns/iot-vendor-vf2.yaml b/patterns/iot-vendor-vf2.yaml
new file mode 100644 (file)
index 0000000..cf5970a
--- /dev/null
@@ -0,0 +1,5 @@
+Summary: IoT Vendor VISIONFIVE2
+Description: IoT Vendor VISIONFIVE2
+Name: iot-vendor-vf2
+Packages:
+- building-blocks-sub1-domain_Vendor-VISIONFIVE2
diff --git a/scripts/iot-vendor.post b/scripts/iot-vendor.post
new file mode 100644 (file)
index 0000000..c8beca0
--- /dev/null
@@ -0,0 +1,130 @@
+#!/bin/sh
+echo "############### vendor.post ################"
+
+mkdir /mnt/vendor/usr
+mkdir /mnt/vendor/usr/lib
+mkdir /mnt/vendor/usr/lib64
+mkdir /mnt/vendor/hal
+mkdir /mnt/vendor/hal/lib
+mkdir /mnt/vendor/hal/lib64
+mkdir /mnt/vendor/root
+mkdir /mnt/vendor/etc
+mkdir /mnt/vendor/rpm
+
+echo "Initialize rpmdb for Vendor Image"
+mkdir -p /mnt/vendor/rpm
+cp /var/lib/rpm/Packages /mnt/vendor/rpm/
+rpm --rebuilddb --dbpath=/mnt/vendor/rpm
+
+check_vendor_building_block() {
+       PKG=`rpm -qR $1 | uniq | grep -v "^rpmlib" | grep -v ".\+\.so\..\+" | grep -v "^\/" | grep -v "=" | grep -v "(.\+)"`
+       for pkgs in ${PKG}; do
+               INSTALLED=`rpm -q $pkgs`
+               RET=$?
+               if [[ $pkgs =~ "building-blocks" ]]; then
+                       check_vendor_building_block $pkgs
+               elif [ $RET -eq 0 ]; then
+                       echo -e $INSTALLED >> /mnt/vendor/list/vendor-list.ini
+               fi
+       done
+}
+
+create_vendor_dependency_file() {
+       echo "Creating Vendor Image Dependency List"
+
+       PKG=`rpm -qa`
+       mkdir -p /mnt/vendor/temp
+
+       for packages in ${PKG}; do
+               rpm -qP $packages > /mnt/vendor/temp/${packages}
+       done
+
+       for packages in ${PKG}; do
+               FOUND=0
+               while read line; do
+                       if [ $line == $packages ]; then
+                               FOUND=1
+                               break
+                       fi
+               done < /mnt/vendor/list/vendor-list.ini
+
+               if [ $FOUND -eq 0 ]; then
+                       rpm -e --justdb $packages --nodeps --noscripts --dbpath=/mnt/vendor/rpm
+               fi
+       done
+
+       rm -rf /mnt/vendor/temp
+       rm -rf /mnt/vendor/list
+       rm -rf /mnt/vendor/etc/rpm/vendor-list.ini
+       echo "Finished to Create Vendor Image Dependency List"
+}
+
+TARGET=("RPI4" "VIM3" "C4" "GENERIC" "VISIONFIVE2" "BPIF3" "LPI4A");
+
+PKGGROUP=`rpm -qa | grep package-groups`
+if [ $PKGGROUP ]; then
+       for target in ${TARGET[@]}; do
+               RET=`rpm -qa | grep $target`
+               RET=$?
+               if [ $RET -eq 0 ]; then
+                       break;
+               fi
+       done
+
+       case $target in
+       RPI4)
+               BACKEND=`xmlstarlet sel -t -v '//group[name = "IoT Vendor RPI4"]/packagelist/packagereq' -n /usr/share/package-groups/group.xml`
+       ;;
+       VIM3)
+               BACKEND=`xmlstarlet sel -t -v '//group[name = "IoT Vendor VIM3"]/packagelist/packagereq' -n /usr/share/package-groups/group.xml`
+       ;;
+       C4)
+               BACKEND=`xmlstarlet sel -t -v '//group[name = "IoT Vendor C4"]/packagelist/packagereq' -n /usr/share/package-groups/group.xml`
+       ;;
+       GENERIC)
+               BACKEND=`xmlstarlet sel -t -v '//group[name = "IoT Vendor GENERIC"]/packagelist/packagereq' -n /usr/share/package-groups/group.xml`
+       ;;
+       VISIONFIVE2)
+               BACKEND=`xmlstarlet sel -t -v '//group[name = "IoT Vendor VISIONFIVE2"]/packagelist/packagereq' -n /usr/share/package-groups/group.xml`
+       ;;
+       BPIF3)
+               BACKEND=`xmlstarlet sel -t -v '//group[name = "IoT Vendor BPIF3"]/packagelist/packagereq' -n /usr/share/package-groups/group.xml`
+       ;;
+       LPI4A)
+               BACKEND=`xmlstarlet sel -t -v '//group[name = "IoT Vendor LPI4A"]/packagelist/packagereq' -n /usr/share/package-groups/group.xml`
+       ;;
+       esac
+
+       mkdir -p /mnt/vendor/list/
+
+       VENDOR_PKG=`rpm -q $BACKEND`
+       echo "Create Vendor Image Packages List"
+       for packages in ${VENDOR_PKG}; do
+               check_vendor_building_block $packages
+       done
+
+       create_vendor_dependency_file
+
+       #Create exportdb file to update a rpmdb of core image
+       rpmdb --dbpath=/mnt/vendor/rpm --exportdb > /mnt/vendor/etc/vendor-rpmdb.ini
+
+       # Copy files from vendor packages to vendor image
+
+       VENDOR_PKGS=`rpm -qR $VENDOR_PKG | uniq | grep -v "^rpmlib" | grep -v ".\+\.so\..\+" | grep -v "^\/" | grep -v "=" | grep -v "(.\+)"`
+
+       # 1. copy all files of a package to /mnt/vendor
+       for entry in etc/tmpfiles.d/vendor.d/*; do
+               while IFS="" read -r line; do
+                       path_to_file=`dirname $line`
+                       mkdir -p /mnt/vendor/$path_to_file
+                       cp -a $line /mnt/vendor/$path_to_file
+               done < "${entry}"
+       done
+
+    # 2. Remove vendor building-block and all packages which it provides
+       rpm -e $BACKEND
+
+       for package in ${VENDOR_PKGS}; do
+               rpm -e $package
+       done
+fi