diff --git a/dpkg-frontend.sh b/dpkg-frontend.sh
index 6007336..973e8bc 100755
--- a/dpkg-frontend.sh
+++ b/dpkg-frontend.sh
@@ -26,6 +26,7 @@ Author="Jack-Benny Persson (jack-benny@cyberinfo.se)"
# Binaries
Which="/usr/bin/which"
+Aptget="/usr/bin/apt-get"
# Binaries entered in the list will be avalible to the script as variables with
# the first letter uppercase
Binaries=(dpkg sed awk egrep printf cat grep mktemp rm tail zenity)
@@ -47,66 +48,104 @@ print_help()
print_version
$Printf "$Author\n"
$Printf "dpkg-frontend\n"
- /bin/cat <<-EOT
+/bin/cat <<-EOT
- Options:
- -h
- Print detailed help screen
- -V
- Print version information
- -v
- Verbose output
- EOT
+Options:
+-h
+Print detailed help screen
+-V
+Print version information
+-v
+Verbose output
+EOT
}
# Dialog for package searching
search_pkg()
{
- Search=`$Zenity --title "dpkg-frontend" --entry \
- --text="Search for package"`
- if [ $? -eq 1 ]; then
- return 1
- fi
- $Dpkg --list | $Awk '{ print $2 }' | $Egrep -x $Search &> /dev/null
- if [ $? -eq 0 ]; then
- return 0
- else
- return 5
- fi
+Search=`$Zenity --title "dpkg-frontend" --entry \
+--text="Search for package"`
+if [ $? -eq 1 ]; then
+return 1
+fi
+$Dpkg --list | $Awk '{ print $2 }' | $Egrep -x $Search &> /dev/null
+if [ $? -eq 0 ]; then
+return 0
+else
+return 5
+fi
}
uninstall_pkg()
{
- $Zenity --title "dpkg-frontend" \
- --question \
- --text="Package $Search is installed.\nUninstall ${Search}?"
- if [ $? -eq 0 ]; then # CHANGE NEXT LINE
- sleep 3 | $Zenity --title "dpkg-frontend" \
- --progress --pulsate --text "Uninstalling ${Search}..."
- fi
+$Zenity --title "dpkg-frontend" \
+--question \
+--text="Package $Search is installed.\nUninstall ${Search}?"
+if [ $? -eq 0 ]; then # CHANGE NEXT LINE
+$Dpkg -r $Search | $Zenity --title "dpkg-frontend" \
+--progress --pulsate --text "Uninstalling ${Search}..."
+fi
}
install_pkg()
{
- echo "Install pkg?"
+$Aptget install $Search -y | \
+$Zenity --title "dpkg-fronend" --progress --pulsate \
+--text "Installing package $Search"
+if [ $? -eq 0 ]; then
+ $Zenity --title "dpkg-frontend" --info \
+ --text="Succesfully installed $Search"
+ exit 0
+else
+ $Zenity --title "dpkg-frontend" --error \
+ --text="Something went wrong with the installation of $Search"
+ exit 1
+fi
}
show_selections()
{
- Selections=`dpkg --get-selections $Search | awk '{ print $2 }'`
- $Zenity --title "dpkg-frontend" \
- --info --text "Selections for $Search is: ${Selections}"
+Selections=`dpkg --get-selections $Search | awk '{ print $2 }'`
+$Zenity --title "dpkg-frontend" \
+--info --text "Selections for $Search is: ${Selections}"
+}
+
+set_selections()
+{
+SetSelections=`$Zenity --title "dpkg-frontend" --entry \
+--text="Type selections for package $Search"`
+echo "$Search $SetSelections" | $Dpkg --set-selections
+if [ $? -eq 0 ]; then
+$Zentiy --title "dpkg-frontend" --info \
+--text "${SetSelections} is set for ${Search}"
+else
+$Zenity --title "dpkg-frontend" --error \
+--text "Couldn't set selections for $Search"
+fi
+}
+
+show_info()
+{
+Info=`$Dpkg --status $Search`
+$Zenity --no-markup --title "dpkg-frontend" --info \
+--text "$Info"
}
choice_dialog()
{
- Choice=`$Zenity --list --column=Action --column=Description \
- --radiolist uninstall "Uninstall" show "Show selections"`
- if [ "$Choice" == "Uninstall" ]; then
- return 11
- elif [ "$Choice" == "Show selections" ]; then
- return 12
- fi
+Choice=`$Zenity --list --column=Action --column=Description \
+--radiolist uninstall "Uninstall" set "Set selections" \
+show "Show selections" \
+info "Show information"`
+if [ "$Choice" == "Uninstall" ]; then
+return 11
+elif [ "$Choice" == "Show selections" ]; then
+return 12
+elif [ "$Choice" == "Show information" ]; then
+return 13
+elif [ "$Choice" == "Set selections" ]; then
+return 14
+fi
}
# Create variables with absolute path to binaries and check
@@ -114,7 +153,7 @@ choice_dialog()
# variables with first character uppercase, such as Grep)
Count=0
for i in ${Binaries[@]}; do
- $Which $i &> /dev/null
+$Which $i &> /dev/null
if [ $? -eq 0 ]; then
declare $(echo ${Binaries[$Count]^}=`${Which} $i`)
((Count++))
@@ -124,6 +163,13 @@ for i in ${Binaries[@]}; do
fi
done
+# Check if we are root
+if [ $EUID -ne 0 ]; then
+ $Zenity --title "dpkg-frontend" --error \
+ --text "You need to run dpkg-frontend as root"
+ exit 1
+fi
+
# Parse command line options and arguments
while getopts Vvho: Opt; do
case "$Opt" in
@@ -142,22 +188,31 @@ while getopts Vvho: Opt; do
esac
done
-
### Main ###
search_pkg
-if [ $? -eq 1 ]; then
- exit 0
-elif [ $? -eq 5 ]; then
- $Zenity --title "dpkg-frontend" --info \
- --text="Package $Search is not installed"
- exit 1
-fi
+case $? in
+ 1) exit 0
+ ;;
+ 5) $Zenity --title "dpkg-frontend" --question \
+ --text="Package $Search is not installed. Install it?"
+ if [ $? -eq 0 ]; then
+ install_pkg
+ else
+ exit 1
+ fi
+ ;;
+esac
choice_dialog
-if [ $? -eq 11 ]; then
- uninstall_pkg
-elif [ $? -eq 12 ]; then
- show_selections
-fi
+case $? in
+ 11) uninstall_pkg
+ ;;
+ 12) show_selections
+ ;;
+ 13) show_info
+ ;;
+ 14) set_selections
+ ;;
+esac
exit 0