Git- och hemserver med Raspberry Pi

Berätta om dina pågående projekt.
Användarvisningsbild
squiz3r
Inlägg: 5424
Blev medlem: 5 september 2006, 20:06:22
Ort: Lund
Kontakt:

Git- och hemserver med Raspberry Pi

Inlägg av squiz3r »

Att Git är ett otroligt smidigt verktyg när man utvecklar kod vet nog många här. Github finns och fungerar bra, men ibland kan man önska att ha sin egen privata server. Med en Raspberry Pi liggandes är det lätt gjort att ställa upp en ny Git-server. Nätverksanslutna hårddiskar är ju också trevligt.

Projekt mål:

* Gitserver för versionshantering av mina egna projekt på mina datorer oavsett var jag befinner mig.

* Nätverksansluten lagring som jag kan komma åt via internet för att avlasta den kanske snålt tilltagna SSD'n i laptoppen.

* Automatisk backup och syncning av bilder osv på telefonen när den är ansluten via WiFi där hemma.

* Hemautomation övervakning osv...

Hårdvarubiten:

Hårdvaran som behövs är inte mycket, en Raspberry Pi (jag kör med min gamla version 1, det är inte så tunga program som används), ett minneskort till operativsystemet och en USB-ansluten hårddisk.

Raspberry Pi 1 har problem med att strömförsörja USB tillbehör och en hårddisk är ju inte direkt snål. Kopplingsschemat för hela raspberryn finns HÄR. Första försöket var en fullösning, helt enkelt brygga F1, en 1,1A polyfuse som sitter på ingången till matningsspänningen. Detta löste inte problemet. Troligtvis är det alltså tunna ledningsbanor bort till USB kontakterna som skapar ett för stort spänningsfall. Nästa försök var att löda på en matningskabel direkt på USB-porten som hårddisken kopplades i. Detta fungerade toppen. Värt att kolla upp också vilken adapter man använder för 5V, körde på en kinesisk först som skulle klara av 2A men det räckte inte. Nu kör jag på en Asus 2A adapter istället. Verkar vara stabilt efter 1 dag drift utan omstarter.

Väldigt dålig bild tyvärr, men det är allt jag har. Strömmatningskabel är den vita till vänster.
P_20161008_190115.jpg
Ett annat alternativ är kanske att köpa en USB-kabel för extra strömmatning till externa hårddiskar på Kjell, borde fungera bra också. Artikelnummer 38016.
usb.jpeg
Istället för ett IKEA-bord fullt med kabelhärvor köpte jag mig ett gammalt pottskåp som efter lite inoljning såg rätt trevligt ut. Det nedre skåpet passade perfekt till router, grenkabel och Raspberryn med sin lilla HDD.
P_20161008_191411.jpg
Mjukvara:

Steg 1 är att få hårddisken redo för bruk. Jag formaterade min disk som en enda 1TB partition i NTFS. Anledningen till NTFS är kompatibilitet med Windowsdatorer ifall jag skulle få för mig att röra vid en sådan någon gång. För att Pi'en skall klara av detta får man installera ntfs-3g. Sen är det bara att skapa ett directory att mounta till, kolla upp UUID för hårddisken och lägga in den i /etc/fstab så att den mountar automatiskt vid uppstart. (Glöm inte köra sudo mount -a efter om du inte vill starta om Raspberryn)

Kod: Markera allt

# Mount the external harddrive automatically
UUID=4304BBD00A146EF9   /mnt/externhdd  ntfs-3g defaults        0       0

Kod: Markera allt

pi@raspberrypi:~ $ lsblk
NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda           8:0    0 931.5G  0 disk 
└─sda1        8:1    0 931.5G  0 part /mnt/externhdd
mmcblk0     179:0    0   7.4G  0 disk 
├─mmcblk0p1 179:1    0    63M  0 part /boot
└─mmcblk0p2 179:2    0   7.3G  0 part /
Att ställa upp en enkel server för Git kunde knappast vara lättare. Installera Git, skapa en egen användare för Git och en symlink från Git's hemmapp till en mapp på den externa disken. Nya projekt måste nu skapas via tex ssh, skapa bara en mapp till projektet (ofta döpt med ändelsen .git) och initiera Git med --bare argumentet. Sen är det bara att lägga in Pi som remote host på en klient dator och push'a projektet. Att skapa ett nyckelpar med ssh-keygen är ju smidigt och säkert också, så det kan ju rekommenderas.

Nästa steg är att installera resten av LAMP-stacken, dvs Apache, MySQL och PHP. Detta är ju rätt rakt fram, inte mycket att skriva om.

MySQL lägger databasen i /var/lib/mysql vilket är på minneskortet. Eftersom en databas lätt kan bli stor vill jag ha in denna på hårddisken. Detta löste jag genom att stänga av mysql daemon, kopiera över hela innehållet till en mapp på hårddisken och sen ändra datadir i /etc/mysql/my.conf filen samt att uppdatera adressen i /etc/apparmor.d/usr.sbin.mysqld. Sen är det bara att starta upp mysql igen.

Apache lägger rooten till http-servern i /var/www/html, det vill säga på minneskortet. Denna rooten vill jag inte flytta till hårddisken eftersom det skulle bli knas om hårddisken inte mountas som den skall vid en omstart. Istället gjorde jag en symlink i /var/www/html till en http-mapp på hårddisken och lade in en index.php i www-rooten:

Kod: Markera allt

<?php
$external_file = "extwww/index.php";
if (file_exists($external_file)) {
        include $external_file;
} else {
        echo "SERVER ERROR: External data drive not mounted, or no index.php file present";
}
?>
Detta gör alltså att jag får ett felmeddelande som startsida om hårddisken inte är mountad som den skall. Annars laddas min andra index.php-fil.

Forwarding av portarna för SSH, FTP och HTTP löst. Nästa steg blir att implementera en egen service för dynamisk IP-hantering.
prnt.jpg
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
danielr112
Inlägg: 8051
Blev medlem: 18 januari 2009, 00:48:24
Ort: Alvesta, Småland

Re: Git- och hemserver med Raspberry Pi

Inlägg av danielr112 »

Kan tipsa om GitLab samt Owncloud för att göra några saker enklare på det du nämnt du ska köra :)
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 45272
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Git- och hemserver med Raspberry Pi

Inlägg av TomasL »

Om du är ensam utvecklare så är nog iofs SVN bättre gissar jag.
Användarvisningsbild
squiz3r
Inlägg: 5424
Blev medlem: 5 september 2006, 20:06:22
Ort: Lund
Kontakt:

Re: Git- och hemserver med Raspberry Pi

Inlägg av squiz3r »

OwnCloud ser ju intressant ut! Syncningsklient till android är ju rätt smidigt, det blir lätt ett stort projekt annars. Verkar finnas en avknoppad konkurent också, nextCloud. Frågan är vilken som är smidigast.

Nackdelen med SVN om jag förstått det rätt är att man tappar versionshanteringen om man inte har kontakt med huvudrepot? Sitter ju ofta på olika datorer och utvecklar (laptop + stationär). Inte alltid man har kontakt med sin server.
Norberg
Inlägg: 130
Blev medlem: 13 januari 2006, 19:03:39
Kontakt:

Re: Git- och hemserver med Raspberry Pi

Inlägg av Norberg »

Är du ute efter att få upp en git server enklast så skulle jag kört med https://gogs.io/. Väldigt enkelt att sätta upp på en vanlig linux server.
Personligen så skulle jag säga att git vinner lätt mot svn oavsett om du är en eller flera utvecklare i projekten.
danielr112
Inlägg: 8051
Blev medlem: 18 januari 2009, 00:48:24
Ort: Alvesta, Småland

Re: Git- och hemserver med Raspberry Pi

Inlägg av danielr112 »

Har bara kört owncloud och gillar det. Funkar tillräkligt smidigt för mitt syfte och vi synkar våra mobiler dit.

Git alla dagar mot svn här med. Gitlab så får man bra grafisk visning av vad som gjorts och inte. Finns även tracker och annat där.
davidi
Inlägg: 577
Blev medlem: 13 oktober 2011, 16:45:38
Ort: Ekerö

Re: Git- och hemserver med Raspberry Pi

Inlägg av davidi »

squiz3r skrev:Nackdelen med SVN om jag förstått det rätt är att man tappar versionshanteringen om man inte har kontakt med huvudrepot? Sitter ju ofta på olika datorer och utvecklar (laptop + stationär). Inte alltid man har kontakt med sin server.
Ta en titt på Mercurial. Incheckningar sker alltid lokalt. Om man vill kan man synka det med ett centralt repository, men det behöver man inte bestämma redan när man skapar projektet.
Användarvisningsbild
squiz3r
Inlägg: 5424
Blev medlem: 5 september 2006, 20:06:22
Ort: Lund
Kontakt:

Re: Git- och hemserver med Raspberry Pi

Inlägg av squiz3r »

Eftersom jag oftast sitter i en terminal när jag kodar så bestämde jag mig för att jag helre kör allt via terminalen än att ha ett grafiskt UI till git. Men för det vill man ju inte behöva SSH:a in på servern såfort man vill skapa ett nytt projekt.

Steg 1 för att göra processerna smidigare var att göra min grundmapp för utvecklingen till ett git repo. Nästa steg är ett smidigt sätt att lista alla projekt/moduler som ligger på GIT-servern. Detta löser man lätt med en enkel bash fil.

list-projects

Kod: Markera allt

#!/bin/bash

IP=$(sh server-ip.sh)
ssh git@$IP 'cd workspace.git/ && find -name "?*\.git"'
Sample output:

Kod: Markera allt

daniel@debianLaptop:~/workspace$ ./list-projects 
./php/git-server.git
./php/intra-login.git
./php/other.git
./pic/temperaturelogger.git
./sandbox.git
Ett enkelt skript för att kolla om ett visst projekt finns på servern eller ej:
exists-on-server

Kod: Markera allt

#!/bin/bash
 
# Get IP of git-server
IP=$(sh server-ip.sh)
 
# Make sure that the project exist on the server
ssh git@$IP [[ -d "workspace.git/$1\.git" ]]
if [ "$?" -eq "0" ]; then
	echo yes
else
	echo no
fi 
För att ladda ned en modul/projekt till en ny dator:
load-project

Kod: Markera allt

#!/bin/bash

IP=$(sh server-ip.sh)

# Make sure the project exists on the server
Ex=$(./exists-on-server $1)
if [ "$Ex" == "yes" ]; then
	# Split the input path and create directory structure
	IFS='/' read -r -a array <<< "$1"
	l=${#array[@]}
	((l-=2))
	for i in $(seq 0 $l); do
		mkdir "${array[$i]}"
		cd "${array[$i]}"
	done

	# Clone the project
	git clone git@$IP:"workspace.git/$1.git"

	echo Clone done successfully
else
	echo Project does not exist on server \(git@$IP\)
fi
Och för att skapa ett nytt projekt på servern:
new-project

Kod: Markera allt

#!/bin/bash

IP=$(sh server-ip.sh)

# Create the file structure in the remote server
IFS='/' read -r -a array <<< "$1"
D="workspace.git"
for d in "${array[@]}"; do
	D="$D/$d"
	ssh git@$IP mkdir $D
done
# Add .git file ending to the project folder
ssh git@$IP mv $D "$D.git"
# Init a bare git repo in directory
ssh git@$IP "cd $D.git && git init --bare"
# Add folder structure and init git locally
# and push to the server 
P=$1
shift
./setup-empty-project $P $@
Och hjälpskriptet för att populera ett nyinitierat projekt
setup-empty-project

Kod: Markera allt

#!/bin/bash

# Get the path of the project
P=$1

# Get IP of git-server
IP=$(sh server-ip.sh)

# Make sure that the project exist on the server
Ex=$(./exists-on-server $P)
if [ "$Ex" == "yes" ]; then 
	# Split the input path and create directory structure
	IFS='/' read -r -a array <<< "$1"
	for d in "${array[@]}"; do
		mkdir $d
		cd $d
	done
	# Init git in folder
	git init
	# Add the remote server
	git remote add server git@"$IP:workspace.git/$1.git"
	# Add a README file
	shift
	for s in "$@"; do
		printf "%s " $s >> README.txt
	done
	git add README.txt
	# Make a commit and upload to server
	git commit -m "Project set up automatically with batch files"
	git push server master
else 
	echo No such project as $1 at specified server \(git@$IP\) 
fi
Med dessa skript kan det knappast bli lättare. Om jag är på en ny dator och vill ladda ned workspace och populera det med projektet php/git-server samt skapa ett nytt projekt php/intra-login är detta alltså det enda som behöver skrivas:

Kod: Markera allt

git clone git@192.168.0.9:workspace.git
cd workspace
./load-project php/git-server
./new-project php/intra-login "Login module for a php backend intranet"
tgr
Inlägg: 725
Blev medlem: 10 maj 2006, 09:17:07
Ort: Mölndal

Re: Git- och hemserver med Raspberry Pi

Inlägg av tgr »

Det går fint att skapa sitt gitrepo lokalt och senare lägga till ett remote orgin att pusha till.
Får väl tipsa om gitolite http://gitolite.com/gitolite/index.html då kan du via nycklar ge rättigheter till olika användare om du samarbetar i något projekt elle bara vill dela kod.
Användarvisningsbild
Repaterion
Inlägg: 538
Blev medlem: 4 februari 2011, 00:57:32
Ort: Gustavsfors (Lite till vänster om världens utkant)

Re: Git- och hemserver med Raspberry Pi

Inlägg av Repaterion »

Lite offtopic: Men har du testat att mata den bakvägen via GPIO 4,6?(4 är +5 och 6 är jord/minus)Risken med den vägen är att du inte har säkringar och liknande, men den färgglada pluppen (den syns i övre högra hörnet, för de som inte vet är det en signal och för klen strömförsörjning.) försvann för mig.
danielr112
Inlägg: 8051
Blev medlem: 18 januari 2009, 00:48:24
Ort: Alvesta, Småland

Re: Git- och hemserver med Raspberry Pi

Inlägg av danielr112 »

Jag matar mina pajer via GPIO.
Användarvisningsbild
ucadv
Inlägg: 203
Blev medlem: 29 januari 2007, 23:13:49

Re: Git- och hemserver med Raspberry Pi

Inlägg av ucadv »

5+ på gpio är kopplad till pwr usb 5+ via en induktans. så du får bara lite sämre filtrering.
Skriv svar