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