Dev:LiveCD
Inhaltsverzeichnis
Live CD
Ein Script, das mit einer LiveCD die Java enthält verwendet werden kann um YaCy zu testen.
- eine Möglichkeit für Autoupdate?
Vorraussetzungen
- LiveCD mit Java (Knoppix?)
- Möglichst schreibbare Partitionen (FAT)
Umsetzung
Aufruf des Scripts:
wget http://url/to/script -O -|sh
- Autokonfiguration: Erkennung und Auswahl von Partitionen (fstab lesen)
- Wenn keine Partition erkannt oder kein permanentes DATA gewünscht ist, DHT abschalten, möglichst alles Indexe sofort verschicken
Datenverlust minimieren
Beim start ohne FAT Partition wird DATA hinterher gelöscht. Um das zu minimieren, werden Settings gesucht, die helfen die Indexe schnell zu verteilen.
storagePeerHash
Liste von Peers die sich freiwillig melden um die Daten von Knoppixusern zu speichern:
lulabad-1/zLXFf5lTteUv HuppisYaCyBox/La5ZLWG4e1PF KoH_DHT/XvyoHlRK0-pH
Achtung: Bitte beim Setzen dieses Properties in der YaCy Config Datei, bzw. mit Config_p.html
über das YaCy Webinterface nur den Hash-Wert, also den Teil ab dem Querstrich angeben. Z.B. storagePeerHash=zLXFf5lTteUv
experimentelles "Live"-Script für Knoppix
Das Script installiert und startet YaCy unter Knoppix. Optional in einer Ramdisk, hierfür sind min. 256MB RAM empfohlen.
Erfolgreich getestet (bisher ausschließlich! mit Ramdisk) auf
- KNOPPIX_V4.0.2CD-2005-09-23-DE
- KNOPPIX_V5.0.1CD-2006-06-01-DE
#!/bin/sh YACY_PORT=8090 # test for basics function check_first() { if [ "$DISPLAY" == "" ]; then echo "Sorry! Dieses Script muß in einer Console unter X gestartet werden." exit 1 fi if [ "`which kdialog`" == "" ] ; then echo "Dieses Script benötigt das Programm kdialog, welches nicht gefunden wurde." echo "Versuche eine andere LiveCD, z.B. Knoppix von http://www.knopper.net/knoppix" exit 1 fi } # greatings function welcome() { if ! kdialog --title "YaCy-Live-Installer" --yesno "Dieses Script installiert YaCy auf ihrem Rechner.\nZuerst werden alle benötigten Informationen abgefragt.\nMöchten Sie Fortfahren?" ; then echo "Abgebrochen." exit 1 fi } # teste auf java (und kompatible version) function check_java() { if [ "`which java`" == "" ] ; then echo "YaCy benötigtJava, welches nicht gefunden wurde." echo "Versuche eine andere LiveCD, z.B. Knoppix von http://www.knopper.net/knoppix" exit 1 fi #TODO check auf kompatible Version } # installationsart wählen function request_install_type() { if ! YACY_INSTALL_TYPE=`kdialog --radiolist "Wählen Sie den Typ ihrer Installation:" 1 "temporäre Testinstallation" on 2 "dauerhafter Betrieb" off`; then echo "Abgebrochen." exit 1 fi } # zielverzeichnis auswählen function request_directory() { if [ "$YACY_INSTALL_TYPE" == "1" ]; then YACY_TO_RAM=on YACY_TO_DIR=off else YACY_TO_RAM=off YACY_TO_DIR=on fi # freien RAM checken, minimum 25M, sonst Warnung memfree=$(free -m|grep buffers/|sed 's/.* //'); if [ $memfree -lt 25 ] ; then RAM="in RAM-Disk (Warnung: zu wenig RAM)" YACY_TO_RAM=off YACY_TO_DIR=on else RAM="in RAM-Disk" fi # # TODO wenn Partitionserkennung clean dann hier mit einbauen # # if ! YACY_INSTALL_TYPE=`kdialog --radiolist "Wohin soll YaCy installiert werden?" 1 "$RAM" $YACY_TO_RAM 2 "Verzeichnis selbst auswählen" $YACY_TO_DIR 3 "erkannte Partitionen vorschlagen" off `; then # if ! YACY_INSTALL_DEST=`kdialog --radiolist "Wohin soll YaCy installiert werden?" 1 "$RAM" $YACY_TO_RAM 2 "Verzeichnis selbst auswählen" $YACY_TO_DIR`; then echo "Abgebrochen." exit 1 fi if [ "$YACY_INSTALL_DEST" == "2" ] ; then # Verzeichnis wählen if ! YACY_DIR="`kdialog --getexistingdirectory / 2> /dev/null`" ; then echo "Abgebrochen." exit 1 fi # # TODO wenn Partitionserkennung clean dann hier einbauen # #elif [ "$YACY_INSTALL_TYPE=" == "3" ] ; then # Partitionen erkennen # parts=$(grep '(vfat|ext2|ext3|reiserfs)' /etc/fstab|sed 's/.* ///;s/ .*//;s/^///') #TODO: support für tabs als separator # for i in $parts; do # options="$options $i $i off"; # done; # part=$(kdialog --radiolist "Welche der erkannten Partionen möchten Sie für YaCy verwenden?" $options); # fi # wenn nicht Ram-Disk Rechte checken if [ "$YACY_INSTALL_DEST" != "1" ] ; then if [ -w "$YACY_DIR" ] && [ -d "$YACY_DIR" ] ; then return 0 else if kdialog --title "keine Schreibrechte" --warningcontinuecancel "Du mußt Schreibrechte in dem Verzeichnis haben.\nVerzeichnis neu auswählen?" ; then request_directory else echo "Abgebrochen." exit 1 fi fi fi } # proxy für wget nachfragen function request_wget_proxy() { if kdialog --title "Proxyserver" --yesno "Der Installer wird benötigte Dateien aus dem Internet nachladen (~10MB).\nSoll hierfür ein Proxy-Server benutzt werden?" ; then if ! YACY_WGET_PROXY=`kdialog --title "Proxyserver" --inputbox "Geben Sie den Proxyserver im Format SERVER:PORT ein:"`; then echo "Abgebrochen." exit 1 fi YACY_WGET_PROXY_HOST=`echo $YACY_WGET_PROXY|cut -d ":" -f 1` YACY_WGET_PROXY_PORT=`echo $YACY_WGET_PROXY|cut -d ":" -f 2` fi if [ "$YACY_WGET_PROXY" != "" ] ; then if kdialog --title "Proxyserver" --yesno "Soll YaCy selbst diesen Proxyserver ebenfalls verwenden?" ; then YACY_USE_PROXY=1 fi fi } # libx nachfragen function request_libx() { if kdialog --title "zuätzliche Parser" --yesno "Sollen zusätzliche Parser (z.B. für Office-Formate) installiert werden?" ; then YACY_LIBX=1 fi } # peername nachfragen function request_peername() { random="livecd_`dd if=/dev/urandom bs=4 count=1 2>/dev/null|od -h|grep 0000000|sed "s/0000000 //" | sed "s/ //g"`" if ! YACY_PEERNAME=`kdialog --title "Peername" --inputbox "Geben Sie einen Namen für Ihr Peer ein:" $random`; then echo "Abgebrochen." exit 1 fi } # peername nachfragen function request_peeruser() { if ! YACY_USER=`kdialog --title "administrativer Account" --inputbox "Geben Sie den Benutzernamen für den Peer-Administrator ein:" admin`; then echo "Abgebrochen." exit 1 fi } # passwort nachfragen function request_peerpwd() { random=`dd if=/dev/urandom bs=4 count=1 2>/dev/null|od -h|grep 0000000|sed "s/0000000 //" | sed "s/ //g"` if ! YACY_PWD=`kdialog --title "administrativer Account" --inputbox "Geben Sie das Passwort für '$YACY_USER' ein:" $random`; then echo "Abgebrochen." exit 1 fi } # erweiterte Konfiguration nachfragen function request_advanced() { if kdialog --title "weitere Optionen" --yesno "Möchten Sie zusätzliche (Experten-) Optionen angeboten bekommen?" ; then # Port konfigurieren if ! YACY_PORT=`kdialog --title "Port für YaCyfestlegen" --inputbox "YaCy soll folgenden Port benutzen:" $YACY_PORT`; then echo "Abgebrochen." exit 1 fi # Principal if kdialog --title "Start als Principal" --yesno "Wenn Port $YACY_PORT von extern erreichbar ist kann YaCy als Principal starten. Dazu wird eine statische IP oder ein Hostname (z.B. über DynDNS) benötigt.\nMöchten Sie YaCy dafür konfigurieren?" ; then # Hostname oder IP if ! YACY_HOSTNAME=`kdialog --title "Port" --inputbox "Geben Sie die statische IP oder den Hostname ein:"`; then echo "Abgebrochen." exit 1 fi fi fi } # installation bestätigen function request_install() { if ! kdialog --title "Installation" --warningcontinuecancel "YaCy ist bereit zu Installation.\nMöchten Sie die Installation jetzt wirklich starten?" ; then echo "Abgebrochen." exit 1 fi } # installationsverzeichnis vorbereiten function prepare_directory() { if [ "$YACY_INSTALL_DEST" == "1" ] ; then # RAM-Disk # mount-point für RAM-Disk: /yacy # TODO Möglichkeit für temporären Mountpoint finden YACY_ROOT=/yacy echo "* create ramdisk, mount as $YACY_ROOT and correct permissons" sudo mkdir $YACY_ROOT sudo mount -t tmpfs tmpfs -o nr_inodes=1M,noatime $YACY_ROOT sudo chown knoppix: "$YACY_ROOT" sudo chmod 755 "$YACY_ROOT" elif [ "$YACY_INSTALL_DEST" == "2" ] ; then # freies Verzeichnis YACY_ROOT="$YACY_DIR" fi # Achtung: Ab hier Pfadangaben in "" einschliessen! cd "$YACY_ROOT" } # download liste function download_listing() { echo "* download filelisting" if [ "$YACY_WGET_PROXY" != "" ] ; then export http_proxy="http://$YACY_WGET_PROXY" fi YACY_FILES=`wget -U "livecd" http://devbin.yacy-forum.de/dirlist.txt -O -` if [ "$YACY_FILES" == "" ] ; then if kdialog --warningcontinuecancel "Der Download des Filelistings ist fehlgeschlagen. Erneut versuchen?" ; then download_listing else echo "Abgebrochen" exit 1 fi fi } # download files function download_files() { cd "$YACY_ROOT" if [ "$YACY_LIBX" == "1" ] ; then # mit Extensions echo "* download current release (with extensions)" YACY_RELEASE="`echo "$YACY_FILES" | grep all`" wget -U "livecd" -t 1 "http://devbin.yacy-forum.de/index.php?datei=${YACY_RELEASE}" || wget -U "livecd" "http://devbin.yacy-forum.de/${YACY_RELEASE}" else # ohne Extensions echo "* download current release" YACY_RELEASE="`echo "$YACY_FILES" |grep dev`" wget -U "livecd" -t 1 "http://devbin.yacy-forum.de/index.php?datei=${YACY_RELEASE}" || wget -U "livecd" "http://devbin.yacy-forum.de/${YACY_RELEASE}" fi if [ ! -e $YACY_RELEASE ] ; then if kdialog --warningcontinuecancel "Der Download der Datei ist fehlgeschlagen. Erneut versuchen?" ; then download_files else echo "Abgebrochen." exit 1 fi fi } # entpacken function unpack_files() { cd "$YACY_ROOT" echo '* extract release' tar -xzvpf $YACY_RELEASE &> /dev/null UNPACK_DIR="`basename $YACY_RELEASE .tar.gz | sed -e \"s/all/dev/\"`" cd "$YACY_ROOT/$UNPACK_DIR/" mv * "$YACY_ROOT" cd "$YACY_ROOT" rmdir "$UNPACK_DIR" rm -f "$YACY_RELEASE" YACY_DATA_DIR="$YACY_ROOT/DATA" YACY_SETTINGS_DIR="$YACY_DATA_DIR/SETTINGS/" mkdir -p "$YACY_SETTINGS_DIR" sudo chown -R knoppix: "$YACY_ROOT" } # konfigurieren function configure_yacy() { echo '* configure YaCy' YACY_CONFIG="$YACY_SETTINGS_DIR/httpProxy.conf" touch "$YACY_CONFIG" # Admin-Account echo "peerName=$YACY_PEERNAME" >> "$YACY_CONFIG" echo "adminAccount=$YACY_USER:$YACY_PWD" >> "$YACY_CONFIG" echo "port=$YACY_PORT" >> "$YACY_CONFIG" # Greeting (only on ramdisk) if [ "$YACY_INSTALL_TYPE" == "1" ] ; then echo 'promoteSearchPageGreeting=KNOPPIX Testpeer. Remember, that all DATA will be deleted on next Reboot. Do Not Crawl too much, because your DATA is on a Ramdisk, which will slowdown your KNOPPIX, when it becomes full.' >> "$YACY_CONFIG" # TODO: hier Logging für Ram-Disk-Installation ausschalten? fi # remote Proxy if [ "$YACY_USE_PROXY" == "1" ] ; then echo "remoteProxyHost=$YACY_WGET_PROXY_HOST" >> "$YACY_CONFIG" echo "remoteProxyPort=$YACY_WGET_PROXY_PORT" >> "$YACY_CONFIG" echo "remoteProxyUse=true" >> $YACY_CONFIG fi #----------------------------- # spezielle Anpassungen # TODO bei temporärer Testinstallation #if [ "$YACY_INSTALL_TYPE" == "1" ] ; then #RAMDOM_HASH_PEER=magicFormel #echo "storagePeerHash=$RAMDOM_HASH_PEER" >> $YACY_CONFIG #evt.: echo "DHT-Verteilung aufdrehen" >> $YACY_CONFIG #fi # wenn als principal laufen soll, experimental! if [ "$YACY_HOSTNAME" != "" ] ; then mkdir -p "$YACY_DATA_DIR/HTDOCS/www" touch "$YACY_DATA_DIR/HTDOCS/www/seed.txt" echo "seedUploadMethod=file" >> "$YACY_CONFIG" echo "seedFilePath=$YACY_DATA_DIR/HTDOCS/www/seed.txt" >> "$YACY_CONFIG" echo "seedURL=http://$YACY_HOSTNAME:$YACY_PORT/www/seed.txt" >> "$YACY_CONFIG" fi } function start_yacy() { if kdialog --title "YaCy-Live-Installer" --yesno "YaCy ist fertig installiert.\nYaCy jetzt starten?" ; then echo '* starting YaCy' ./startYACY.sh &> /dev/null kdialog --msgbox "YaCy wurde gestartet, und Sie können es nun unter http://localhost:$YACY_PORT erreichen." echo "* Ready, please wait some seconds and open your" echo "* browser on http://localhost:$YACY_PORT/" echo echo "* To stop YaCy go to http://localhost:$YACY_PORT/status.html," echo "* login and shutdown with the button." echo echo "* To start YaCy again (without a reboot) call startYACY.sh" echo "* in the YaCy-directory, do not use this script again." else echo "* Your Admin-Account is "$YACY_USER:$YACY_PWD echo echo "* To start YaCy call startYACY.sh in the YaCy-Directory." echo "* in the YaCy-directory, do not use this script again." fi } check_first welcome check_java request_install_type request_directory request_wget_proxy request_libx request_peername request_peeruser request_peerpwd request_advanced request_install prepare_directory download_listing download_files unpack_files configure_yacy start_yacy
Knoppix booten, unter X eine Console öffnen und (als User Knoppix) das Script ausführen. Das Script nicht direkt in die Konsole kopieren, sondern als Script abspeichern und aufrufen.
ToDo
- Funktion für das Eintragen der storagePeerHash-Peers einbauen, aktuelle Liste am besten downloaden lassen
- sinnvolle Parameter für httpProxy.conf abhängig von der gewünschten Installation finden und eintragen (Funktion configure_yacy)
- Installation in eine Partition einbauen und testen (Funktion request_directory)
- experimentelle Principalfunktionalität testen
- optional Wallpaper dynamische YaCy-Netzwerkgrafik setzen?
- Returnwerte der Funktionen auswerten und Fehlerbehandlung (z.B. Aufräumen der Verzeichnisse) einbauen
- sinnvolle Fehlermeldungen auswerfen
- Script auf Webspace hinterlegen, optimal mit Kurz-URL
- jeweils aktuelle Version des Scriptes mit PGP/GnuPG signieren (Wichtig!)
- Diskussionsseite beachten
hilfreiche Links für Weiterentwicklung
- Beispiele kdialog: http://developer.kde.org/documentation/tutorials/kdialog-german/x85.html