Skip to content

Commit c290c68

Browse files
committed
bootstrap: Simplify dependency checking/install
Signed-off-by: Zack Cerza <[email protected]>
1 parent 67db276 commit c290c68

File tree

1 file changed

+35
-138
lines changed

1 file changed

+35
-138
lines changed

bootstrap

+35-138
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ fi
1919
# Use the newest version we find
2020
if [ -z "$PYTHON" ]; then
2121
for i in 12 11 10; do
22-
command -v "python3.$i" && PYTHON="python3.$i" && break
22+
command -v "python3.$i" && PYTHON="python3.$i" &>/dev/null && break
2323
done
2424
fi
2525
if [ -z "$PYTHON" ]; then
@@ -35,166 +35,63 @@ Linux)
3535
. /etc/os-release
3636
OS=$(echo $NAME | tr -d ' ')
3737
fi
38+
# rpm/dnf is the default, to reduce repetition in the case statement
39+
has_pkg="rpm --whatprovides"
40+
install_pkg="sudo dnf install -y"
3841
case "$OS" in
3942
Ubuntu|Debian|LinuxMint)
4043
deps=(qemu-utils python3-dev libssl-dev python3-pip python3-wheel $PYTHON-venv libev-dev libvirt-dev libffi-dev libyaml-dev)
41-
for package in ${deps[@]}; do
42-
if [ "$(dpkg --status -- $package|sed -n 's/^Status: //p')" != "install ok installed" ]; then
43-
# add a space after old values
44-
missing="${missing:+$missing }$package"
45-
fi
46-
done
47-
if [ -n "$missing" ]; then
48-
echo "$0: missing required packages:" 1>&2
49-
echo "$missing"
50-
if [ "$install" = true ]; then
51-
echo "Updating metadata..."
52-
sudo apt-get update
53-
echo "Installing missing packages..."
54-
sudo apt-get -y install $missing
55-
else
56-
echo "Please install missing packages or run './bootstrap install' if you have sudo"
57-
echo "sudo apt-get -y install $missing"
58-
exit 1
59-
fi
60-
fi
44+
has_pkg="dpkg -C"
45+
install_pkg="sudo apt install -y"
6146
;;
6247
RedHatEnterpriseWorkstation|RedHatEnterpriseServer|RedHatEnterprise|CentOS)
6348
deps=(python39-pip python39-devel mariadb-devel libev-devel libvirt-devel libffi-devel)
64-
for package in ${deps[@]}; do
65-
if ! rpm -q --whatprovides $package ; then
66-
missing="${missing:+$missing }$package"
67-
fi
68-
done
69-
if [ -n "$missing" ]; then
70-
echo "$0: missing required packages:" 1>&2
71-
echo "$missing"
72-
if [ "$install" = true ]; then
73-
echo "Installing missing packages..."
74-
sudo yum -y install $missing
75-
else
76-
echo "Please install missing packages or run './bootstrap install' if you have sudo"
77-
echo "sudo yum -y install $missing"
78-
exit 1
79-
fi
80-
fi
8149
;;
8250
CentOSStream)
83-
PYTHON=python3.12
51+
PYTHON=python3.12
8452
deps=($PYTHON-pip $PYTHON-devel)
85-
for package in ${deps[@]}; do
86-
if ! rpm -q --whatprovides $package ; then
87-
missing="${missing:+$missing }$package"
88-
fi
89-
done
90-
if [ -n "$missing" ]; then
91-
echo "$0: missing required packages:" 1>&2
92-
echo "$missing"
93-
if [ "$install" = true ]; then
94-
echo "Installing missing packages..."
95-
sudo yum -y install $missing
96-
else
97-
echo "Please install missing packages or run './bootstrap install' if you have sudo"
98-
echo "sudo yum -y install $missing"
99-
exit 1
100-
fi
101-
fi
10253
;;
10354
AlmaLinux|RockyLinux)
104-
PYTHON=python3.12
55+
PYTHON=python3.12
10556
deps=($PYTHON-pip $PYTHON-devel libev-devel libvirt-devel libffi-devel)
106-
for package in ${deps[@]}; do
107-
if ! rpm -q --whatprovides $package; then
108-
missing="${missing:+$missing }$package"
109-
fi
110-
done
111-
if [ -n "$missing" ]; then
112-
echo "$0: missing required packages:" 1>&2
113-
echo "$missing"
114-
if [ "$install" = true ]; then
115-
echo "Installing missing packages..."
116-
sudo yum -y install $missing
117-
else
118-
echo "Please install missing packages or run './bootstrap install' if you have sudo"
119-
echo "sudo yum -y install $missing"
120-
exit 1
121-
fi
122-
fi
12357
;;
12458
Fedora|FedoraLinux)
125-
PYTHON=python3.12
126-
deps=($PYTHON-pip $PYTHON-devel)
59+
PYTHON=python3.12
12760
deps=($PYTHON-pip $PYTHON-devel libev-devel libvirt-devel libffi-devel)
128-
for package in ${deps[@]}; do
129-
if ! rpm -q --whatprovides $package; then
130-
missing="${missing:+$missing }$package"
131-
fi
132-
done
133-
fedora_release=$(lsb_release -rs)
134-
package_manager=dnf
135-
if [ $fedora_release -lt 23 ]; then
136-
package_manager=yum
137-
fi
138-
if [ -n "$missing" ]; then
139-
echo "$0: missing required packages:" 1>&2
140-
echo "$missing"
141-
if [ "$install" = true ]; then
142-
echo "Installing missing packages..."
143-
sudo $package_manager -y install $missing
144-
else
145-
echo "Please install missing packages or run './bootstrap install' if you have sudo"
146-
echo "sudo $package_manager -y install $missing"
147-
exit 1
148-
fi
149-
fi
15061
;;
15162
"openSUSE project"|"SUSE LINUX"|"openSUSE"|"openSUSELeap"|"openSUSETumbleweed")
152-
PYTHON=python3.12
153-
deps=(python312-pip python312-devel python312 libev-devel libvirt-devel libffi-devel)
154-
for package in ${deps[@]}; do
155-
if ! rpm -q --whatprovides $package; then
156-
if [ "$(rpm -q --whatprovides $package)" == "no package provides $package" ]; then
157-
missing="${missing:+$missing }$package"
158-
fi
159-
fi
160-
done
161-
if [ -n "$missing" ]; then
162-
echo "$0: missing required packages, please install them:" 1>&2
163-
echo "sudo zypper install $missing"
164-
exit 1
165-
fi
166-
;;
167-
*)
168-
echo "This script does not support your Linux distribution yet. Patches encouraged!"
169-
exit 1
63+
PYTHON=python3.12
64+
deps=(python312-pip python312-devel python312 libev-devel libvirt-devel libffi-devel)
65+
install_pkg="sudo zypper install"
17066
;;
17167
esac
17268
;;
69+
17370
Darwin)
174-
if ! brew --version &>/dev/null; then
175-
echo "You need Homebrew: http://brew.sh/"
176-
exit 1
177-
fi
178-
for keg in python libvirt libev libffi; do
179-
if brew list $keg >/dev/null 2>&1; then
180-
echo "Found $keg"
181-
else
182-
if [ "$install" = true ]; then
183-
brew install $keg
184-
else
185-
missing="${missing:+$missing }$keg"
186-
echo "Please install missing packages or run './bootstrap install':"
187-
echo "brew install $missing"
188-
exit 1
189-
fi
190-
fi
191-
done
192-
;;
193-
*)
194-
echo "This script does not support your OS yet. Patches encouraged!"
195-
exit 1
71+
deps="python libvirt libev libffi"
72+
has_pkg="brew list"
73+
install_pkg="brew install"
19674
;;
19775
esac
76+
for package in ${deps[@]}; do
77+
if ! $has_pkg $package &>/dev/null; then
78+
# add a space after old values
79+
missing="${missing:+$missing }$package"
80+
echo missing=${missing}
81+
fi
82+
done
83+
if [ -n "$missing" ]; then
84+
echo "$0: missing required packages:" 1>&2
85+
echo "$missing"
86+
if [ "$install" = true ]; then
87+
echo "Installing missing packages..."
88+
$install_pkg $missing
89+
else
90+
echo "Please install missing packages or run './bootstrap install'"
91+
echo "$install_pkg $missing"
92+
exit 1
93+
fi
94+
fi
19895

19996
PYTHON_BIN=$(command -v $PYTHON)
20097
if [ -z $PYTHON_BIN -o ! -e $PYTHON_BIN -o ! -x $PYTHON_BIN ]; then

0 commit comments

Comments
 (0)