Raspberry Ramdrive für Firmware Update

Fragen, Probleme ... die sonst nirgends passen ...
bimmi
IPC Neuling
Beiträge: 31
Registriert: Fr 2. Nov 2012, 01:44
Kontaktdaten:

Raspberry Ramdrive für Firmware Update

Beitrag von bimmi »

Hallo Ipc Gemeinde,

Würde gerne /root/.rpi-update in ein ramdrive verwandeln, da das Update von der Raspberry Firmware (rpi-update) immer sehr viele Dateien herunterläd.

Füge ich dann einfach eine Zeile in der fstab hinzu? So wie die Vorhandenen Zeilen vom Log und Tmp?

Muss ich sonst noch etwas beachten?

Liebe Grüße Bimmi

Edit: Meine natürlich tmp2ram.sh -> Danke Jensebub! Weiß auch nicht wie ich immer auf tmp2fs.sh komme...
Zuletzt geändert von bimmi am Do 28. Feb 2013, 21:40, insgesamt 2-mal geändert.
Raspberry Pi B 512er Modell mit IPC natürlich. Was sonst... :) Und der rennt und rennt und rennt...
Benutzeravatar
jensebub
IPC Meister
Beiträge: 1133
Registriert: So 1. Mai 2011, 09:34
Been thanked: 1 time
Kontaktdaten:

Re: tmp2fs.sh erweitern

Beitrag von jensebub »

Moin,
du meinst bestimmt tmp2ram.sh ;)
gucke einfach mal ins script, sollte sich von alleine erklären ;)
Spoiler
Show

Code: Alles auswählen

#!/bin/bash
# IPC - Custom Scripts - tmp2ram.sh
# v0.6

_IPC=0
DAEMON="/etc/init.d/varlog"
[ -f /var/emu/script/functions.sh ] && . /var/emu/script/functions.sh && _IPC=1

# +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#  F U N C T I O N S
# +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
function tmpfsinstall () {
# Pruefe TmpFS in fstab
echo "Starte TmpFS Installation.."
if [ ! "`grep -i 'tmpfs' /etc/fstab`" = "" ] ; then
	echo "-------------------------------------------------------------------------------"
	echo "TmpFS schon vorhanden, Installation nicht moeglich."
	echo "-------------------------------------------------------------------------------"
else
	echo "Erzeuge Verzeichnisse.."
	createdirs
	echo "/etc/fstab: Tmpfs wird eingetragen.."	
	echo "tmpfs           /tmp                     tmpfs    size=50M          0       0" >> /etc/fstab
	echo "tmpfs           /var/tmp                 tmpfs    size=20M          0       0" >> /etc/fstab
	echo "tmpfs           /var/log                 tmpfs    size=70M          0       0" >> /etc/fstab
	#[ "$_IPC" == "1" ] && echo "tmpfs           /var/emu/tmp             tmpfs    size=10M          0       0" >> /etc/fstab
	echo "tmpfs           /var/cache/apt/archives  tmpfs    size=150M         0       0" >> /etc/fstab

	echo "Erzeuge Daemon.."
	echo '#!/bin/bash' > $DAEMON
	echo '### BEGIN INIT INFO' >> $DAEMON
	echo '# Provides:          varlog' >> $DAEMON
	echo '# Required-Start:    $local_fs' >> $DAEMON
	echo '# Required-Stop:     $local_fs' >> $DAEMON
	echo '# Default-Start:     2 3 4 5' >> $DAEMON
	echo '# Default-Stop:      0 1 6' >> $DAEMON
	echo '# Short-Description: Start/stop logfile saving' >> $DAEMON
	echo '### END INIT INFO' >> $DAEMON
	echo '#' >> $DAEMON
	echo '# varlog		This init.d script is used to start logfile saving and restore.' >> $DAEMON
	echo '#' >> $DAEMON
	echo '' >> $DAEMON
	echo 'case $1 in' >> $DAEMON
	echo '  start)' >> $DAEMON
	echo '    /bin/echo "'*** Starting tmpfs file restore: varlog.'"' >> $DAEMON
	echo '    if [ -z "$(/bin/grep /var/log /proc/mounts)" ]; then' >> $DAEMON
	echo '      /bin/echo "'*** mounting /var/log'"' >> $DAEMON
	echo '      /bin/cp -Rpu /var/log/* /var/save.log/' >> $DAEMON
	echo '      varlogsize=$(grep /var/log /etc/fstab|awk {"'print \$4'"}|cut -d"=" -f2)' >> $DAEMON
	echo '      [ -z "$varlogsize" ] && varlogsize="70M"' >> $DAEMON
	echo '      /bin/mount -t tmpfs none /var/log -o defaults,size=$varlogsize' >> $DAEMON
	echo '    fi' >> $DAEMON
	echo '    /bin/cp -Rpu /var/save.log/* /var/log/' >> $DAEMON
	#[ "$_IPC" == "1" ] && /bin/echo '    /bin/cp -Rpu /var/emu/save.tmp/* /var/emu/tmp/ >/dev/null 2>&1' >> $DAEMON
	echo '    [ ! -d /var/cache/apt/archives/partial ] && /bin/mkdir -p /var/cache/apt/archives/partial' >> $DAEMON
	echo '  ;;' >> $DAEMON
	echo '  stop)' >> $DAEMON
	echo '    /bin/echo "'*** Stopping tmpfs file saving: varlog.'"' >> $DAEMON
	#echo '    /bin/rm -fR /var/save.log/*' >> $DAEMON
	echo '    /bin/cp -Rpu /var/log/* /var/save.log/ >/dev/null 2>&1' >> $DAEMON
	#[ "$_IPC" == "1" ] && echo '    /bin/rm -fR /var/emu/save.tmp/*' >> $DAEMON
	#[ "$_IPC" == "1" ] && echo '    /bin/cp -Rpu /var/emu/tmp/* /var/emu/save.tmp/ >/dev/null 2>&1' >> $DAEMON
	echo '  ;;' >> $DAEMON
	echo '  *)' >> $DAEMON
	echo '    /bin/echo "Usage: $0 {start|stop}"' >> $DAEMON
	echo '  ;;' >> $DAEMON
	echo '' >> $DAEMON
	echo 'esac' >> $DAEMON
	echo 'exit 0' >> $DAEMON
	echo '' >> $DAEMON

	echo "Rechte setzen.."
	chmod 755 $DAEMON
	echo "Daemon eintragen.."
	update-rc.d varlog start 01 2 3 4 5 . stop 99 0 1 6 .
	#pruefe System ob ARM (Raspberry)
	if [[ "$(uname -m)" = "arm"* ]]; then
		#apache2 fix..
		mv -f /etc/rc2.d/S??apache2 /etc/rc2.d/S99apache2 >/dev/null 2>&1
		mv -f /etc/rc3.d/S??apache2 /etc/rc3.d/S99apache2 >/dev/null 2>&1
		mv -f /etc/rc4.d/S??apache2 /etc/rc4.d/S99apache2 >/dev/null 2>&1
		mv -f /etc/rc5.d/S??apache2 /etc/rc5.d/S99apache2 >/dev/null 2>&1
		#varlog fix
		mv -f /etc/rc2.d/S??varlog /etc/rc2.d/S01varlog >/dev/null 2>&1
		mv -f /etc/rc3.d/S??varlog /etc/rc3.d/S01varlog >/dev/null 2>&1
		mv -f /etc/rc4.d/S??varlog /etc/rc4.d/S01varlog >/dev/null 2>&1
		mv -f /etc/rc5.d/S??varlog /etc/rc5.d/S01varlog >/dev/null 2>&1
		mv -f /etc/rc6.d/S??varlog /etc/rc6.d/S01varlog >/dev/null 2>&1
		mv -f /etc/rc0.d/K??varlog /etc/rc0.d/K99varlog >/dev/null 2>&1
		mv -f /etc/rc1.d/K??varlog /etc/rc1.d/K99varlog >/dev/null 2>&1
		mv -f /etc/rc2.d/K??varlog /etc/rc2.d/K99varlog >/dev/null 2>&1
		mv -f /etc/rc3.d/K??varlog /etc/rc3.d/K99varlog >/dev/null 2>&1
		mv -f /etc/rc4.d/K??varlog /etc/rc4.d/K99varlog >/dev/null 2>&1
		mv -f /etc/rc5.d/K??varlog /etc/rc5.d/K99varlog >/dev/null 2>&1
		mv -f /etc/rc6.d/K??varlog /etc/rc6.d/K99varlog >/dev/null 2>&1
	fi
	## FIXME:
	rclocalexitnum=$(sed -ne '/^exit.*/=' /etc/rc.local)
	rclocalexitnum=$(($rclocalexitnum - 1))
	sed -i -e "$rclocalexitnum a [ ! -d /var/log/apache2 ] && mkdir -p /var/log/apache2 && chown root:adm /var/log/apache2\n" /etc/rc.local

	echo "RamRun, RamLock wird aktiviert.."
	if [ ! "`grep 'RAMRUN=no' /etc/default/rcS`" = "" ] ; then
		sed -i /etc/default/rcS -e "s/RAMRUN=no/RAMRUN=yes/"
		sed -i /etc/default/rcS -e "s/RAMLOCK=no/RAMLOCK=yes/"
	fi
	echo "Save.."
	$DAEMON stop
	echo "Mount TmpFS.."
	mount -a
	echo "Restore.."
	$DAEMON start
	echo "-------------------------------------------------------------------------------"
	echo "Installation abgeschlossen"
	echo "-------------------------------------------------------------------------------"
fi
}

function tmpfsuninstall () {
# Pruefe TmpFS in fstab
echo "Starte TmpFS Deinstallation.."
if [ ! "`grep -i 'tmpfs' /etc/fstab`" = "" ] ; then
	echo "/etc/fstab: Tmpfs wird ausgetragen.."	
	sed -i /etc/fstab -e "/^tmpfs/d"
	echo "Save.."
	$DAEMON stop
	echo "Unmount TmpFS.."
	umount -l /tmp >/dev/null 2>&1
	umount -l /var/tmp >/dev/null 2>&1
	umount -l /var/log >/dev/null 2>&1
	umount -l /var/emu/tmp >/dev/null 2>&1
	umount -l /var/cache/apt/archives >/dev/null 2>&1
	echo "Restore.."
	$DAEMON start
	echo "Daemon austragen.."
	update-rc.d -f varlog remove
	echo "Daemon entfernen.."
	rm -f $DAEMON
	deldirs
	echo "RamRun, RamLock wird deaktiviert.."
	if [ ! "`grep 'RAMRUN=yes' /etc/default/rcS`" = "" ] ; then
		sed -i /etc/default/rcS -e "s/RAMRUN=yes/RAMRUN=no/"
		sed -i /etc/default/rcS -e "s/RAMLOCK=yes/RAMLOCK=no/"
	fi
	mount -a
	echo "-------------------------------------------------------------------------------"
	echo "Deinstallation abgeschlossen."
	echo "-------------------------------------------------------------------------------"
else
	echo "-------------------------------------------------------------------------------"
	echo "/etc/fstab beinhaltet keine tmpfs Eintraege ! "
	echo "-------------------------------------------------------------------------------"
fi
}

function AddonInstalled () {
	[ ! -z "$AddOnInfos" ] && echo "ok" > /tmp/.AddonInstalled_$(basename $0)
}

function remove_addon () {
	#onlinescript als addon entfernen
	if [ ! -z "$AddOnInfos" ]&&[ -f "$AddOnInfos" ]; then
		Anum=$(sed -ne "/^$(basename $0).*/=" $AddOnInfos)
		[ ! -z "$Anum" ] && sed -i -e "$Anum d" $AddOnInfos
	fi
}

function createdirs () {
	[ ! -d /var/save.log ] && mkdir -p /var/save.log
	[ "$_IPC" == "1" ] && [ ! -d /var/emu/tmp ] && mkdir -p /var/emu/tmp
	[ "$_IPC" == "1" ] && [ ! -d /var/emu/save.tmp ] && mkdir -p /var/emu/save.tmp
	[ ! -d /var/cache/apt/archives/partial ] && mkdir -p mkdir /var/cache/apt/archives/partial
}

function deldirs () {
	rm -fR /var/log.save
	rm -fR /var/emu/tmp.save
	rm -fR /var/save.log
	rm -fR /var/emu/save.tmp
}

# +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#  M A I N 
# +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

clear
echo -e "IPC $IPCVERSION: \033[1;37mOnline Scripts\033[0m                                      $(date +"%d.%m.%Y %H:%M")"
echo "==============================================================================="
echo ""
echo -e "\033[1;37mtmp2ram.sh\033[0m      (Temporary Filesystem wird eingerichtet)"
echo ""
echo "TmpFS ist die bessere Alternative zu Ramdisk !"
echo ""
echo "Im Gegensatz zur Ramdisk bei der realer Arbeitsspeicher verwendet wird,"
echo "verwendet tmpfs nur virtuellen Arbeitsspeicher."
echo "Vorteil: Nur der momentane von tmpfs benoetigte Speicher wird im RAM belegt."
echo ""
echo "Dieses Script darf nur auf Systemen verwendet, wo noch keine Einrichtung von"
echo "TmpFS bzw. Ramdisk erfolgt ist !"
echo ""
echo "Groessenlimits der TmpFS Eintrage sind in /etc/fstab anzupassen."
echo "Die Einrichtung ist nur auf Systemen mit CF-Card sinnvoll !"
echo ""
echo "-------------------------------------------------------------------------------"
echo ""
echo -en "\033[1;33m[I]nstallieren  |  [D]einstallieren  |  []Beenden \033[0m"
read key
case $key in
	[Ii])
		echo ""
		tmpfsinstall
		AddonInstalled
	;;
	[Dd])
		echo ""
		tmpfsuninstall
		remove_addon
	;;
	*)
		echo ""
		echo "-------------------------------------------------------------------------------"
		echo "$0 vorzeitig beendet"
		echo "-------------------------------------------------------------------------------"
	;;
esac

rm -f $0

exit 0
Gruß
jensebub
bimmi
IPC Neuling
Beiträge: 31
Registriert: Fr 2. Nov 2012, 01:44
Kontaktdaten:

Re: tmp2ram.sh erweitern

Beitrag von bimmi »

Danke Jens.

so wie ich mir das gedacht hab. Ich brauch nur die Zeile:

Code: Alles auswählen

tmpfs           /root/.rpi-update/          tmpfs    size=100M                      0       0
in der fstab hinzufügen und einen reboot machen...

Nur hat der Firmware Update Ordner 85 MB. Ist es auch möglich das ganze über ein Skript zu lösen, was mir temporär eine Ramdisk erstellt ohne den RAM dauerhaft als Ramdisk zu benutzen?

temporär kann ich die Ramdisk ja mit

Code: Alles auswählen

mount -t tmpfs -o size=100M tmpfs /root/.rpi-firmware
erstellen.

Kann ich sowas skripten? Also das erst die Ramdisk erstellt wird, dann das rpi-update ausgeführt wird und danach die ramdisk wieder entfernt wird?

LG Bimmi
Raspberry Pi B 512er Modell mit IPC natürlich. Was sonst... :) Und der rennt und rennt und rennt...
TommyH99
P E B K A C
Beiträge: 428
Registriert: So 17. Apr 2011, 13:35
Kontaktdaten:

Re: tmp2ram.sh erweitern

Beitrag von TommyH99 »

Du kannst in der Regel 99% alles per Script erledigen lassen und natürlich auch das.
und reboot ist nicht nötig(!) oder muss man nachdem man tmpfs script installiert neustarten? ;)
if ($ahnung == false or $problem == true) { read FAQ; use SEARCH; use GOOGLE; } else { use brain; make post; }
bimmi
IPC Neuling
Beiträge: 31
Registriert: Fr 2. Nov 2012, 01:44
Kontaktdaten:

Re: AW: tmp2ram.sh erweitern

Beitrag von bimmi »

Ich würde es jetzt so lösen:

Code: Alles auswählen

mount -t tmpfs -o size=100M tmpfs /root/.rpi-firmware && rpi-update && umount /root/.rpi-firmware && reboot
Eventuell das alles noch schön verpacken in einen symlink (wenn das geht mit mehreren befehlen).

Durch das " && " würde linux ja erst den nächsten befehl ausführen wenn es keinen fehler gibt.

Oder ist es besser ein script draus zu machen?

Mein shellscript würde so aussehen:

Code: Alles auswählen

#!/bin/bash
mount -t tmpfs -o size=100M tmpfs /root/.rpi-firmware
rpi-update
umount /root/.rpi-firmware
reboot
Versucht hab ichs noch nicht, aber theoretisch??


LG Bimmi
Zuletzt geändert von bimmi am Mi 27. Feb 2013, 21:00, insgesamt 2-mal geändert.
Raspberry Pi B 512er Modell mit IPC natürlich. Was sonst... :) Und der rennt und rennt und rennt...
TommyH99
P E B K A C
Beiträge: 428
Registriert: So 17. Apr 2011, 13:35
Kontaktdaten:

Re: tmp2ram.sh erweitern

Beitrag von TommyH99 »

ok, nachdem rpi-update benötigst einen reboot - hab ich schon erfahren :) bin kein rpi user ;)

aber! was ist wenn das update fehlschlägt, dann rebootet das system unnötig ;)
if ($ahnung == false or $problem == true) { read FAQ; use SEARCH; use GOOGLE; } else { use brain; make post; }
bimmi
IPC Neuling
Beiträge: 31
Registriert: Fr 2. Nov 2012, 01:44
Kontaktdaten:

Re: AW: tmp2ram.sh erweitern

Beitrag von bimmi »

TommyH99 hat geschrieben:bin kein rpi user
Dann wird es Zeit! :mrgreen:
TommyH99 hat geschrieben:was ist wenn das update fehlschlägt rebootet das system unnötig ;)
Ja, daran hab ich auch schon gedacht. Den reboot kann ich auch manuell ausführen. Mir gehts in erster Linie erstmal darum, dass die firmware aktualisierung in einem ramdrive passiert.

Lese mich gerade ein bisschen in bash scripting ein. Werde dann noch einen errorlog einbauen und evtl. noch eine Bestätigung vorm reboot.
Raspberry Pi B 512er Modell mit IPC natürlich. Was sonst... :) Und der rennt und rennt und rennt...
TommyH99
P E B K A C
Beiträge: 428
Registriert: So 17. Apr 2011, 13:35
Kontaktdaten:

Re: tmp2ram.sh erweitern

Beitrag von TommyH99 »

if
then
else
fi

sollte ein guter Anfang sein :)
if ($ahnung == false or $problem == true) { read FAQ; use SEARCH; use GOOGLE; } else { use brain; make post; }
bimmi
IPC Neuling
Beiträge: 31
Registriert: Fr 2. Nov 2012, 01:44
Kontaktdaten:

Re: tmp2ram.sh erweitern

Beitrag von bimmi »

Soooo ich hab jetzt mal ein bisschen gebastelt.

Wills euch nicht vorenthalten...

Code: Alles auswählen

#!/bin/bash

ENABLECOLORS="yes"
LOGFILE="/var/log/rpi-update.log"
FEHLER_LOG="/var/log/rpi-update-error.log"
REBOOT_ZEIT="05:00"

if [ "$ENABLECOLORS" = "yes" ]; then
	ROT=`tput setaf 1`
	GRUEN=`tput setaf 2`
	BOLD=`tput bold`
	NORM='tput op && tput sgr0'
else
	ROT="" ; GRUEN="" ; BOLD="" ; NORM=""
fi
	clear
	echo $GRUEN "------------------------------------------------------------------" ; $NORM
	echo $GRUEN "-              FIRMWARE UPDATE SKRIPT RASPBERY                   -" ; $NORM
	echo $GRUEN "-              -------------------------------                   -" ; $NORM
	echo $GRUEN "-   Dieses Skript erstellt eine kurzzeitige Ramdisk mit 120 MB   -" ; $NORM
	echo $GRUEN "-           und updated die Firmware vom Raspberry Pi.           -" ; $NORM
	echo $GRUEN "------------------------------------------------------------------" ; $NORM
	echo " "
	echo " "
sleep 5
#Ramdrive erstellen
echo $ROT "   * RAMDRIVE WIRD ERSTELLT *                    " ; $NORM
	mount -t tmpfs -o size=120M tmpfs /root/.rpi-firmware
	sleep 1
echo $GRUEN "   * RAMDRIVE ERSTELLT *                         " ; $NORM
echo $GRUEN " " ; $NORM
echo $GRUEN " " ; $NORM
	sleep 1

# Datum in Log Einfügen
echo  $(date +%D) --- $(date +%T) > $LOGFILE
echo "----------------------------------------------------------------------------------------------" >> $LOGFILE

# Raspberry Update
rpi-update >> $LOGFILE
sleep 0.5

# Ramdrive leeren und entfernen.
echo $ROT "   * RAMDRIVE WIRD ENTFERNT *                    " ; $NORM
umount /root/.rpi-firmware
sleep 1
echo $GRUEN "   * RAMDRIVE ENTFERNT! *                         " ; $NORM

# Fehlerüberprüfung
grep -i "Failed:" $LOGFILE 2>&1 >/dev/null

#Bei Fehler abbruch
if [ $? -eq 0 ]; then
	echo " "
	echo " "
	echo " "
	echo $ROT "------------------------------------------------------------------" ; $NORM
	echo $ROT "-            Fehler beim Update! Log wird geoeffnet!             -" ; $NORM
	echo $ROT "------------------------------------------------------------------" ; $NORM	
	sleep 5
	clear
	nano $LOGFILE
	exit 1
else
	clear
	echo " "
	echo $GRUEN "------------------------------------------------------------------" ; $NORM
	echo $GRUEN "-                 FIRMWARE UPDATE ERFOLGREICH                    -" ; $NORM
	echo $GRUEN "-                 ---------------------------                    -" ; $NORM
	echo $GRUEN "-      System wird um 05:00 Uhr automatisch neu gestartet!       -" ; $NORM
	echo $GRUEN "------------------------------------------------------------------" ; $NORM
	sleep 5
	echo 'reboot' | at "$REBOOT_ZEIT"
fi
Mit den Konsolenfarben hab ich mich am oscam-compile.sh script bedient. Ich hoffe das ist OK.

Geändert:
- Erfolgreiche script durchführung wird mit einem automatischen Neustart um 5 Uhr früh des darauffolgenden Tages belohnt. "at" vorausgesetzt. (apt-get install at)

Todo:
- Bestätigung vorm reboot einfügen

LG Bimmi
Zuletzt geändert von bimmi am Do 28. Feb 2013, 21:41, insgesamt 6-mal geändert.
Raspberry Pi B 512er Modell mit IPC natürlich. Was sonst... :) Und der rennt und rennt und rennt...
bimmi
IPC Neuling
Beiträge: 31
Registriert: Fr 2. Nov 2012, 01:44
Kontaktdaten:

Re: AW: tmp2ram.sh erweitern

Beitrag von bimmi »

Im ipcsetup wird ja abgefragt, ob ein raspberry genutzt wird. Zumindest welche debian version.

Vielleicht wollt ihr das skript miteinbauen. Kann jeder gerne verwenden. :)
Raspberry Pi B 512er Modell mit IPC natürlich. Was sonst... :) Und der rennt und rennt und rennt...
Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast