Dev:LiveCD

Aus YaCyWiki
Wechseln zu: Navigation, Suche
Warning.png Dieser Artikel ist veraltet und muss überarbeitet werden.

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