Eu tenho um arquivo bash com uma lista de pacotes para instalar uma nova instalação do Ubuntu usando o apt install, mas nem todos os pacotes da lista estão sendo instalados. Repos são incluídos no script conforme necessário.
Eu tentei os dois métodos abaixo:
Method 1:
apt install [pkg1] [pkg2] [pkg3] ... [pkgn]
Method 2 - (pseudo code):
String pkgs_list[] = {"pkg1" "pkg2" "pkg3" "pkgn"}
for each pkg in pkg_list {
if pkg exists then {
"do nothing"
else
apt install pkg
}
}
Aqui está o código bash completo:
#***********************#
#*** Keys ***#
#***********************#
wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -
wget -O - https://dl.sinew.in/keys/enpass-linux.key | apt-key add -
wget -nc https://dl.winehq.org/wine-builds/Release.key | apt-key add -
#***********************#
#*** Repositories ***#
#***********************#
echo 'deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main' | tee /etc/apt/sources.list.d/google-chrome.list
echo "deb http://repo.sinew.in/ stable main" > \
/etc/apt/sources.list.d/enpass.list
add-apt-repository -y ppa:webupd8team/gnome3 #This is for gnome tweak tool extensions (source: https://www.wikihow.com/Change-Themes-on-Ubuntu-with-Gnome-Tweak-Tool)
add-apt-repository -y ppa:notepadqq-team/notepadqq
add-apt-repository https://dl.winehq.org/wine-builds/ubuntu/
apt -y update
#WinHQ enables 32bit architecture
dpkg --add-architecture i386
#***********************#
#*** apt install ***#
#***********************#
#apt -y install \
# nemo \
# google-chrome-stable \
# notepadqq dconf-editor \
# nfs-common \
# enpass \
# virtualbox \
# virtualbox-guest-additions-iso \
# gnome-tweak-tool \
#gnome-shell-extensions-user-themes \
# vlc \
# gimp \
# winehq-stable \
# synaptic
declare -a alist=("nemo"
"google-chrome-stable"
"notepadqq"
"dconf-editor"
"nfs-common"
"enpass"
"virtualbox"
"virtualbox-guest-additions-iso"
"gnome-tweak-tool"
"vlc"
"gimp"
"winehq-stable"
"synaptic"
"usb-creator-gtk"
"libreoffice"
"chromium-browser"
"thunderbird"
"shotwell"
"gnome-calendar")
for application in "${alist[@]}"
do
dpkg -l $application
if [ $? = '0' ]; then
echo "***************************************************************************"
echo "*****Application "$application" package is installed, no action taken.*****"
echo "***************************************************************************"
elif [ $? = '1' ]; then
echo "******************************************"
echo "*****Installing package $application.*****"
echo "******************************************"
#Add an if to match dock favorites and add to the dock .desktop file
apt install $application -y
fi
done
Veja a lista de aplicativos e o status depois que o script foi executado:
Eu posso fornecer mais informações para cada pacote é necessário.
Obrigado pela sua ajuda.
EDIT
O arquivo de log gerado usando o comando $ sudo ./my_script.sh >> my_script.log
é grande, então vou postar o que acho que é o problema e podemos ir a partir daí.
Abaixo está a saída para o gimp, uma que não foi instalada. Quando meu código verifica se o pacote está instalado usando o comando dpkg -l [package_name]
, ele retorna o seguinte ao verificar o gimp e os outros.
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name Version Architecture Description
+++-==============-============-============-=================================
un gimp <none> <none> (no description available)
TODOS os pacotes que não foram instalados retornam com Versão e Arquitetura como <none>
, o que me diz que não há instalação de pacotes, certo? Mas quando o script bash é executado, o comando retorna '0' fazendo minhas declarações acreditarem que o pacote está instalado, o que não parece ser o caso de acordo com o dpkg. Em vez disso, o dpkg deve retornar algo assim: ...
$ dpkg -l package
dpkg-query: no packages found matching package
... quando um pacote 'não está instalado.
Eu não entendo o que está acontecendo aqui com dpkg
retornando as informações postadas. O que isto significa? O que está acontecendo?
Obrigado,
EDIT
Além disso, se eu tentar remover o pacote com apt
, obtenho:
$ sudo apt autoremove gimp
[sudo] password for alex2wr:
Reading package lists... Done
Building dependency tree
Reading state information... Done
Package 'gimp' is not installed, so not removed
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.