Denne delen vil beskrive hvordan du setter opp, administrerer og sikrer en git server. Git har mange alternativer tilgjengelig. For mer detaljert dokumentasjon se https://git-scm.com/book/en/v2.
Følgende instruksjoner vil installere en git server. Det vil bli satt opp til å bruke OpenSSH som sikker ekstern tilgangsmetode.
Konfigurasjon av serveren består av følgende trinn:
Du må være bruker root
for den
første delen av konfigurasjonen. Opprett git
bruker og gruppe og sett en ubrukelig
passordhash med følgende kommandoer:
groupadd -g 58 git && useradd -c "git Owner" -d /home/git -m -g git -s /usr/bin/git-shell -u 58 git && sed -i '/^git:/s/^git:[^:]:/git:NP:/' /etc/shadow
Sett inn en ubrukelig passordhash (erstatter !
med NP
) låser opp
kontoen, men den kan ikke brukes for å logge på via
passordautentisering. Det kreves av sshd for å fungere skikkelig. Deretter
oppretter du noen filer og mapper i hjemmemappen til git brukeren
som gir tilgang til git depotet ved å bruke ssh nøkler.
install -o git -g git -dm0700 /home/git/.ssh && install -o git -g git -m0600 /dev/null /home/git/.ssh/authorized_keys
For enhver utvikler som bør ha tilgang til depotet legg til
hans/hennes offentlige ssh nøkkel til /home/git/.ssh/authorized_keys
. Først må du
legge til noen alternativer for å hindre brukere fra å bruke
tilkobling til git for portvideresending til andre maskiner som
git serveren kan nå.
echo -n "no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty " >> /home/git/.ssh/authorized_keys && cat <user-ssh-key> >> /home/git/.ssh/authorized_keys
Det er også nyttig å angi standardnavnet til den første grenen av
nye depoter ved å endre git konfigurasjonen. Som root
bruker, kjør:
git config --system init.defaultBranch trunk
Legg til slutt til /usr/bin/git-shell
inngang til /etc/shells
konfigurasjonsfil. Dette skallet
har blitt satt i git
brukerprofil
og sørger for at kun git relaterte handlinger kan utføres:
echo "/usr/bin/git-shell" >> /etc/shells
Depotet kan være hvor som helst på filsystemet. Det er viktig at
git brukeren har lese-/skrivetilgang til den plasseringen. Vi
bruker /srv/git
som basismappe. Lag
et nytt git depot med følgende
kommandoer (som root
bruker):
I alle instruksjonene nedenfor bruker vi project1 som et eksempel på depotnavn. Du bør navngi depotet ditt som et kort beskrivende navn for ditt spesifikke prosjekt.
install -o git -g git -m755 -d /srv/git/project1.git && cd /srv/git/project1.git && git init --bare && chown -R git:git .
Alle instruksjonene i denne delen og den neste bør gjøres på et brukersystem, ikke på serversystemet.
Nå som depotet er opprettet, kan det brukes av utviklere til å
legge inn noen filer i den. Når ssh nøkkelen til brukeren er
importert til git sin authorized_keys
fil, kan brukeren samhandle med
depotet.
En minimal konfigurasjon bør være tilgjengelig på utviklerens system som spesifiserer brukernavnet og e-postadressen. Lag denne minimale konfigurasjonsfilen på klientsiden:
cat > ~/.gitconfig <<EOF [user] name = <users-name> email = <users-email-address> EOF
På utviklerens maskin, sett opp noen filer som skal skyves til depotet som det første innholdet:
gitserver begrepet som brukes nedenfor skal være vertsnavnet (eller ip adressen) til git serveren.
mkdir myproject cd myproject git init --initial-branch=trunk git remote add origin git@gitserver:/srv/git/project1.git cat >README <<EOF This is the README file EOF git add README git commit -m 'Initial creation of README' git push --set-upstream origin trunk
Det første innholdet blir nå sendt til serveren og er
tilgjengelig for andre brukere. På den gjeldende maskinen er
argumentet --set-upstream origin
trunk
er ikke lenger nødvendig siden det lokale depotet er
koblet til det eksterne depotet. Påfølgende dytt kan utføres som
git push
Andre utviklere kan nå klone depotet og gjøre endringer i innholdet (så lenge ssh nøklene deres har blitt installert):
git clone git@gitserver:/srv/git/project1.git cd project1 vi README git commit -am 'Fix for README file' git push
Dette er et veldig grunnleggende serveroppsett basert på
OpenSSH adgang. Alle utviklere
bruker git
brukeren for å
utføre handlinger på depotet og endringene brukere foretar kan
skilles ut som det lokale brukernavnet (se ~/.gitconfig
) er registrert i endringssett.
Tilgangen er begrenset av de offentlige nøklene som er lagt til
git sin authorized_keys
filen og
det er ingen mulighet for publikum til å eksportere/klone
depotet. For å aktiver dette, fortsett med trinn 4 for å sette
opp git serveren for offentlig lesetilgang.
I URLen som brukes til å klone prosjektet, den absolutte banen
(her /srv/git/project1.git
) må
spesifiseres da depotet ikke er i git sin hjemmemappe, men i
/srv/git
. For å bli kvitt
eksponeringen som avslører strukturen til serverinstallasjonen,
en symbolkobling kan legges til i git sin hjemmemappe for hvert
prosjekt som dette:
ln -svf /srv/git/project1.git /home/git/
Nå kan depotet klones ved bruk av
git clone git@gitserver:project1.git
Oppsettet beskrevet ovenfor gjør et depot tilgjengelig for autentiserte brukere (med å gi den offentlige ssh nøkkelfilen). Det er også en enkel måte å publisere depotet til uautentiserte brukere — selvfølgelig uten skriveadgang.
Kombinasjonen av tilgang via ssh (for autentiserte brukere) og eksport av arkiver til uautentiserte brukere via nissen er i de fleste tilfeller nok for en utviklingsside.
Nissen vil være tilgjengelig på port 9418
som standard. Sørg for at
brannmuroppsettet tillater tilgang til denne porten.
For å starte serveren ved oppstart, installer git-daemon oppstartskriptet inkludert i blfs-bootscripts-20240913 pakken:
make install-git-daemon
For å tillate git å eksportere
et depot, en fil som heter git-daemon-export-ok
kreves i hver depotmappe
på serveren. Filen trenger ikke noe innhold, bare dens eksistens
muliggjør, dens fravær deaktiverer eksporten av det depotet.
touch /srv/git/project1.git/git-daemon-export-ok
Skriptet for å starte git nissen bruker noen standardverdier
internt. Det viktigste er veien til depotmappen som er satt til
/srv/git
. I tilfelle du av en eller
annen grunn har opprettet depotet i en annen plassering, må du
fortelle oppstartsskriptet hvor depot er å finne. Dette kan
oppnås ved å lage en konfigurasjonsfilen navngitt /etc/sysconfig/git-daemon
. Denne
konfigurasjonsfilen vil bli importert hvis den eksisterer, noe
som betyr at den er det valgfri. Filen kan se ut som:
# Begin /etc/sysconfig/git-daemon # Specify the location of the git repository GIT_BASE_DIR="/srv/git/" # Directories added to whitelist DFT_REPO_DIR="$GIT_BASE_DIR" # Add extra options which will appended to the 'git daemon' # command executed in the boot script GIT_DAEMON_OPTS="" # End /etc/sysconfig/git-daemon
Det er bare tre alternativer å angi i konfigurasjonsfilen:
GIT_BASE_DIR=<dirname>
Spesifiser plasseringen av git depoene. Relative stier som brukes når du får tilgang til nissen vil oversettes i forhold til denne mappen.
DFT_REPO_DIR=<dirname>
Denne mappen er lagt til den hvite listen over tillatte
mapper. Denne variabelen kan inneholde flere mappenavn, men
er vanligvis satt lik GIT_BASE_DIR
.
GIT_DAEMON_OPTS=<options>
I tilfelle spesielle alternativer til git daemon kommandoen er
nødvendig, må de spesifiseres i denne innstillingen. Et
eksempel kan være å justere portnummeret som nissen lytter
på. I dette tilfellet, legg til --port=<port number>
til denne
variabelen. For mer informasjon om hvilke alternativer som
kan angis, ta en titt på utdataene til git daemon --help.
Etter å ha startet nissen, kan uautentiserte brukere klone eksporterte depoer ved å bruke
git clone git://gitserver/project1.git
Som basismappen er /srv/git
standard (eller satt til en egendefinert verdi i
konfigurasjonen), git tolker den
innkommende banen (/project1.git) i forhold til den basismappen
slik at depotet i /srv/git/project1.git
er servert.