Added copyright notice and other info at the top of get-debs.sh
[chroot-tools] / get-debs.sh
1 #!/bin/bash
2 #
3 # (c) Copyright by Hugo Monteiro
4 #
5 #    This program is free software; you can redistribute it and/or modify
6 #    it under the terms of the GNU General Public License as published by
7 #    the Free Software Foundation; either version 2 of the License, or
8 #    (at your option) any later version.
9 #
10 #    This program is distributed in the hope that it will be useful,
11 #    but WITHOUT ANY WARRANTY; without even the implied warranty of
12 #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 #    GNU General Public License for more details.
14 #    ( http://www.fsf.org/licenses/gpl.txt )
15 #####################################################################
16
17 # first Release: 2011-02-03
18 RELEASE="2011-02-03"
19
20 #
21 # The latest version of the script is available at
22 #   http://git.hmonteiro.net/?p=chroot-tools
23 #
24 # Feedback is welcome!
25 #
26 #####################################################################
27
28 #
29 # Features:
30 # - Downloads all debian package dependecies for a give package and
31 #   stores them in a specified directory
32 # - Uses the system apt-get facility to retrieve package information
33 #   and repositories
34 #####################################################################
35
36
37 function usage() {
38 cat << EOF
39 Usage:
40
41         $0 <package name> <directory full path>
42
43 Ex:
44         $0 php5-cli /tmp/downloads
45
46 EOF
47 exit 1
48 }
49
50 function mkdirfail() {
51         echo "There was a problem creating the target directory."
52         if [ -n "$1" ]
53         then
54                 echo $1
55         fi
56         exit 1
57 }
58
59 PKG=$1
60 DIR=$2 
61
62 if [ -z $PKG ] || [ -z $DIR ]
63 then
64         usage
65 fi
66
67 if [ ${DIR:0:1} != "/" ]
68 then
69         DIR="`pwd`/${DIR}"
70 fi
71
72 if [ -f ${DIR} ]
73 then
74         mkdirfail "File already exists."
75 fi
76
77 if [ -d ${DIR} ]
78 then
79         while [ -z ${answer} ]
80         do
81                 read -p "Target directory already exists. Overwrite?(y/n) " answer;
82         done
83         if [ ${answer} != "y" ]
84         then
85                 exit 0
86         fi
87 fi
88
89 mkdir -p "${DIR}/partial" || mkdirfail "Check you have write permission on the parent dirs and that the path is correct."
90
91 FULL_DEPS=""
92
93 TO_GET="$1 `apt-cache depends $1|grep Depends|egrep -v "<|>|debconf"|awk '{print $2}'`"
94 TO_GET=`echo ${TO_GET}|tr " " "\n"|sort|uniq|tr "\n" " "`
95
96 while [ "${TO_GET}" != "${FULL_DEPS}" ]
97 do
98         FULL_DEPS="${TO_GET}"
99         for package in ${FULL_DEPS}; do
100                 TO_GET="${package} ${TO_GET} `apt-cache depends ${package}|grep Depends|egrep -v "<|>|debconf"|awk '{print $2}'`"
101                 TO_GET=`echo ${TO_GET}|tr " " "\n"|sort|uniq|tr "\n" " "`
102         done
103 done
104
105 apt-get install -o Dir::Cache::Archives="${DIR}" -d --reinstall ${TO_GET}
106
107 rmdir "${DIR}/partial"
108 rm "${DIR}/lock"
109
110 exit 0