forked from 89luca89/distrobox
-
Notifications
You must be signed in to change notification settings - Fork 0
/
install
executable file
·157 lines (143 loc) · 4.1 KB
/
install
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
#!/bin/sh
# SPDX-License-Identifier: GPL-3.0-only
#
# This file is part of the distrobox project: https://github.com/89luca89/distrobox
#
# Copyright (C) 2021 distrobox contributors
#
# distrobox is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 3
# as published by the Free Software Foundation.
#
# distrobox is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with distrobox; if not, see <http://www.gnu.org/licenses/>.
# POSIX
verbose=0
# Print usage to stdout.
# Arguments:
# None
# Outputs:
# print usage with examples.
show_help() {
cat << EOF
install --prefix /usr/local
Options:
--prefix/-P: base bath where all files will be deployed (default /usr/local if root, ~/.local if not)
--path/-p: (DEPRECATED) path where to deploy the files (default /usr/local/bin if root, ~/.local/bin if not)
--help/-h: show this message
-v: show more verbosity
EOF
}
# Parse arguments
while :; do
case $1 in
-h | --help)
# Call a "show_help" function to display a synopsis, then exit.
show_help
exit
;;
-v | --verbose)
shift
verbose=1
;;
-p | --path)
if [ -n "$2" ]; then
dest_path="$2"
shift
shift
fi
;;
-P | --prefix)
if [ -n "$2" ]; then
prefix="$2"
shift
shift
fi
;;
*) # Default case: If no more options then break out of the loop.
break ;;
esac
done
if [ -n "${dest_path}" ] && [ -n "${prefix}" ]; then
printf >&2 "Both -p and -P are set. Cannot continue. Exiting.\n"
exit 1
fi
if [ -z "${dest_path}" ]; then
if [ -z "${prefix}" ]; then
prefix="/usr/local"
# in case we're not root, just default to the home directory
if [ "$(id -u)" -ne 0 ]; then
prefix="${HOME}/.local"
fi
fi
dest_path="${prefix}/bin"
man_dest_path="${prefix}/share/man/man1"
else
printf >&2 "Warning: -p/--path is deprecated. Please refer to the documentation and switch to -P/--prefix.\n"
# dest_path is already set
man_dest_path="${dest_path}/../share/man/man1"
fi
set -o errexit
set -o nounset
# set verbosity
if [ "${verbose}" -ne 0 ]; then
set -o xtrace
fi
# get current dir
curr_dir=$(dirname "$0")
cd "${curr_dir}" || exit 1
# if files are available, install files in dest directory
# else download targz and uncompress it
if [ -e "${curr_dir}/distrobox-enter" ]; then
for file in distrobox*; do
if ! install -D -m 0755 -t "${dest_path}" "${file}"; then
printf >&2 "Do you have permission to write to %s?\n" "${dest_path}"
exit 1
fi
done
if [ -e "man" ]; then
for file in man/man1/*; do
install -D -m 0644 -t "${man_dest_path}" "${file}"
done
fi
else
# check that we have base dependencies
if ! command -v curl || ! command -v tar; then
printf >&2 "Online install depends on curl and tar\n"
exit 1
fi
release_ver=$(curl -L https://github.com/89luca89/distrobox/releases/latest |
grep 'refs/tags' | tail -1 | cut -d'"' -f2)
release_name=$(echo "${release_ver}" | rev | cut -d'/' -f1 | rev)
# go in tmp
tmp_dir="$(mktemp -d)"
cd "${tmp_dir}"
# download our target
curl -L "https://github.com/${release_ver}" -o "${release_name}"
# uncompress
tar xvf "${release_name}"
# deploy our files
for file in "distrobox-$(echo "${release_name}" | sed 's/.tar.gz//g')"/distrobox*; do
if ! install -D -m 0755 -t "${dest_path}" "${file}"; then
printf >&2 "Do you have permission to write to %s?\n" "${dest_path}"
exit 1
fi
done
if [ -e "distrobox-$(echo "${release_name}" | sed 's/.tar.gz//g')/man/" ]; then
for file in "distrobox-$(echo "${release_name}" | sed 's/.tar.gz//g')"/man/*; do
install -D -m 0644 -t "${man_dest_path}" "${file}"
done
fi
# securely delete unneeded files
cd
if [ -n "${tmp_dir}" ] && [ -e "${tmp_dir}" ]; then
rm -rf "${tmp_dir}"
fi
fi
printf >&2 "Successfully installed to %s.\n" "${dest_path}"
printf >&2 "Be sure that %s is in your \$PATH environment variable for it to work.\n" "${dest_path}"