156 lines
5.0 KiB
Bash
Executable File
156 lines
5.0 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# set -x
|
|
|
|
compute_md5 () {
|
|
exec {fd}< <(md5sum "$1") # open fd readable for P.S.
|
|
cs_pid=$! # remember pid of P.S.
|
|
md5=""
|
|
while read t <&$fd; do
|
|
if ! [ -z "$t" ]; then
|
|
t=($t) # md5sum returns two values:
|
|
# the hash plus the filename
|
|
md5="${md5}$t"
|
|
fi
|
|
done
|
|
|
|
exec {fd}>&- # close fd (i.e. process substitution)
|
|
wait $cs_pid # wait for the subshell to finish
|
|
echo $md5
|
|
}
|
|
|
|
md5_for_ini_files() {
|
|
ini_directory="$1"
|
|
ini_files=("ISMASMgr.ini" "sysconfig.ini" "SystemControl.ini")
|
|
|
|
local data="\"ini\": {"$'\n'
|
|
|
|
for f in "${ini_files[@]}"; do
|
|
ini_file=${ini_directory}/$f
|
|
md5=`compute_md5 $ini_file`
|
|
data+="\"$ini_file\":\"$md5\","
|
|
done
|
|
|
|
if [[ "$data" =~ ^.*,$ ]]; then
|
|
data=${data%?}
|
|
fi
|
|
|
|
data+="},"
|
|
echo $data
|
|
}
|
|
|
|
md5_for_conf_files() {
|
|
conf_directory="$1"
|
|
conf_files=("emp.conf" "printer.conf" "device.conf")
|
|
|
|
local data="\"conf\": {"$'\n'
|
|
|
|
for f in "${conf_files[@]}"; do
|
|
conf_file=${conf_directory}/$f
|
|
md5=`compute_md5 $conf_file`
|
|
data+="\"$conf_file\":\"$md5\","
|
|
done
|
|
|
|
if [[ "$data" =~ ^.*,$ ]]; then
|
|
data=${data%?}
|
|
fi
|
|
|
|
data+="},"
|
|
echo $data
|
|
}
|
|
|
|
write_config() {
|
|
local path="$1"
|
|
if [ "${path: -1}" == "/" ]; then # remove trailing '/'
|
|
path=${path%?}
|
|
fi
|
|
|
|
local data="{ "$'\n'
|
|
data+=`md5_for_ini_files "$path/opt/app/sysconfig"`
|
|
data+=`md5_for_conf_files "$path/etc/psa_config"`
|
|
data+="
|
|
\"opkg\" : {"
|
|
local cnt=0
|
|
for package_name in $(opkg list-installed); # list names of installed packages
|
|
do
|
|
if ! grep -q "^[a-zA-Z]" <<< $package_name; then
|
|
continue
|
|
fi
|
|
|
|
if [ -z "$package_name" ]; then
|
|
continue
|
|
fi
|
|
|
|
cnt=$((cnt+1))
|
|
|
|
printf "%3d:%s\n" "$cnt" "$package_name"
|
|
|
|
# Format of package info:
|
|
#
|
|
# Package: openssh-scp
|
|
# Version: 7.8p1+git-r0
|
|
# Depends: libc6 (>= 2.28), update-alternatives-opkg
|
|
# Status: install ok installed
|
|
# Section: console/network
|
|
# Architecture: cortexa9t2hf-neon
|
|
# Maintainer: Poky <poky@yoctoproject.org>
|
|
# MD5Sum: dfffcbb088cd5f180be5e9ee2ad030fe
|
|
# Size: 32700
|
|
# Filename: openssh-scp_7.8p1+git-r0_cortexa9t2hf-neon.ipk
|
|
# Source: openssh_7.8p1+git.bb
|
|
# Description: A suite of security-related network....
|
|
# Installed-Size: 58920
|
|
# Installed-Time: 1654699615
|
|
#
|
|
# process substitution (P.S):
|
|
# run 'opkg info' synchronously to parent script
|
|
|
|
exec {fd}< <(opkg info "$package_name") # open fd readable for P.S.
|
|
cs_pid=$! # remember pid of P.S.
|
|
|
|
while read package_info_line <&$fd; do
|
|
if [[ $package_info_line == Package* ]]; then
|
|
package=(${package_info_line// / })
|
|
package="\"${package[1]}\": {"
|
|
elif [[ $package_info_line == MD5Sum* ]]; then
|
|
md5sum=(${package_info_line// / })
|
|
md5sum="\"${md5sum[0]%?}\": \"${md5sum[1]}\","
|
|
elif [[ $package_info_line == Filename* ]]; then
|
|
filename=(${package_info_line// / })
|
|
filename="\"${filename[0]%?}\": \"${filename[1]}\","
|
|
elif [[ $package_info_line == Installed-Time* ]]; then
|
|
installed_time=(${package_info_line// / })
|
|
installed_time="\"${installed_time[0]%?}\": \"${installed_time[1]}\"
|
|
},"
|
|
fi
|
|
done
|
|
|
|
exec {fd}>&- # close fd (i.e. process substitution)
|
|
wait $cs_pid # wait for the subshell to finish
|
|
|
|
# use 8 spaces
|
|
data="$data
|
|
$package
|
|
$md5sum
|
|
$filename
|
|
$installed_time"
|
|
|
|
# break
|
|
done
|
|
|
|
if [[ "$data" =~ ^.*,$ ]]; then
|
|
data=${data%?}
|
|
fi
|
|
|
|
data="$data
|
|
}
|
|
}"
|
|
echo "$data" > "${path}/$2"
|
|
# echo $(cat "/tmp/test.txt" | jq -C --indent 4 '.') > /tmp/test2.txt
|
|
}
|
|
|
|
write_config "/home/root/szeged/customer_281/szeged/1/1/" "test.txt"
|
|
|
|
|
|
|