Raspberry Ramdrive für Firmware Update
Raspberry Ramdrive für Firmware Update
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...
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...
- jensebub
- IPC Meister
- Beiträge: 1133
- Registriert: So 1. Mai 2011, 09:34
- Been thanked: 1 time
- Kontaktdaten:
Re: tmp2fs.sh erweitern
Moin,
du meinst bestimmt tmp2ram.sh
gucke einfach mal ins script, sollte sich von alleine erklären
Gruß
jensebub
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
jensebub
Re: tmp2ram.sh erweitern
Danke Jens.
so wie ich mir das gedacht hab. Ich brauch nur die Zeile:
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 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
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
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
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...
Re: tmp2ram.sh erweitern
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?
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; }
Re: AW: tmp2ram.sh erweitern
Ich würde es jetzt so lösen:
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:
Versucht hab ichs noch nicht, aber theoretisch??
LG Bimmi
Code: Alles auswählen
mount -t tmpfs -o size=100M tmpfs /root/.rpi-firmware && rpi-update && umount /root/.rpi-firmware && reboot
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
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...
Re: tmp2ram.sh erweitern
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
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; }
Re: AW: tmp2ram.sh erweitern
Dann wird es Zeit!TommyH99 hat geschrieben:bin kein rpi user
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.TommyH99 hat geschrieben:was ist wenn das update fehlschlägt rebootet das system unnötig
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...
Re: tmp2ram.sh erweitern
if
then
else
fi
sollte ein guter Anfang sein
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; }
Re: tmp2ram.sh erweitern
Soooo ich hab jetzt mal ein bisschen gebastelt.
Wills euch nicht vorenthalten...
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
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
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...
Re: AW: tmp2ram.sh erweitern
Im ipcsetup wird ja abgefragt, ob ein raspberry genutzt wird. Zumindest welche debian version.
Vielleicht wollt ihr das skript miteinbauen. Kann jeder gerne verwenden.
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...
Wer ist online?
Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast