Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
S
system.linux
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Container Registry
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Simple Deploy- and Management
system.linux
Commits
a61c23a8
Commit
a61c23a8
authored
5 years ago
by
Pietsch, Martin
Browse files
Options
Downloads
Patches
Plain Diff
current state of installer
parent
9862f470
No related branches found
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
files/installer.sh
+188
-170
188 additions, 170 deletions
files/installer.sh
with
188 additions
and
170 deletions
files/installer.sh
+
188
−
170
View file @
a61c23a8
#!/bin/bash
# Variablen:
export
INSTALLER_DNS
=
"tu-dresden.de"
export
INSTALLER_CONFIG
=
''
export
INSTALLER_CONFIG_FILE
=
"/tmp/installer-tmpfile.sh"
export
INSTALLER_CONFIG_URL
=
''
export
INSTALLER_DEBUGGING
=
''
export
INSTALLER_ERROR_ACTION
=
reboot
export
INSTALLER_LOGFILE
=
"/tmp/installer.log"
export
INSTALLER_MODE
=
'sdm_install'
export
INSTALLER_NOTIFY_URL
=
''
# VERWENDETE VARIABLEN
# OS_DISTRIBUTION
# ----------------------------------------------------------------------------------------------------------------------
# Vorbereitung
update-ca-certificates
uname
-r
[
-d
/sys/firmware/efi
]
&&
echo
UEFI
||
echo
BIOS
sleep
5
export
PATH
=
/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin/
# damit das Skript von überall aus gestartet werden kann:
# in eigenen Ordner wechseln
# dirname: gibt Pfad aus ohne Dateiname
# readlink: kompletter Pfad aus $0
cd
"
$(
dirname
"
$(
readlink
-f
"
$0
"
)
"
)
"
.
./functions.sh
# prüfe, wenn uid ungliche Null
if
!
[
$EUID
-eq
0
]
then
echo
"Der SDM-Installer muss als Benutzer »root« gestartet werden!"
exit
1
fi
clear
# dmesg -n: gibt auf Konsole Nr x aus
dmesg
-n
1
# swap auschalten
swapoff
-a
# ----------------------------------------------------------------------------------------------------------------------
# Auf Netzwerk warten
# hier wird mit Status-Anzeige 10x probiert INSTALLER_DNS (tu-dresden.de) aufzulösen (um die DNS-Konfiguration durch DHCP abzuwarten)
(
counter
=
0
while
!
nslookup
$INSTALLER_DNS
2> /dev/null
>
/dev/null
#!/usr/bin/env bash
export
DISK_SDA_SCHEME
=
"msdos"
declare
-a
DISK_SDA_PARTITIONS
=()
DISK_SDA_PARTITIONS+
=(
"1GB:fat32:/boot:defaults:0:0:False"
)
DISK_SDA_PARTITIONS+
=(
"12.5GB:ext4:/:defaults:0:0:True"
)
export
DISK_SDA_PARTITIONS
export
DISK_SDB_SCHEME
=
"mbr"
declare
-a
DISK_SDB_PARTITIONS
=()
DISK_SDB_PARTITIONS+
=(
"12G:swap::defaults:0:0:true"
)
export
DISK_SDB_PARTITIONS
declare
-a
DISK_DEVICES
=(
"sda"
)
export
DISK_DEVICES
# convertSizeToByte - converts a given size to byte
# parameter:
# $1 - size in "kB", "MB", "MiB", "GB", "GiB", "TB" or "TiB"
# return:
# size in byte
convertSizeToByte
()
{
local
unit
=
$(
echo
$1
|
sed
"s/[1-9
\.
]*//g"
)
local
value
=
$(
echo
$1
|
sed
"s/[a-zA-Z%]*//g"
)
local factor
=
1
case
${
unit
}
in
"B"
)
factor
=
1
;;
"kB"
)
factor
=
1000
;;
"MB"
)
factor
=
1000000
;;
"GB"
)
factor
=
1000000000
;;
"TB"
)
factor
=
1000000000000
;;
"kiB"
)
factor
=
1024
;;
"MiB"
)
factor
=
1048576
;;
"GiB"
)
factor
=
1073741824
;;
"TiB"
)
factor
=
1099511627776
;;
*
)
factor
=
1
;;
esac
res
=
$(
dc
-e
"0k
${
value
}
${
factor
}
* p"
)
echo
"
${
res
%.*
}
"
}
# convertByteToSize - converts a byte size to a given unit
# parameter:
# $1 - size in byte
# $2 - unit like "kB", "MB", "MiB", "GB", "GiB", "TB" or "TiB"
# return:
# rounded size with unit
convertByteToSize
()
{
local factor
=
1
case
$2
in
"B"
)
factor
=
1
;;
"kB"
)
factor
=
1000
;;
"MB"
)
factor
=
1000000
;;
"GB"
)
factor
=
1000000000
;;
"TB"
)
factor
=
1000000000000
;;
"kiB"
)
factor
=
1024
;;
"MiB"
)
factor
=
1048576
;;
"GiB"
)
factor
=
1073741824
;;
"TiB"
)
factor
=
1099511627776
;;
*
)
factor
=
1
;;
esac
res
=
$(
dc
-e
"2k
$1
${
factor
}
/ p"
)
echo
"
${
res
%.*
}
$2
"
}
# validateDiskScheme - checks the scheme of a disk device
# parameter:
# $1 - disk device name
# retur:
# 0 - no changes
# 1 - label has changed
validateScheme
()
{
local
lbl
=
$(
echo
$diskdata
[
0] |
cut
-f
6
-d
":"
)
local
retval
=
1
local
scheme
=
$(
eval echo
\$
DISK_
$(
echo
$1
|
tr
[
a-z]
[
A-Z]
)
_SCHEME
)
if
[
"x
${
scheme
}
"
=
"x
${
lbl
}
"
]
;
then
retval
=
0
fi
return
${
retval
}
}
# initialDiskScheme - initials the scheme of a disk device
# parameter:
# $1 - disk device name
# return:
# none
initialDiskScheme
()
{
local
scheme
=
$(
eval echo
\$
DISK_
$(
echo
$1
|
tr
[
a-z]
[
A-Z]
)
_SCHEME
)
if
[
${
scheme
}
=
"mbr"
]
;
then
parted
-s
-m
/dev/
$1
mklabel msdos
else
parted
-s
-m
/dev/
$1
mklabel
${
scheme
}
fi
return
}
# validateDiskPartitions - checks the partitions of a disk device
# parameter:
# $1 - disk device name
# return:
# 0 - no changes
# 1 - partions has changed
validateDiskPartitions
()
{
declare
-a
parts
=()
local
retval
=
0
for
part
in
$(
eval
"for p in
\$
{DISK_
$(
echo
$1
|
tr
[
a-z]
[
A-Z]
)
_PARTITIONS[@]}; do echo
\$
p; done "
)
do
parts+
=(
${
part
}
)
done
if
[
${#
parts
[@]
}
-eq
$((${#
diskdata
[@]
}
-
1
))
]
;
then
for
idx
in
$(
seq
1 1
${#
parts
[@]
}
)
do
gsize
=
$(
convertSizeToByte
$(
echo
${
parts
[
$((${
idx
}
-
1
))
]
}
|
cut
-f
1
-d
":"
))
dsize
=
$(
convertSizeToByte
$(
echo
${
diskdata
[
${
idx
}
]
}
|
cut
-f
4
-d
":"
))
diffperc
=
$(
dc
-e
"2k
$dsize
$gsize
- 100 *
$gsize
/ p"
|
sed
-e
"s/^-//g"
)
if
[
-n
"x
${
diffperc
%.*
}
"
]
;
then
diffperc
=
0
fi
#if difference between current disk size and given disk size more than 1% then partitions has changed
if
[
${
diffperc
%.*
}
-gt
1
]
;
then
retval
=
1
fi
done
else
retval
=
1
fi
return
${
retval
}
}
# initialDiskPartitions - initial the partitions of a disk device
# parameter:
# $1 - disk device name
# return:
# none
initialDiskPartitions
()
{
declare
-a
parts
=()
local
start
=
$(
convertSizeToByte
"1MiB"
)
local
fs
=
""
local
size
=
""
local
end
=
""
for
part
in
$(
eval
"for p in
\$
{DISK_
$(
echo
$1
|
tr
[
a-z]
[
A-Z]
)
_PARTITIONS[@]}; do echo
\$
p; done "
)
do
fs
=
$(
echo
${
part
}
|
cut
-f
2
-d
":"
)
fsize
=
$(
echo
${
part
}
|
cut
-f
1
-d
":"
)
size
=
$(
convertSizeToByte
$(
echo
${
part
}
|
cut
-f
1
-d
":"
))
end
=
$((${
start
}
+
${
size
}))
parted
-a
optimal
-s
-m
/dev/
$1
mkpart primary
${
fs
}
$(
convertByteToSize
${
start
}
"MiB"
)
$(
convertByteToSize
${
end
}
"MiB"
)
start
=
${
end
}
done
}
for
disk
in
${
DISK_DEVICES
[@]
}
do
[
"
$counter
"
-ge
100
]
&&
exit
1
counter
=
$(
expr
$counter
+ 1
)
echo
$counter
sleep
1
done
echo
XXX
echo
100
echo
"Netzwerkverbindung erfolgreich."
echo
XXX
sleep
5
# Lampda Funktion, die Klammern "fangen" die Ausgabe ab
# --gauge Infobox mit Höhe Breite %Anzeige, XXX ist für dialog erforderlich
)
| dialog
--title
"SDM-Installation"
--gauge
"Warte auf Netzwerk-Verbindung ..."
15 70 0
if
[
${
PIPESTATUS
[0]
}
-eq
1
]
then
dialog_info
"Netzwerkverbindung gescheitert! Der Rechner wird neugestartet."
&&
sleep
3
$INSTALLER_ERROR_ACTION
;
exit
1
fi
export hostname
=
"
$(
hostname
)
"
# ----------------------------------------------------------------------------------------------------------------------
# Parameter
# Kernel-Parameter in Umgebung übernehmen
export
$(
cat
/proc/cmdline
)
# Debug-Modus -> Installation überspringen und in eine Shell droppen
# verlassen durch? vielleicht reboot oder poweroff
if
[
-n
"
$INSTALLER_DEBUGGING
"
]
then
while
true
do
bash
done
fi
# Parameter prüfen
if
[
-z
"
$OS_DISTRIBUTION
"
]
&&
[
-n
"
$INSTALLER_MODE
"
]
then
dialog_info
"Fehlende Parameter! Der Rechner wird neugestartet."
&&
sleep
3
$INSTALLER_ERROR_ACTION
;
exit
1
fi
# ----------------------------------------------------------------------------------------------------------------------
# Konfiguration laden
if
[
-n
"
$INSTALLER_CONFIG_URL
"
]
then
if
[[
"
$INSTALLER_CONFIG_URL
"
==
http
*
]]
then
INSTALLER_CONFIG_URL
=
"
$INSTALLER_CONFIG_URL
?hostname=
$hostname
"
dialog_info
"Hole Installationskonfiguration von Server ..."
&&
sleep
1
if
!
curl
-s
--capath
./certs/
-o
"
$INSTALLER_CONFIG_FILE
"
"
$INSTALLER_CONFIG_URL
?hostname=
$hostname
"
>
/dev/null
then
dialog_info
"Installations-Skript konnten nicht geholt werden!
\n\n
Der Rechner wird neugestartet."
&&
sleep
3
$INSTALLER_ERROR_ACTION
;
exit
1
fi
chmod
+x
"
$INSTALLER_CONFIG_FILE
"
export
$INSTALLER_CONFIG
=
"
$INSTALLER_CONFIG_FILE
"
fi
fi
# Konfiguration entweder über URL oder fest in das Tinycore einbauen unter $INSTALLER_CONFIG_FILE
# das . VAR lädt den Inhalt der Datei in die Shell Umgebung
.
"
$INSTALLER_CONFIG
"
# nochmal aus cmdline überschreiben
export
$(
cat
/proc/cmdline
)
declare
-a
diskdata
=()
if
[
$(
type
-t
$INSTALLER_MODE
)
!=
"function"
]
then
dialog_info
"Unbekannte Methode:
$INSTALLER_MODE
. Der Rechner wird neugestartet."
&&
sleep
3
$INSTALLER_ERROR_ACTION
;
exit
1
fi
for
ddt
in
$(
parted
-s
-m
/dev/
${
disk
}
print 2>/dev/null |
sed
'1d;s/[ ]*//g'
)
do
diskdata+
=(
${
ddt
}
)
done
[
-n
"
$INSTALLER_LOGFILE_URL
"
]
&&
INSTALLER_LOGFILE_URL
=
"
$INSTALLER_LOGFILE_URL
?hostname=
$hostname
"
[
-n
"
$INSTALLER_NOTIFY_URL
"
]
&&
INSTALLER_NOTIFY_URL
=
"
$INSTALLER_NOTIFY_URL
?hostname=
$hostname
"
validateScheme
${
disk
}
if
[
$?
-eq
0
]
;
then
validateDiskPartitions
${
disk
}
# ----------------------------------------------------------------------------------------------------------------------
dialog_info
"Starte Installation ...
\n\n
Hostname:
$hostname
\n
Distribution:
$OS_DISTRIBUTION
\n
Modus:
$INSTALLER_MODE
\n
Konfiguration:
$INSTALLER_CONFIG
"
sleep
5
# Installation aufrufen
(
$INSTALLER_MODE
)
if
[
$?
-eq
0
]
then
dialog_info
"Installationsprotokolle werden hochgeladen ..."
upload_logfile
if
[
-n
"
$INSTALLER_NOTIFY_URL
"
]
if
[
$?
-ne
0
]
;
then
dialog_info
"Installation erfolgreich.
\n\n
Melde an Server ..."
if
curl
-s
--capath
./certs/
"
$INSTALLER_NOTIFY_URL
"
>
/dev/null
then
dialog_info
"Installation erfolgreich.
\n\n
Der Rechner wird neugestartet."
&&
sleep
3
else
dialog_msg
"Installation erfolgreich.
\n\n
Server nicht erreichbar.
\n\n
Bestätigen, um Rechner neuzustarten."
fi
else
dialog_msg
"Installation erfolgreich.
\n\n
Bestätigen, um Rechner neuzustarten."
initialDiskPartitions
${
disk
}
fi
fi
#reboot
exit
0
else
initialDiskScheme
${
disk
}
initialDiskPartitions
${
disk
}
fi
done
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment