-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathinstall.sh
More file actions
executable file
·139 lines (114 loc) · 3.79 KB
/
install.sh
File metadata and controls
executable file
·139 lines (114 loc) · 3.79 KB
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
#!/bin/bash
# Konfiguracja źródeł
PROJECT_BASE_URL="https://raw.githubusercontent.com/DevOpsTerminal/hello/main"
SCRIPT_NAME="hello.sh"
INSTALL_NAME="install.sh"
CHECKSUM_FILE="checksums/checksums.sha256"
# Domyślna ścieżka instalacji użytkownika
USER_BIN_DIR="$HOME/.local/bin"
# Funkcja pobierająca sumę kontrolną
fetch_checksum() {
local urls=(
"${PROJECT_BASE_URL}/${CHECKSUM_FILE}"
"https://hello.devopsterminal.com/${CHECKSUM_FILE}"
)
for url in "${urls[@]}"; do
echo "Próba pobrania sumy kontrolnej z: $url" >&2
local output=$(curl -sSL "$url" 2>/dev/null)
local checksum=$(echo "$output" | grep -E "hello\.sh\s*$" | awk '{print $1}')
if [ -n "$checksum" ]; then
echo "$checksum"
return 0
fi
done
echo "Nie znaleziono sumy kontrolnej" >&2
return 1
}
# Funkcja pobierająca skrypt
fetch_script() {
local urls=(
"${PROJECT_BASE_URL}/${SCRIPT_NAME}"
"https://hello.devopsterminal.com/${SCRIPT_NAME}"
)
for url in "${urls[@]}"; do
echo "Próba pobrania skryptu z: $url" >&2
if curl -sSL "$url" -o "${SCRIPT_NAME}" 2>/dev/null; then
return 0
fi
done
echo "Nie udało się pobrać skryptu" >&2
return 1
}
# Funkcja przygotowująca środowisko użytkownika
prepare_user_environment() {
# Stwórz katalog .local/bin jeśli nie istnieje
mkdir -p "$USER_BIN_DIR"
# Dodaj .local/bin do PATH jeśli nie jest już dodany
if [[ ":$PATH:" != *":$USER_BIN_DIR:"* ]]; then
echo "Dodawanie $USER_BIN_DIR do PATH" >&2
# Wybierz odpowiedni plik konfiguracyjny powłoki
if [ -f "$HOME/.bashrc" ]; then
echo "export PATH=\"$USER_BIN_DIR:\$PATH\"" >> "$HOME/.bashrc"
elif [ -f "$HOME/.zshrc" ]; then
echo "export PATH=\"$USER_BIN_DIR:\$PATH\"" >> "$HOME/.zshrc"
fi
fi
}
# Główna funkcja weryfikacji
download_and_verify() {
# Przygotuj środowisko użytkownika
prepare_user_environment
# Pobierz sumę kontrolną
local remote_checksum=$(fetch_checksum)
if [ $? -ne 0 ]; then
echo "Błąd pobierania sumy kontrolnej" >&2
return 1
fi
# Usuń białe znaki z sumy kontrolnej
remote_checksum=$(echo "$remote_checksum" | tr -d '[:space:]')
# Pobierz skrypt
if ! fetch_script; then
echo "Błąd pobierania skryptu" >&2
return 1
fi
# Sprawdź sumę kontrolną
echo "Weryfikacja sumy kontrolnej..." >&2
local local_checksum=$(sha256sum "${SCRIPT_NAME}" | awk '{print $1}')
echo "Suma kontrolna zdalna: $remote_checksum" >&2
echo "Suma kontrolna lokalna: $local_checksum" >&2
# Porównaj sumy kontrolne
if [ "$remote_checksum" != "$local_checksum" ]; then
echo "BŁĄD: Suma kontrolna nie zgadza się!" >&2
return 1
fi
# Skopiuj skrypt do katalogu użytkownika
cp "${SCRIPT_NAME}" "${USER_BIN_DIR}/hello"
chmod +x "${USER_BIN_DIR}/hello"
# Usuń tymczasowy plik
rm "${SCRIPT_NAME}"
rm "${INSTALL_NAME}"
# Uruchom skrypt z opcją help
echo "Uruchamianie skryptu z opcją help..." >&2
hello --help
}
# Główna logika
main() {
# Sprawdź wymagane narzędzia
for tool in curl sha256sum; do
if ! command -v "$tool" &> /dev/null; then
echo "Wymagane narzędzie $tool nie jest zainstalowane!" >&2
return 1
fi
done
# Wykonaj pobieranie, weryfikację i uruchomienie z help
if download_and_verify; then
echo "Instalacja i weryfikacja zakończone sukcesem!" >&2
echo "Otwórz nowy terminal lub uruchom 'source ~/.bashrc' / 'source ~/.zshrc'" >&2
return 0
else
echo "Instalacja nie powiodła się!" >&2
return 1
fi
}
# Uruchom główną funkcję
main