Skip to content

Commit 3a89088

Browse files
committed
init
0 parents  commit 3a89088

File tree

424 files changed

+10369
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

424 files changed

+10369
-0
lines changed

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
vdr

README.md

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
# VDR_config
2+
3+
Git für lokale Dateien auf yaVDR
4+
5+
Ordner im Lokaken Dateisystem ist `/_config`. Mit `./createlinks.sh` werden Symlinks für die Ordner im System angelegt und einige andere Dinge.
6+
7+
**Von der Benutzung wird abgeraten!**
8+
9+

bin/copy2usb.sh

+83
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
#!/usr/bin/env bash
2+
# ---
3+
# copy2usb.sh
4+
# Wird aufgerufen, wenn man im VDR Aufnahmen auf USB kopiert
5+
# ---
6+
7+
# VERSION=230803
8+
9+
if ! source /_config/bin/yavdr_funcs.sh &>/dev/null ; then # Falls nicht vorhanden
10+
f_logger() { logger -t yaVDR "copy2usb.sh: $*" ;} # Einfachere Version
11+
fi
12+
13+
LIMIT=$((25*1024)) # Begrenzung beim Kopieren via USB (kb/s)
14+
: "${VIDEO:=/video}" # Vorgabe, falls $VIDEO leer ist
15+
CP2USB='/tmp/~cp2usb.sh' # Temporäres Skript
16+
FLAG='.cp2usb' # Zur erkennung, ob Kopiervorgang schon läuft
17+
SRC="$1"
18+
19+
# Start
20+
# Video- und Aufnahme-Verzeichnis abschneiden
21+
: "${SRC%/*}" ; TITLE="${_#*"${VIDEO}/"}"
22+
23+
: "${TITLE//_/ }" # Alle _ durch Leerzeichen ersetzen
24+
: "${_//'/'/' / '}" # / durch " / " ersetzen
25+
TITLE="${_//'~'/'/'}" # ~ durch / ersetzen
26+
27+
# Sonderzeichen übersetzen
28+
while [[ "${TITLE//#}" != "$TITLE" ]] ; do
29+
tmp="${TITLE#*#}" ; char="${tmp:0:2}"
30+
printf -v ch '%b' "\x${char}"
31+
OUT+="${TITLE%%#*}${ch}" ; TITLE="${tmp:2}"
32+
done
33+
TITLE="${OUT}${TITLE}"
34+
35+
if [[ -e "${1}/.timer" ]] ; then # Prüfen ob Aufnahme noch läuft
36+
f_logger "Recording $SRC still running! Aborting!"
37+
svdrpsend MESG "Aufnahme \"${TITLE}\" läuft noch. Abbruch!"
38+
exit 1
39+
fi
40+
41+
if [[ -e "${1}/${FLAG}" ]] ; then # Prüfen ob kopiervorgang schon läuft
42+
if [[ "$(stat -c %Y "${1}/${FLAG}" 2>/dev/null)" -lt $((EPOCHSECONDS - 60*60)) ]] ; then
43+
rm "${1}/${FLAG}" # Entfernen, fall älter als eine Stunde
44+
else
45+
f_logger "Recording $SRC still in copy process! Aborting!"
46+
svdrpsend MESG "Aufnahme \"${TITLE}\" wird gerade kopiert. Abbruch!"
47+
exit 1
48+
fi
49+
fi
50+
51+
: > "${1}/${FLAG}" # Kopier-Flag erstellen
52+
53+
IFS=' ' read -r -a TARGET_MOUNT <<< "$(grep -m 1 ' /media/vdr' /proc/mounts)" # /dev/sdb1 /media/vdr/USB_HD ext4 rw 0 0
54+
TARGET="${TARGET_MOUNT[1]}" # /media/vdr/USB_HD
55+
if [[ -n "$TARGET" && -d "$TARGET" && -n "$SRC" && -d "$SRC" ]] ; then
56+
TD="${SRC%/*}" # "$(dirname "$SRC")"
57+
SPECIALCHARS='$ ` \ "' # Teilweise Dateisystemabhängig
58+
for ch in $SPECIALCHARS ; do
59+
TD="${TD//$ch/\\$ch}"
60+
SRC="${SRC//$ch/\\$ch}"
61+
done
62+
TARGET_DISK="${TARGET/'/media/vdr/'}" # USB_HD
63+
f_logger "Copying $1 to $TARGET"
64+
{ echo '#!/usr/bin/env bash'
65+
echo "if ! mkdir --parents \"${TARGET}${TD}\" ; then"
66+
echo " svdrpsend MESG \"FEHLER beim erstellen von '[${TARGET_DISK}]${VIDEO}/${TITLE}'\""
67+
echo 'fi'
68+
echo "svdrpsend MESG \"Kopiere '${TITLE}' nach [${TARGET_DISK}]${VIDEO}\""
69+
echo "if rsync --archive --bwlimit=${LIMIT} \"${SRC}\" \"${TARGET}${TD}\" ; then"
70+
echo " svdrpsend MESG \"'${TITLE}' wurde nach [${TARGET_DISK}]${VIDEO} kopiert\""
71+
echo 'else'
72+
echo " svdrpsend MESG \"FEHLER beim kopieren von '${TITLE}'\""
73+
echo ' exit 1'
74+
echo 'fi'
75+
echo ": > ${VIDEO}/.update"
76+
echo "rm \"${1}/${FLAG}\""
77+
} > "$CP2USB"
78+
chmod a+x "$CP2USB" # Ausführbar machen
79+
"$CP2USB" &>/dev/null & disown # Temporäres Skript im Hintergrund starten
80+
else
81+
f_logger -s "Illegal parameter <${1}> or no usb drive found!"
82+
svdrpsend MESG "Ungültiger Parameter <${1}> oder kein USB-Laufwerk gefunden!"
83+
fi

bin/df_media.sh

+33
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
#!/usr/bin/env bash
2+
# df_media.sh
3+
#
4+
# Gibt die Belegung der der eingehängten Medien in /media und optional den
5+
# belegten Platz auf /video aus.
6+
#
7+
#VERSION=230412
8+
9+
# Variablen
10+
VIDEO_DIR='/video' # Interner Plattenplatz (Auskommentieren wenn nicht gewünscht)
11+
MEDIA_DIR='/media/vdr' # Plattenplatz auf externen Medien
12+
13+
# Start
14+
if [[ -n "$VIDEO_DIR" ]] ; then
15+
mapfile -t < <(df -Ph "$VIDEO_DIR") # Ausgabe von df in Array (Zwei Zeilen)
16+
echo "==> Interner Speicher (${VIDEO_DIR})"
17+
echo -e "${MAPFILE[0]}\n${MAPFILE[1]}\n" # Ausgabe (2 Zeilen)
18+
fi
19+
20+
for dir in "$MEDIA_DIR"/* ; do
21+
[[ ! -d "$dir" ]] && continue
22+
mapfile -t < <(df -Ph "$dir") # Ausgabe von df in Array (Zwei Zeilen)
23+
DF_LINE=(${MAPFILE[1]}) ; DF_DEV="${DF_LINE[0]}" # Erstes Element ist das Device
24+
if [[ ! "${DF_DEVS[@]}" =~ "$DF_DEV" ]] ; then # Jedes Device nur ein mal
25+
DF_DEVS+=("$DF_DEV") # Device der Liste hinzu fügen
26+
if [[ -z "$cnt" ]] ; then # 1. Zeile ausgeben (Nur ein mal)
27+
echo "==> Externe(r) Speicher (${MEDIA_DIR})"
28+
echo "${MAPFILE[0]}" && cnt=1
29+
fi
30+
echo "${MAPFILE[1]}" # 2. Zeile mit den Daten ausgeben
31+
#echo -e "${MAPFILE[0]}\n${MAPFILE[1]}\n" # Alternative Ausgabe (immer 2 Zeilen)
32+
fi
33+
done

bin/yavdr_funcs.sh

+51
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
# This file has to be included via source command
2+
# VERSION=230529
3+
4+
trap f_exit EXIT
5+
6+
SELF="$(readlink /proc/$$/fd/255)" || SELF="$0" # Eigener Pfad (Besseres $0)
7+
SELF_NAME="${SELF##*/}" # Eigener Name mit Erweiterung
8+
SVDRPSEND="$(type -p svdrpsend)" # svdrpsend vom VDR
9+
10+
source /usr/lib/vdr/config-loader.sh # yaVDR Vorgaben
11+
[[ -z "$LOG_LEVEL" ]] && source /etc/vdr.d/conf/vdr
12+
13+
f_exit() { f_logger '<END>' ;}
14+
15+
f_detach() {
16+
[[ -z "$*" ]] && return 1
17+
"$@" &>/dev/null & disown
18+
}
19+
20+
f_logger() {
21+
local parm
22+
if [[ "$LOG_LEVEL" != '0' ]] ; then
23+
case "$1" in
24+
-s|--stderr)
25+
parm='--stderr' ; shift ;;
26+
-o|--osd)
27+
parm='--stderr' ; shift
28+
/usr/bin/vdr-dbus-send /Skin skin.QueueMessage string:"$*" ;;
29+
esac
30+
logger "$parm" --tag 'yaVDR' "[$$] ${SELF_NAME}: $*"
31+
fi
32+
}
33+
34+
f_rotate_log() { # Log rotieren wenn zu groß
35+
if [[ -e "${LOG_FILE:=$LOGFILE}" ]] ; then
36+
FILE_SIZE="$(stat -c %s "$LOG_FILE" 2>/dev/null)"
37+
[[ ${FILE_SIZE:-51201} -gt ${MAXLOGSIZE:-51200} ]] && mv --force "$LOG_FILE" "${LOG_FILE}.old"
38+
fi
39+
}
40+
41+
f_strstr() { # strstr echoes nothing if s2 does not occur in s1
42+
[[ -n "$2" && -z "${1/*$2*}" ]] && return 0 # Gefunden
43+
return 1
44+
}
45+
46+
f_svdrps() {
47+
f_logger "$SVDRPSEND $*"
48+
"$SVDRPSEND" "$@"
49+
}
50+
51+
f_logger '<START>'

bin/yavdr_log.sh

+91
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
#!/usr/bin/env bash
2+
3+
source /_config/bin/yavdr_funcs.sh
4+
5+
echo 'Collecting information…'
6+
if [[ "$1" == '-v' ]] ; then
7+
VERBOSE=1
8+
OUTPUT="$2"
9+
elif [[ "$2" == '-v' ]] ; then
10+
VERBOSE=1
11+
OUTPUT="$1"
12+
else
13+
VERBOSE=0
14+
OUTPUT="$1"
15+
fi
16+
17+
#rm -f $(find /log/ /tmp/ -mtime +5 -type f | grep -v "g2v_log_install")
18+
printf -v DT '%(%F_%H%M.%S)T' -1 # 2023-05-22_1834.49
19+
LOG_ARCH="/tmp/yavdr_log_${DT}.tar.xz"
20+
LOG_DIR="/tmp/yavdr_log_${DT}"
21+
#rm -rf "$LOG_DIR" > /dev/null 2>&1
22+
mkdir --parents "$LOG_DIR"
23+
cd "$LOG_DIR"
24+
dmesg -T > dmesg.out 2>&1
25+
biosinfo > bios.out 2>&1
26+
lsmod > lsmod.out 2>&1
27+
lshw > lshw.out 2>&1
28+
lsusb -v > lsusb.out 2>&1
29+
lspci -vn > lspci.out 2>&1
30+
ps -ef > ps.out 2>&1
31+
biosinfo > qmb.out 2>&1
32+
/_config/bin/query_mb.sh >> qmb.out 2>&1
33+
uname -a > uname.out 2>&1
34+
/_config/bin/detect_modules.sh > det_mod.out 2>&1
35+
ls -l /tmp/ > lltmp.out 2>&1
36+
ls -l /usr/local/src/ > llsrc.out 2>&1
37+
cat /proc/meminfo > meminfo.out 2>&1
38+
cat /proc/cpuinfo > cpuinfo.out 2>&1
39+
top -b -d 1 -n 5 > top.out 2>&1
40+
{ ifconfig
41+
ping -c 2 -w 5 www.yavdr.de
42+
echo -e '\nresolv.conf:'
43+
cat /etc/resolv.conf
44+
} > net.out 2>&1
45+
cat /proc/bus/input/devices > input.out 2>&1
46+
hwinfo > hwinfo.out
47+
mount > mount.out
48+
df -h > df.out
49+
cat /log/syslog > sys.log
50+
51+
FILES="/log/kodi.log.old /log/rc.log /log/dmsg /install.log /_config/update/update.log /etc/gen2vdr/applications /etc/gen2vdr/remote \
52+
/etc/vdr.d/conf/vdr /etc/vdr/setup.conf /etc/vdr/channels.conf /etc/X11/xorg.conf /etc/vdr/plugins/admin/admin.conf /root/.kodi/temp/*log* \
53+
/log/vdr-xine.log /log/hibernate.log /log/Xorg.0.log /root/.xine/config /root/.xine/config_xineliboutput /etc/asound.conf /etc/asound.state \
54+
/etc/g2v-release /tmp/vdr/vdr_* /etc/X11/xorg.conf.d/*"
55+
56+
[[ "$VERBOSE" == '1' ]] && FILES+=" /etc/conf.d $(ls /log/messages-2* | tail -n3)"
57+
58+
cp -af "$FILES" . 2>/dev/null
59+
60+
/_config/bin/get_core.sh > core.out 2>&1
61+
62+
aplay -lL > aplay.out
63+
for i in /proc/asound/card[0-9] ; do
64+
cnum=${i#*card}
65+
{ echo "SoundCard $cnum :"
66+
amixer contents -c $cnum
67+
amixer scontents -c $cnum
68+
echo ''
69+
} >> sound.out
70+
alsactl store $cnum
71+
done
72+
73+
tar -cJf "$LOG_ARCH" .
74+
svdrps MESG "$LOG_ARCH wurde erstellt"
75+
f_logger -s "$LOG_ARCH wurde erstellt"
76+
cd ..
77+
rm -rf "$LOG_DIR"
78+
if [[ "$OUTPUT" == '-m' ]] ; then
79+
TARGET=$(mount | grep " /media/" | tail -n 1 | cut -f 3 -d " ")
80+
if [ "$TARGET" != "" ] && [ -d "$TARGET" ] ; then
81+
OUTPUT="${TARGET}/"
82+
cp -f "$LOG_ARCH" "$TARGET/"
83+
sleep 3
84+
svdrps MESG "$LOG_ARCH wurde nach $TARGET kopiert"
85+
f_logger -s "$LOG_ARCH wurde nach $TARGET kopiert"
86+
fi
87+
elif [[ -n "$OUTPUT" ]] ; then
88+
cp "$LOG_ARCH" "$OUTPUT.tar.xz"
89+
svdrps MESG "$LOG_ARCH wurde nach $OUTPUT.tar.xz kopiert"
90+
f_logger -s "$LOG_ARCH wurde nach $OUTPUT.tar.xz kopiert"
91+
fi

createlinks.sh

+86
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
#!/usr/bin/env bash
2+
3+
# createlinks.sh
4+
# - Prüft und erzeugt fehlende links zu den Ordnern "sbin" und "vdr.d"
5+
# - Dateirechte setzen
6+
# - Aktiviert vdr_init.sh via Service-DropIn
7+
# - Prüft symlinks zu sendmail
8+
# - Prüft und korrigiert ob eigen Skripte überschrieben wuden (/usr/lib/vdr)
9+
10+
#VERSION=231017
11+
12+
CONFIG_DIR='/_config' # Hauptordner
13+
LOCAL_DIR="${CONFIG_DIR}/local" # Ordner mit den zu verlinkenden Ordnern
14+
declare -A LINK_DIRS
15+
LINK_DIRS[sbin]='/usr/local/sbin' # sbin lag mal hier: /usr/local/sbin
16+
#LINK_DIRS[_div]='/usr/local/src/_div' # _div lag mal hier: /usr/local/src/_div
17+
LINK_DIRS[vdr.d]='/etc/vdr.d' # vdr.d lag mal hier: /etc/vdr.d
18+
YAVDR_VDR='/usr/local/src/yaVDR_vdr.git' # VDR Repository mit Skripten
19+
20+
[[ "$EUID" -ne 0 ]] && { echo 'Skript benötigt root-Rechte!' ; exit 1 ;}
21+
22+
cd "$LOCAL_DIR" || exit 1
23+
24+
# Symlinks erstellen
25+
echo '==> Überprüfe Symlinks…'
26+
for dir in "${!LINK_DIRS[@]}" ; do # sbin vdr.d
27+
# Leeren Ordner löschen
28+
if [[ -d "${LINK_DIRS[$dir]}" && ! "$(ls -A ${LINK_DIRS[$dir]})" ]] ; then
29+
echo "Enferne leeren Ordner ${LINK_DIRS[$dir]}"
30+
rm "${LINK_DIRS[$dir]}"
31+
fi
32+
if [[ ! -L "${LINK_DIRS[$dir]}" ]] ; then # Kein Symlink
33+
if [[ -d "${LINK_DIRS[$dir]}" ]] ; then # Ordner bereits vorhanden
34+
ls "${LINK_DIRS[$dir]}"
35+
echo "Warnung: Verzeichnis ${LINK_DIRS[$dir]} existiert. Bitte überprüfen!"
36+
else
37+
echo "Erstelle fehlenden Symlink nach ${LINK_DIRS[$dir]}"
38+
ln --symbolic "${LOCAL_DIR}/${dir}" "${LINK_DIRS[$dir]}"
39+
fi
40+
else
41+
echo "Symlink ${LINK_DIRS[$dir]} vorhanden. OK!"
42+
fi
43+
done
44+
45+
# Rechte setzen (Alle Dateien in den Ordner und Unterordnern)
46+
echo '==> Setze berechtigungen…'
47+
chown --recursive vdr:vdr "$CONFIG_DIR" # Eigentümer auf 'vdr' setzen
48+
chmod --recursive 755 "$CONFIG_DIR" # Rechte auf 755
49+
50+
# Aktivieren von vdr_init.sh
51+
if [[ ! -e '/etc/systemd/system/vdr.service.d/pre-start.conf' ]] ; then
52+
echo '==> Erstelle /etc/systemd/system/vdr.service.d/pre-start.conf'
53+
mkdir --parents /etc/systemd/system/vdr.service.d
54+
{ echo '[Service]'
55+
echo 'ExecStartPre=/etc/vdr.d/scripts/vdr_init.sh'
56+
} > /etc/systemd/system/vdr.service.d/pre-start.conf
57+
systemctl daemon-reload # Units neu einlesen
58+
fi
59+
60+
# Symlink für sendmail prüfen und anlegen, falls nicht gefunden
61+
echo '==> Prüfe Links zu sendmail…'
62+
if [[ ! -L /usr/sbin/sendmail || ! -L /usr/bin/sendmail ]] ; then # Kein Symlink
63+
[[ -e /usr/sbin/sendmail ]] && echo '[!] "sendmail" ist kein Symlink aber existiert!'
64+
ls -l /usr/bin/sendmail
65+
ls -l /usr/sbin/sendmail
66+
#ln --symbolic "$SELF" /usr/sbin/sendmail
67+
fi
68+
69+
# Skripte von VDR die überschreiben wurden wieder herstellen
70+
echo '==> Aktualisiere eigenes yaVDR GIT auf angepasste Skripte…'
71+
if [[ -d "${YAVDR_VDR}/.git" ]] ; then
72+
cd "$YAVDR_VDR"
73+
git pull >/dev/null # GIT aktualisieren
74+
files=('merge-commands.sh' 'vdr-recordingaction' 'vdr-shutdown')
75+
for file in "${files[@]}" ; do
76+
src="${YAVDR_VDR}/debian/${file}" # Quelle: Lokales git
77+
dest="/usr/lib/vdr/${file}" # Ziel: /urs/lib/vdr
78+
if ! cmp --quiet "$src" "$dest" ; then
79+
echo -e "==> Datei $file ist nicht identisch mit ${src}!\n==> Kopiere eigene Version…"
80+
mv --force --verbose "$dest" "${dest}.bak"
81+
cp --force --verbose "$src" "$dest" || echo "Fehler beim kopieren von $src"
82+
fi
83+
done
84+
fi
85+
86+
exit

local/sbin/.keep

Whitespace-only changes.

0 commit comments

Comments
 (0)