-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpacks-in-system
executable file
·179 lines (136 loc) · 7.09 KB
/
packs-in-system
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
#!/bin/env bash
# -*- coding: utf-8 -*-
#
## @Author: sensor-dream
## @Email: [email protected]
## @Copyright © sensor-dream. All rights reserved. Contacts: [email protected]
## @Copyright © sensor-dream. All rights reserved. Contacts: [email protected]
## @Copyright © Sensor-Dream Boxed System (SDBS). Contacts: [email protected]
## @License: http://www.apache.org/licenses/LICENSE-2.0
## @Site: https://sensor-dream.ru
## @File: packs-in-system
## @Creation date file: 07.02.2021, 18:45:43
[[ -z "${packs_in_system_script_source}" ]] && declare -rx packs_in_system_script_source="$BASH_SOURCE"
if [[ -z "${packs_in_system_script_source_path}" ]]; then
file_list="$(dirname ${packs_in_system_script_source})"
if [[ "${file_list}" == '.' ]]; then
declare -rx packs_in_system_script_source_path="$(pwd)"
else
declare -rx packs_in_system_script_source_path="${file_list}"
fi
fi
if [[ -z "${main_run_script_path}" ]]; then
declare -rx main_run_script_path="$(pwd)"
printf "Script runs from path: %s\n" "${main_run_script_path}"
fi
if [[ -z "${main_cfg_script_source}" ]]; then
check=1
while [[ "${check}" -eq 1 ]]; do
if [[ ! -f 'main.cfg' ]]; then
if [[ "$(pwd)" != "/" ]]; then
cd ../
else
cd ${main_run_script_path}
check=0
echo -e '\e[31m'"!!! Not found configuration shared file !!!\033[0m"
tput sgr0
exit 1
fi
else
check=0
declare -rx main_project_path="$(pwd)"
. "${main_project_path}/main.cfg" "$@"
cd "${main_run_script_path}"
fi
done
fi
printf "Loading: %s\n" "$(readlink -m ${BASH_SOURCE})"
function get_packs_in_system() {
local list="$(unset_dupes_in_array $(sudo dnf repoquery --installed \* | sed -e 's/-[0-9]*[.:].*$//mig'))"
maunal_install_count_packages="$(echo ${list} | wc -w)"
# printf '%s\n' $(unset_dupes_in_array "$(sudo dnf repoquery --installed \* | sed -e 's/-[0-9]*[.:].*$//mig')") | grep -E 'liblqr|ntfs|texlive-pst|xorg-x11-fonts-ISO8859|arpwatch|tcpd'
printf '%s\n' ${list} | sort --parallel ${number_cores} -b -i -u -o "${file_list}"
echo "${maunal_install_count_packages}" >"${file_list}.count"
}
function get_info_packs_in_system() {
local list="$(cat ${file_list} | sort --parallel ${number_cores} -b -i -u)"
local find_list=
[[ -d "${main_project_path}/guidelines/list-info" ]] && rm -f -r "${main_project_path}/guidelines/list-info"
mkdir -p "${main_project_path}/guidelines/list-info"
cp "${pach_list_collections}/.gitignore" "${main_project_path}/guidelines/list-info/.gitignore"
echo -e "# List of installed packages in the system and their description\n\n" | tee "${main_project_path}/guidelines/packs-in-system-${os_id}-${os_version_id}.list.info.md" >/dev/null
for i in {0..9} {A..Z} {a..z}; do
find_list=$(grep -e "^[${i}]" <<<${list})
if [[ -n "${find_list}" ]]; then
echo -e "Create ${i}-packs-in-system-${os_id}-${os_version_id}.md for first letter ${i} installation packages\n"
sudo dnf info --installed ${find_list} | sed -e '1d; /Версия.*$/d; /Выпуск.*$/d; /Архитектура.*$/d; /Размер.*$/d; /Источник.*$/d; /Репозиторий.*$/d; s/Из репозитор/From repo /; s/Краткое опис/Short desc /; s/Лицензия/License /; s/Описание/Descript/; /^$/N; /^\n$/D' | sed -Ee 's/Имя\s+:\s+(\S+)$/<details>\n<summary>\1<\/summary>\n\n```/mg; s/^$/```\n\n<\/details>\n/; 1i\# For first letter '${i}', information about installation packages\n' | tee "${main_project_path}/guidelines/list-info/${i}-packs-in-system-${os_id}-${os_version_id}.md" >/dev/null
echo -e "[For first letter ${i}:](https://github.com/sensor-dream/APIVOF/blob/main/guidelines/list-info/${i}-packs-in-system-${os_id}-${os_version_id}.md)\n\n" | tee -a "${main_project_path}/guidelines/packs-in-system-${os_id}-${os_version_id}.list.info.md" >/dev/null
fi
done
sed -i 's%/main/guidelines/packs-in-system.*\.list\.info\.md%/main/guidelines/packs-in-system-'${os_id}-${os_version_id}'.list.info.md%' "${main_project_path}/README.md"
}
function get_count_packs_in_system() {
[[ -f "${file_list}.count" ]] || get_packs_in_system
maunal_install_count_packages=$(cat ${file_list}.count)
echo -e "Total number of installed packages: ${maunal_install_count_packages}\nTotal number of manual installed packages: $((${maunal_install_count_packages} - ${clean_count_packages}))"
}
function install_packs_in_system() {
local list_install="${file_list//-${os_id}-${os_version_id}/}.install"
[[ -f "${file_list}.install" ]] || diff -u "${file_list}.clean" "${file_list}" | grep -E '^[+][^+].*$' | sed 's/\+//' | tee "${list_install}" >/dev/null
local install="$(cat ${list_install})"
echo -e "\nNumber of packages to install: $(echo ${install} | wc -w)\n"
pm -p -- "$(unset_dupes_in_array ${install} $@)"
get_packs_in_system
diff -u "${file_list}.clean" "${file_list}" | grep -E '^[+][^+].*$' | sed 's/\+//' | tee "${list_install}" >/dev/null
}
function backup_list() {
[[ -f CNAME ]] || ../
echo -e "Backup all files in ${pach_list_collections} directory\ninto ${main_project_path}/backup/packs-in-system.${os_id}-${os_version_id}.${format_datetime}.tar.bz2\n"
tar jcf "${main_project_path}/backup/packs-in-system.${os_id}-${os_version_id}.${format_datetime}.tar.bz2" "${main_project_path}/list-collections"
}
function main_packs_in_system_script_source() {
# printf "Initialise main function of packs-in-system script source\n"
local flag=0
local file_list="${pach_list_collections}/packs-in-system-${os_id}-${os_version_id}.list"
local clean_count_packages=
local maunal_install_count_packages=
OPTIND=1
while getopts "giIcb" OPT; do
case $OPT in
g) flag=1 ;;
i) flag=2 ;;
I) flag=3 ;;
c) flag=4 ;;
b) flag=5 ;;
*) flag=0 ;;
esac
done
shift $(($OPTIND - 1))
# shift `expr $OPTIND - 1`
[ "${1:-}" = "--" ] && shift
if [[ ! -f "${file_list}.clean" ]]; then
temp_one="${file_list}"
file_list="${temp_one}.clean"
get_packs_in_system
sed -i -E -e 's/^(mc|dnf[-]utils|gpm[-]libs|slang|dnf[-]plugins[-]core|python3[-]dnf[-]plugins[-]core)$//mig; /^$/d;' "${file_list}"
echo $(($(tail -n 1 ${file_list}.count) - 4)) >"${file_list}.count"
file_list="${temp_one}"
# flag=0
fi
clean_count_packages=$(cat ${file_list}.clean.count)
echo -e "\nThe number of installed packages, clean system: ${clean_count_packages}\n"
if [[ ! -f "${file_list}" ]]; then
get_packs_in_system
# flag=0
fi
case ${flag} in
1) get_packs_in_system ;;
2) install_packs_in_system "$@" ;;
3) get_info_packs_in_system ;;
4) get_count_packs_in_system ;;
5) backup_list ;;
*) echo -e "Options:\n\t-g: get packs in system and write in file - ${file_list}\n\t-i: install packs in system from one file - ${file_list}.install\n\t-I: get info packs in system and write in file - ${file_list}.info\n\t-b: Backup all files in ${pach_list_collections} directory\n\t-c: count packs in system from ${file_list}.count\n" ;;
esac
[[ ${flag} -eq 4 ]] || get_count_packs_in_system
}
main_packs_in_system_script_source "$@"