This is an old revision of the document!


Laborator 12 - Servicii pentru dezvoltatori

1. Operații de bază Git. Git peste SSH (2p)

  • Comenzi/concepte/fișiere
    • git config
    • git init
    • git add
    • git commit
    • git push
    • git clone
    • git remote

Tutorial

  • N/A

Exerciții

  • [01]. Pe mașina virtuală și pe mașina fizică instalați sistemul de versionare git. (Hint: curs, slide 6)
Rezolvare
root@heimdall:~# apt-get update; apt-get install git

root@mjolnir:~# apt-get update; apt-get install git
Rezolvare
student@heimdall:~$ git config --global user.name "Student GSR"

student@heimdall:~$ git config --global user.email student@gsr.cs.pub.ro

student@mjolnir:~$ git config --global user.name "Student GSR"

student@mjolnir:~$ git config --global user.email student@gsr.cs.pub.ro
  • [03]. Pe mașina virtuală creați un repository git gol în student}, numit ancient.repository.git. Folosiți pentru creare utilizatorul student}. (Hint: curs, slide 8)
Rezolvare
student@heimdall:~$ mkdir ancient.repository.git

student@heimdall:~$ cd ancient.repository.git

student@heimdall:~/ancient.repository.git$ git init --bare
Initialized empty Git repository in /home/student/ancient.repository.git/

student@heimdall:~/ancient.repository.git$ ls -l
total 32
drwxr-xr-x 2 student student 4096 Jan 19 14:52 branches
-rw-r--r-- 1 student student   66 Jan 19 14:52 config
-rw-r--r-- 1 student student   73 Jan 19 14:52 description
-rw-r--r-- 1 student student   23 Jan 19 14:52 HEAD
drwxr-xr-x 2 student student 4096 Jan 19 14:52 hooks
drwxr-xr-x 2 student student 4096 Jan 19 14:52 info
drwxr-xr-x 4 student student 4096 Jan 19 14:52 objects
drwxr-xr-x 4 student student 4096 Jan 19 14:52 refs
  • [04]. Folosind utilizatorul student} de pe mașina virtuală populați repository-ul creat anterior adaugând în el un fișier numit planets.txt} ce conține liniile
    P3R-272
    P3X-439
  • [04].a. Hint: curs, slide 8
  • [04].b. Hint: Folosiți pentru mesajul asociat commit-ului “initial commit”
  • [04].c. Hint: Folosiți ca adresă pentru origin ancient.repository.git}
Rezolvare
student@heimdall:~$ mkdir local.ancient.repository.git

student@heimdall:~$ cd local.ancient.repository.git

student@heimdall:~/local.ancient.repository.git$ git init .
Initialized empty Git repository in /home/student/local.ancient.repository.git/.git/

student@heimdall:~/local.ancient.repository.git$ echo -e "P3R-272\nP3X-439" > planets.txt

student@heimdall:~/local.ancient.repository.git$ git add planets.txt

student@heimdall:~/local.ancient.repository.git$ git commit -m "initial commit"
[master (root-commit) 58fdb7b] initial commit
 1 files changed, 2 insertions(+), 0 deletions(-)
 create mode 100644 planets.txt

student@heimdall:~/local.ancient.repository.git$ git remote add origin /home/student/ancient.repository.git

student@heimdall:~/local.ancient.repository.git$ git push origin master
Counting objects: 3, done.
Writing objects: 100% (3/3), 235 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
To /home/student/ancient.repository.git
  * [new branch]      master -> master
  • [05]. Pe mașina fizică adaugați utilizatorul jack și configurați global git astfel încât commit-urile utilizatorului jack să poata fi semnate cu numele “Jack” și cu adresa de email jack@gsr.cs.pub.ro.
Rezolvare
root@mjolnir:~# groupadd jack

root@mjolnir:~# useradd -d /home/jack -m -g jack -s /bin/bash jack

root@mjolnir:~# echo "jack:student" | chpasswd

jack@mjolnir:~$ git config --global user.name "Jack"

jack@mjolnir:~$ git config --global user.email jack@gsr.cs.pub.ro
  • [06]. Pe mașina fizică, în contul utilizatorului jack, creați o clonă repository-ului ancient.repository.git de pe mașina virtuală.
  • [06].a. Hint: Folosiți git peste SSH
  • [06].b. Hint: Pentru git folosiți contul utilizatorului student de pe mașina virtuală
  • [06].c. Hint: git_clone}
Rezolvare
jack@mjolnir:~$ git clone student@heimdall.local:ancient.repository.git
Cloning into 'ancient.repository'...
student@heimdall.local's password: 
remote: Counting objects: 3, done.
Receiving objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 0 (delta 0)

jack@mjolnir:~$ ls -l
total 4
drwxr-xr-x 3 jack jack 4096 Jan 19 15:05 ancient.repository

jack@mjolnir:~$ cd ancient.repository/

jack@mjolnir:~/ancient.repository$ ls -l
total 4
-rw-r--r-- 1 jack jack 16 Jan 19 15:05 planets.txt
  • [07]. Pe mașina fizică, în clona repository-ului adaugată anterior, creați un nou fișier numit people.txt} cu următorul conținut
    Jack O'Neill

    Comiteți fișierul nou creat în repository.

  • [07].a. Adaugați fișierul folosind git_add}
  • [07].b. Comiteți fișierul folosind git_commit}. Specificați la commit descrierea “Adds people.txt”.
  • [07].c. Trimiteți modificările pe server folosind git_push}
Rezolvare
jack@mjolnir:~/ancient.repository$ ls -l
total 4
-rw-r--r-- 1 jack jack 16 Jan 19 15:05 planets.txt

jack@mjolnir:~/ancient.repository$ echo "Jack O\'Neill" > people.txt

jack@mjolnir:~/ancient.repository$ ls -l
total 8
-rw-r--r-- 1 jack jack 14 Jan 19 15:07 people.txt
-rw-r--r-- 1 jack jack 16 Jan 19 15:05 planets.txt

jack@mjolnir:~/ancient.repository$ git add people.txt

jack@mjolnir:~/ancient.repository$ git commit -m "Adds people.txt"
[master ba2bb52] Adds people.txt
 1 files changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 people.txt

jack@mjolnir:~/ancient.repository$ git push
student@heimdall.local's password: 
Counting objects: 4, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 288 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
To student@heimdall.local:ancient.repository.git
   58fdb7b..ba2bb52  master -> master

2. Git-daemon (2p)

  • Comenzi/concepte/fișiere
    • N/A

Tutorial

  • N/A

Exerciții

  • [01]. Pe mașina virtuală instalați daemonul de git (Hint: curs, slide 10)
Rezolvare
root@heimdall:~# apt-get install git-daemon-run
  • [02]. Pe mașina virtuală aflați portul pe care ascultă daemonul de git.
Rezolvare
root@heimdall:~# netstat -lntp | grep git
tcp        0      0 0.0.0.0:9418            0.0.0.0:*               LISTEN      3039/git-daemon 
tcp6       0      0 :::9418                 :::*                    LISTEN      3039/git-daemon 
  • [03]. Pe mașina virtuală analizați fișierul de configurare al git-daemon. Care este directorul implicit în care se găsesc repository-urile cu care lucrează daemonul de git ?
  • [03].a. Hint: Curs, slide 10
  • [03].b. Hint: man_git-daemon}
Rezolvare
root@heimdall:~# cat /etc/sv/git-daemon/run 
#!/bin/sh
exec 2>&1
echo 'git-daemon starting.'
exec chpst -ugitdaemon \
  "$(git --exec-path)"/git-daemon --verbose --reuseaddr \
    --base-path=/var/cache /var/cache/git
Rezolvare
root@heimdall:/var/cache/git# ln -s /home/student/ancient.repository.git ancient.repository.git

root@heimdall:/var/cache/git# ls -l
total 0
lrwxrwxrwx 1 root root 36 Jan 19 15:16 ancient.repository.git -> /home/student/ancient.repository.git
  • [04].b. Creați în directorul rădăcină al repository-ului fișierul gol git-daemon-export-ok}.
Rezolvare
root@heimdall:/var/cache/git# cd ancient.repo.git

root@heimdall:/var/cache/git/ancient.repo.git# touch git-daemon-export-ok
Rezolvare
student@mjolnir:~$ git clone git://heimdall.local/git/ancient.repository.git
Cloning into 'ancient.repository'...
remote: Counting objects: 6, done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 6 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (6/6), done.

3. Git peste HTTP (2p)

  • Comenzi/concepte/fișiere
    • N/A

Tutorial

  • N/A

Exerciții

  • [01]. Pe mașina virtuală instalați serverul apache2.
Rezolvare
root@heimdall:~# apt-get update; apt-get install apache2
  • [02]. Pe mașina virtuală în site-ul default apache realizați un alias care să mapeze git} pe git}.
  • [02].a. Hint: curs, slide 11, 12, 13
  • [02].a. Hint: Aveți grijă la drepturile de acces asupra directorului, specificate în apache.
Rezolvare
root@heimdall:/etc/apache2/sites-available# cat default | tail -n 9
    Alias /git "/var/cache/git/"
    <Directory "/var/cache/git/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order deny,allow
        Allow from all
    </Directory>

</VirtualHost>

root@heimdall:/etc/apache2/sites-available# /etc/init.d/apache2 restart
Restarting web server: apache2 ... waiting .
  • [03]. Pe mașina virtuală activați hook-ul git update-server-info}.
  • [03].a Hint: curs, slide 11
  • [03].b Hint: Citiți fișierul post-update.sample} din repository
  • [03].c Hint: Faceți un commit în repository pentru a rula hook-ul activat anterior. Puteți folosi copia repository-ului din contul utilizatorului jack.
Rezolvare
root@heimdall:/var/cache/git/ancient.repository.git# cp hooks/post-update.sample  hooks/post-update

jack@mjolnir:~/ancient.repository$ vim people.txt

jack@mjolnir:~/ancient.repository$ git add people.txt

jack@mjolnir:~/ancient.repository$ git commit -sm "Updated people.txt"
[master 79c07be] Updated people.txt
 1 files changed, 1 insertions(+), 1 deletions(-)

jack@mjolnir:~/ancient.repository$ git push
student@heimdall.local's password: 
Counting objects: 5, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 309 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
To student@heimdall.local:ancient.repository.git
   ba2bb52..79c07be  master -> master
  • [04]. Pe mașina fizică în home-ul utilizatorului jack creați un director cu numele http-repo}. În acest director realizați o clona read-only a repository-ului ancient.repositoty} folosind git peste HTTP. (Hint: curs, slide 11)
Rezolvare
jack@mjolnir:~$ mkdir http-repo

jack@mjolnir:~$ cd http-repo/

jack@mjolnir:~/http-repo$ git clone http://heimdall.local/git/ancient.repository.git
Cloning into 'ancient.repository'...

jack@mjolnir:~/http-repo$ ls -l
total 4
drwxr-xr-x 3 jack jack 4096 Jan 19 15:51 ancient.repository

jack@mjolnir:~/http-repo$ cd ancient.repository/

jack@mjolnir:~/http-repo/ancient.repository$ ls -l
total 8
-rw-r--r-- 1 jack jack 13 Jan 19 15:51 people.txt
-rw-r--r-- 1 jack jack 16 Jan 19 15:51 planets.txt
  • [05]. Pe mașina virtuală creați un nou repository, cu numele atlantis.git}, în git}.
  • [05].a. Activati hook-ul git update-server-info}.
  • [05].b. Realizați un prim commit în acest repository adaugând fișierul info.txt} cu conținutul “Atlantis database”.
  • [05].c. Schimbați recursiv userul și grupul care dețin atlantis.git} în www-data}
Rezolvare
root@heimdall:/var/cache/git# mkdir atlantis.git

root@heimdall:/var/cache/git# cd atlantis.git

root@heimdall:/var/cache/git/atlantis.git# git init --bare
Initialized empty Git repository in /var/cache/git/atlantis.git/

root@heimdall:/var/cache/git/atlantis.git# cd hooks

root@heimdall:/var/cache/git/atlantis.git/hooks# ls -l
total 36
-rwxr-xr-x 1 root root  452 Jan 19 15:53 applypatch-msg.sample
-rwxr-xr-x 1 root root  896 Jan 19 15:53 commit-msg.sample
-rwxr-xr-x 1 root root  189 Jan 19 15:53 post-update.sample
-rwxr-xr-x 1 root root  398 Jan 19 15:53 pre-applypatch.sample
-rwxr-xr-x 1 root root 1704 Jan 19 15:53 pre-commit.sample
-rwxr-xr-x 1 root root 1239 Jan 19 15:53 prepare-commit-msg.sample
-rwxr-xr-x 1 root root 4971 Jan 19 15:53 pre-rebase.sample
-rwxr-xr-x 1 root root 3611 Jan 19 15:53 update.sample

root@heimdall:/var/cache/git/atlantis.git/hooks# cp post-update.sample post-update

root@heimdall:/var/cache/git/atlantis.git/hooks# cd ..

root@heimdall:/var/cache/git/atlantis.git# cd 

root@heimdall:~# mkdir local.atlantis.git

root@heimdall:~# git init .
Initialized empty Git repository in /root/.git/

root@heimdall:~# echo "Atlantis database" > info.txt

root@heimdall:~# git add info.txt

root@heimdall:~# git commit -m "initial commit"
[master (root-commit) 83325cd] initial commit
 Committer: root <root@heimdall.localdomain>
Your name and email address were configured automatically based
on your username and hostname. Please check that they are accurate.
You can suppress this message by setting them explicitly:

    git config --global user.name "Your Name"
    git config --global user.email you@example.com

After doing this, you may fix the identity used for this commit with:

    git commit --amend --reset-author

 1 files changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 info.txt

root@heimdall:~# git remote add origin /var/cache/git/atlantis.git

root@heimdall:~# git push origin master
Counting objects: 3, done.
Writing objects: 100% (3/3), 226 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
To /var/cache/git/atlantis.git
  * [new branch]      master -> master

root@heimdall:~# cd /var/cache/git/

root@heimdall:/var/cache/git# chown -R www-data:www-data atlantis.git
  • [06]. Pe mașina virtuală activați modulul apache dav_fs}.
Rezolvare
root@heimdall:~# a2enmod dav_fs
Considering dependency dav for dav_fs:
Enabling module dav.
Enabling module dav_fs.
To activate the new configuration, you need to run:
  service apache2 restart

root@heimdall:~# /etc/init.d/apache2 restart
Restarting web server: apache2 ... waiting .
  • [07]. Pe mașina virtuală creați fișierul git.passwd} ce conține utilizatori și parole în formatul htpasswd}. Adăugați în acest fișier utilizatorul jack} cu parola impudence}
Rezolvare
root@heimdall:~# htpasswd -c /etc/apache2/git.passwd jack
New password: 
Re-type new password: 
Adding password for user jack
  • [08]. Pe mașina virtuală configurați apache astfel încât să puteți realiza commit-uri peste HTTP în repository-urile din git} (Hint: curs, slide 12,13)
Rezolvare
root@heimdall:/etc/apache2/sites-available# cat default | tail -n 14
    Alias /git "/var/cache/git/"
    <Directory "/var/cache/git/">
        DAV on
        AuthType Basic
        AuthName "Git"
        AuthUserFile /etc/apache2/git.passwd
        <LimitExcept GET HEAD PROPFIND OPTIONS REPORT>
                Require valid-user
        </LimitExcept>
        Order deny,allow
        Allow from all
    </Directory>

</VirtualHost>

root@heimdall:/etc/apache2/sites-available# /etc/init.d/apache2 restart
Restarting web server: apache2 ... waiting .
  • [09]. Pe mașina fizică, în contul utilizatorului student, realizați o clonă read-write a repository-ului atlantis.git. Folosiți git peste HTTP și specificați ca user jack}
  • [09].a. Hint: path}
Rezolvare
student@mjolnir:~$ git clone http://jack@heimdall.local/git/atlantis.git
Cloning into 'atlantis'...
  • [10]. Realizati un commit și un push în clona creată la punctul anterior.
Rezolvare
student@mjolnir:~$ cd atlantis/

student@mjolnir:~/atlantis$ ls -l
total 4
-rw-r--r-- 1 student student 18 Jan 19 16:01 info.txt

student@mjolnir:~/atlantis$ vim info.txt 

student@mjolnir:~/atlantis$ git add info.txt

student@mjolnir:~/atlantis$ git commit -sm "Modifies info.txt"
[master e2ff48a] Modifies info.txt
 1 files changed, 1 insertions(+), 1 deletions(-)

student@mjolnir:~/atlantis$ git push
Password for 'heimdall.local': 
Fetching remote heads...
  refs/
  refs/tags/
  refs/heads/
updating 'refs/heads/master'
  from 83325cd5676c96c0ed6ecae35a8af83652d25334
  to   e2ff48af5f676f69277a051077c7e4724929c7f1
    sending 3 objects
    done
Updating remote server info
To http://jack@heimdall.local/git/atlantis.git
   83325cd..e2ff48a  master -> master

4. GitWeb (1p)

  • Comenzi/concepte/fișiere
    • gitweb
    • /etc/gitweb.conf

Tutorial

  • Instalați pachetul corespunzător GitWeb pe mașina virtuală.
root@heimdall:~# apt-get install gitweb
root@heimdall:~# vim /etc/gitweb.conf 

root@heimdall:~# vim /etc/apache2/conf.d/gitweb 
  • Accesați într-un browser URL-ul gitweb}.

Exerciții

  • [01]. Pentru cele două repository-uri disponibile prin GitWeb configurați:
    • ca descrieri: “Ancient database repository” și “Atlantis database repository”
    • ca posesori: “The Ancients”
    • verificați rezultatele la adresa gitweb}
  • [01].a. Hint: Curs, slide 21
  • [01].b. Hint: description}
  • [01].c. Hint: config}
Rezolvare
root@heimdall:/var/cache/git# cat atlantis.git/description 
Unnamed repository; edit this file 'description' to name the repository.

root@heimdall:/var/cache/git# vim atlantis.git/description 

root@heimdall:/var/cache/git# cat atlantis.git/description
Atlantis database repository

root@heimdall:/var/cache/git# cat ancient.repository.git/description 
Unnamed repository; edit this file 'description' to name the repository.

root@heimdall:/var/cache/git# vim ancient.repository.git/description 

root@heimdall:/var/cache/git# cat ancient.repository.git/description 
Ancient database repository




root@heimdall:/var/cache/git# cat atlantis.git/config 
[core]
	repositoryformatversion = 0
	filemode = true
	bare = true

root@heimdall:/var/cache/git# vim atlantis.git/config 

root@heimdall:/var/cache/git# cat atlantis.git/config
[core]
	repositoryformatversion = 0
	filemode = true
	bare = true
[gitweb]
	owner = The Ancients

root@heimdall:/var/cache/git# cat ancient.repository.git/config 
[core]
	repositoryformatversion = 0
	filemode = true
	bare = true

root@heimdall:/var/cache/git# vim ancient.repository.git/config 

root@heimdall:/var/cache/git# cat ancient.repository.git/config 
[core]
	repositoryformatversion = 0
	filemode = true
	bare = true
[gitweb]
	owner = The Ancients
Rezolvare
root@heimdall:~# tail -n 1 /etc/gitweb.conf
@git_base_url_list = qw(git://heimdall.local/git http://heimdall.local/git);

5. Gitolite (2p)

  • Comenzi/concepte/fișiere
    • gitolite
    • SSH custom commands
    • gitolite.conf

Tutorial

  • N/A

Exerciții

  • [01]. Verificați dacă pe sistemul fizic este deja generată în contul utilizatorului student} o pereche de chei SSH. Dacă nu sunt generate, generați-le fără a utiliza un passphrase.
  • [01].a. Hint: ssh-keygen_-t_rsa}
Rezolvare
student@mjolnir:~/.ssh$ ls -l
total 16
-rw-r--r-- 1 student student  397 Oct 12 15:55 authorized_keys
-rw------- 1 student student 1675 Oct 12 15:55 id_rsa
-rw-r--r-- 1 student student  397 Oct 12 15:55 id_rsa.pub
-rw-r--r-- 1 student student  444 Jan 19 14:44 known_hosts
  • [02]. Copiați cheia publică de la exercițiul anterior pe mașina virtuală, în student-mjolnir.pub}.
Rezolvare
student@mjolnir:~/.ssh$ scp id_rsa.pub student@heimdall.local:student-mjolnir.pub
id_rsa.pub                                    100%  397     0.4KB/s   00:00 
  • [03]. Pe mașina virtuală instalați pachetul gitolite}. După instalare reconfigurați pachetul pentru a activa un asistent de configurare și specificați în cadrul acestuia:
    • utilizatorul de sistem să se numească (gitolite});
    • directorul implicit al repository-urilor (gitolite});
    • calea către cheia publică SSH copiată anterior (student-mjolnir.pub}).
  • [03].a. Hint: dpkg-reconfigure}
Rezolvare
root@heimdall:~# apt-get install gitolite

root@heimdall:~# dpkg-reconfigure gitolite
  • [04]. Pe mașina virtuală, autentificați ca root}, schimbați utilizatorul curent în gitolite}. (Hint: su_-_gitolite}).
    • Analizați continutul directorului home al utilizatorului gitolite}.
    • Analizați conținutul fișierului authorized_keys}.
    • Analizați conținutul fișierului gitolite.rc}.
Rezolvare
root@heimdall:~# su - gitolite

gitolite@heimdall:~$ pwd
/var/lib/gitolite

gitolite@heimdall:~$ ls -l
total 4
-rw------- 1 gitolite gitolite    0 Jan 19 16:22 projects.list
drwx------ 4 gitolite gitolite 4096 Jan 19 16:22 repositories

gitolite@heimdall:~$ ls -la
total 28
drwxr-xr-x  5 gitolite gitolite 4096 Jan 19 16:22 .
drwxr-xr-x 37 root     root     4096 Jan 19 16:22 ..
drwx------  8 gitolite gitolite 4096 Jan 19 16:22 .gitolite
-rw-r--r--  1 gitolite gitolite 4217 Jan 19 16:22 .gitolite.rc
-rw-------  1 gitolite gitolite    0 Jan 19 16:22 projects.list
drwx------  4 gitolite gitolite 4096 Jan 19 16:22 repositories
drwx------  2 gitolite gitolite 4096 Jan 19 16:22 .ssh

gitolite@heimdall:~$ cat .ssh/authorized_keys 
# gitolite start
command="/usr/share/gitolite/gl-auth-command admin",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDILwQ5ohvvX5C3NcPS2JyheICl/664yjUOBh5oOrJtkI9UqwXGxVHJi0uSXvrIpHRkfPRRGv52PtkGPkvLLQhcbLKM/YgTMBxA7yUaEr2nF1zmXH+GempgeRb3T1P4T+Ele04mOi0KvOPDKuZ523p6xdH9O90NaHAauWAbF0mAHBYYIkRHD8dVMVd26Z8yzdNF9OPqVEIDRNRYYVIclK81mreG7k+x8027iIJRnSAdoLVEUn2huvzBHkAm4beMqG59HFb9ecEnA1In1wfMjmYPaTgsORojnYJzOoJeCV27bVSrkdKMuDNCQ7t4qj+pqKqmlW3jGK/TkxBvXQAHQmkx student@mjolnir
# gitolite end

gitolite@heimdall:~$ cat .gitolite.rc 
[...]
  • [05]. Pe sistemul fizic, în contul utilizatorului student} clonați repository-ul de administrare gitolite folosind comanda gitolite-admin}.
  • [05].a. Urmăriți conținutul repository-ului clonat.
Rezolvare
student@mjolnir:~$ git clone gitolite@heimdall.local:gitolite-admin
Cloning into 'gitolite-admin'...
remote: Counting objects: 6, done.
remote: Compressing objects: 100% (4/4), done.
Receiving objects: 100% (6/6), 718 bytes, done.
remote: Total 6 (delta 0), reused 0 (delta 0)

student@mjolnir:~$ cd gitolite-admin/

student@mjolnir:~/gitolite-admin$ ls -l
total 8
drwxr-xr-x 2 student student 4096 Jan 19 16:24 conf
drwxr-xr-x 2 student student 4096 Jan 19 16:24 keydir
  • [06]. Pe sistemul fizic creați utilizatorii dexter} și deedee}. Pentru fiecare utilizator generați o pereche de chei SSH și configurați global git astfel încât commit-urile utilizatorilor să poata fi semnate cu un nume și o adresă de email la alegere.
Rezolvare
root@mjolnir:~# groupadd dexter

root@mjolnir:~# useradd -d /home/dexter -m -g dexter -s /bin/bash dexter

root@mjolnir:~# echo "dexter:student" | chpasswd

root@mjolnir:~# groupadd deedee

root@mjolnir:~# useradd -d /home/deedee -m -g deedee -s /bin/bash deedee

root@mjolnir:~# echo "deedee:student" | chpasswd

root@mjolnir:~# su - dexter

dexter@mjolnir:~$ ssh-keygen -t rsa
[...]

dexter@mjolnir:~$ git config --global user.name "Dexter"

dexter@mjolnir:~$ git config --global user.email dexter@gsr.cs.pub.ro

dexter@mjolnir:~$ logout

root@mjolnir:~# su - deedee

deedee@mjolnir:~$ ssh-keygen -t rsa
[...]

deedee@mjolnir:~$ git config --global user.name "Deedee"

deedee@mjolnir:~$ git config --global user.email deedee@gsr.cs.pub.ro

deedee@mjolnir:~$ logout
root@mjolnir:~#
  • [07]. Pe sistemul fizic adăugați cheile publice generate anterior în gitolite. Redenumiți fișierele cu cheile publice astfel încât să poată fi asociate cu utilizatorii care le dețin.
    • [07].a. Hint: keydir}, nu uitați să faceți commit.
    • [07].b. Hint: Cheile trebuiesc comise in repository
Rezolvare
root@mjolnir:~# su - dexter

dexter@mjolnir:~$ cp .ssh/id_rsa.pub dexter.pub

dexter@mjolnir:~$ logout

root@mjolnir:~# su - deedee

deedee@mjolnir:~$ cp .ssh/id_rsa.pub deedee.pub

deedee@mjolnir:~$ logout

root@mjolnir:~# 

student@mjolnir:~/gitolite-admin/keydir$ cp /home/dexter/dexter.pub .

student@mjolnir:~/gitolite-admin/keydir$ cp /home/deedee/deedee.pub .

student@mjolnir:~/gitolite-admin/keydir$ git add *.pub

student@mjolnir:~/gitolite-admin/keydir$ git commit -sm "Adds dexter and deedee pub keys"
[master d343af5] Adds dexter and deedee pub keys
 2 files changed, 2 insertions(+), 0 deletions(-)
 create mode 100644 keydir/deedee.pub
 create mode 100644 keydir/dexter.pub

student@mjolnir:~/gitolite-admin/keydir$ git push
Counting objects: 7, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (5/5), done.
Writing objects: 100% (5/5), 1.05 KiB, done.
Total 5 (delta 0), reused 0 (delta 0)
remote: 
remote: 		***** WARNING *****
remote:         the following users (pubkey files in parens) do not appear in the config file:
remote: deedee(deedee.pub),dexter(dexter.pub)
To gitolite@heimdall.local:gitolite-admin
   fe0f702..d343af5  master -> master
Rezolvare
student@mjolnir:~/gitolite-admin/conf$ ls -l
total 4
-rw-r--r-- 1 student student 91 Jan 19 16:24 gitolite.conf

student@mjolnir:~/gitolite-admin/conf$ vim gitolite.conf 

student@mjolnir:~/gitolite-admin/conf$ cat gitolite.conf | tail -n 9
repo    lab-dexter
        RW+ = dexter
        R  = deedee

repo    room-deedee
        RW+ = deedee

repo    lab-mandark
        RW+ = dexter deedee

student@mjolnir:~/gitolite-admin/conf$ git add gitolite.conf

student@mjolnir:~/gitolite-admin/conf$ git commit -sm "Adds new repos"
[master f73144c] Adds new repos
 1 files changed, 7 insertions(+), 7 deletions(-)

student@mjolnir:~/gitolite-admin/conf$ git push
Counting objects: 7, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (4/4), 442 bytes, done.
Total 4 (delta 0), reused 0 (delta 0)
remote: creating lab-dexter...
remote: Initialized empty Git repository in /var/lib/gitolite/repositories/lab-dexter.git/
remote: creating lab-mandark...
remote: Initialized empty Git repository in /var/lib/gitolite/repositories/lab-mandark.git/
remote: creating room-deedee...
remote: Initialized empty Git repository in /var/lib/gitolite/repositories/room-deedee.git/
To gitolite@heimdall.local:gitolite-admin
   b971f1c..f73144c  master -> master
  • [09]. Pe mașina fizică, din conturile deedee} și dexter}, realizați un initial commit pentru cele trei repo-uri.
  • [09].a. Hint: pentru URL-ul remote folosiți un URL de tip gitolite: curs, slide 17
Rezolvare
dexter@mjolnir:~$ git clone gitolite@heimdall.local:lab-dexter
Cloning into 'lab-dexter'...
The authenticity of host 'heimdall.local (192.168.48.128)' can't be established.
ECDSA key fingerprint is e6:2e:9a:fa:b8:2c:8c:cb:08:85:0a:16:2a:82:30:07.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'heimdall.local,192.168.48.128' (ECDSA) to the list of known hosts.
warning: You appear to have cloned an empty repository.

dexter@mjolnir:~$ ls -l
total 8
-rw-r--r-- 1 dexter dexter  396 Jan 19 16:30 dexter.pub
drwxr-xr-x 3 dexter dexter 4096 Jan 19 16:40 lab-dexter

dexter@mjolnir:~$ cd lab-dexter/

dexter@mjolnir:~/lab-dexter$ ls -l
total 0

dexter@mjolnir:~/lab-dexter$ touch file

dexter@mjolnir:~/lab-dexter$ git add file

dexter@mjolnir:~/lab-dexter$ git commit -m "Initial commit"
[master (root-commit) 6ca0142] Initial commit
 0 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 file

dexter@mjolnir:~/lab-dexter$ git push origin master
Counting objects: 3, done.
Writing objects: 100% (3/3), 209 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
To gitolite@heimdall.local:lab-dexter
  * [new branch]      master -> master



deedee@mjolnir:~$ git clone gitolite@heimdall.local:room-deedee
Cloning into 'room-deedee'...
The authenticity of host 'heimdall.local (192.168.48.128)' can't be established.
ECDSA key fingerprint is e6:2e:9a:fa:b8:2c:8c:cb:08:85:0a:16:2a:82:30:07.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'heimdall.local,192.168.48.128' (ECDSA) to the list of known hosts.
warning: You appear to have cloned an empty repository.

deedee@mjolnir:~$ 

deedee@mjolnir:~$ 

deedee@mjolnir:~$ cd room-deedee/

deedee@mjolnir:~/room-deedee$ ls -l
total 0

deedee@mjolnir:~/room-deedee$ touch file

deedee@mjolnir:~/room-deedee$ git add file

deedee@mjolnir:~/room-deedee$ git commit -sm "Initial commit"
[master (root-commit) 6f630d0] Initial commit
 0 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 file

deedee@mjolnir:~/room-deedee$ git push origin master
Counting objects: 3, done.
Writing objects: 100% (3/3), 223 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
To gitolite@heimdall.local:room-deedee
  * [new branch]      master -> master



dexter@mjolnir:~$ git clone gitolite@heimdall.local:lab-mandark
Cloning into 'lab-mandark'...
warning: You appear to have cloned an empty repository.

dexter@mjolnir:~$ cd lab-
-su: cd: lab-: No such file or directory

dexter@mjolnir:~$ cd lab-mandark/

dexter@mjolnir:~/lab-mandark$ ls -l
total 0

dexter@mjolnir:~/lab-mandark$ touch file

dexter@mjolnir:~/lab-mandark$ git add file

dexter@mjolnir:~/lab-mandark$ git commit -sm "Initial commit"
[master (root-commit) f825621] Initial commit
 0 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 file

dexter@mjolnir:~/lab-mandark$ git push origin master
Counting objects: 3, done.
Writing objects: 100% (3/3), 224 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
To gitolite@heimdall.local:lab-mandark
  * [new branch]      master -> master
  • [11]. Din contul utilizatorului deedeee} încercati să faceți un commit și un push în lab-dexter}.
Rezolvare
deedee@mjolnir:~$ git clone gitolite@heimdall.local:lab-dexter
Cloning into 'lab-dexter'...
remote: Counting objects: 3, done.
Receiving objects: 100% (3/3), 208 bytes, done.
remote: Total 3 (delta 0), reused 0 (delta 0)

deedee@mjolnir:~$ cd lab-dexter/

deedee@mjolnir:~/lab-dexter$ ls -l
total 0
-rw-r--r-- 1 deedee deedee 0 Jan 19 16:51 file

deedee@mjolnir:~/lab-dexter$ echo "hello" > file

deedee@mjolnir:~/lab-dexter$ git add file

deedee@mjolnir:~/lab-dexter$ git commit -sm "Updates file"
[master 2d34b36] Updates file
 1 files changed, 1 insertions(+), 0 deletions(-)

deedee@mjolnir:~/lab-dexter$ git push 
W access for lab-dexter DENIED to deedee
(Or there may be no repository at the given path. Did you spell it correctly?)
fatal: The remote end hung up unexpectedly
  • [12].a. Doriți să creați, în gitolite, repository-ul school} care să fie vizibil (read-only) prin www-data}. Pentru aceasta, configurați întâi gitolite astfel încât noile repository-uri să fie create cu drepturi 755 pentru directoare și 644 pentru fișiere. (Hint: gitolite.rc})
  • [12].b. Configurați repository-ul school} pentru a fi vizibil prin Gitweb și accesibil prin Git peste HTTP. (Hint: git_update-server-info}).
Rezolvare
gitolite@heimdall:~$ cat .gitolite.rc | grep MASK
$REPO_UMASK = 0022;


student@mjolnir:~/gitolite-admin/conf$ cat gitolite.conf | tail -n 2
repo    school
        RW+ = dexter deedee

student@mjolnir:~/gitolite-admin/conf$ git add gitolite.conf

student@mjolnir:~/gitolite-admin/conf$ git commit -sm "Adds school repo"
[master 2c23965] Adds school repo
 1 files changed, 3 insertions(+), 0 deletions(-)

student@mjolnir:~/gitolite-admin/conf$ git push
Counting objects: 7, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (4/4), 398 bytes, done.
Total 4 (delta 1), reused 0 (delta 0)
remote: creating school...
remote: Initialized empty Git repository in /var/lib/gitolite/repositories/school.git/
To gitolite@heimdall.local:gitolite-admin
   f47782b..7a9615b  master -> master


gitolite@heimdall:~$ cd repositories/school.git/hooks/

gitolite@heimdall:~/repositories/school.git/hooks$ cp post-update.sample post-update

6. Redmine (2p)

Tutorial

  • [01]. Pe mașina virtuală, instalați Redmine folosind apt-get_install_redmine}.
  • [01].a. Folosiți numele default} (cel implicit) pentru instanța de Redmine și folosiți optiunile implicite în asistentul de instalare.
  • [01].b. Alegeți o bază de date sqlite3}.
Rezolvare
root@heimdall:~# apt-get install redmine
[...]
Rezolvare
cd, ls in directoare
Rezolvare
root@heimdall:~# apt-get install libapache2-mod-passenger
[...]

root@heimdall:~# cp /usr/share/doc/redmine/examples/apache2-passenger-host.conf /etc/apache2/sites-available/myredmine.org

root@heimdall:~# cat /etc/apache2/sites-available/myredmine.org | grep -v ^# | head -n 2
<VirtualHost localhost:80>
        ServerName myredmine.org

root@heimdall:~# a2ensite myredmine.org
Enabling site myredmine.org.
To activate the new configuration, you need to run:
  service apache2 reload

root@heimdall:~# service apache2 restart
Restarting web server: apache2 ... waiting .
  • Pe mașina fizică mapați myredmine.org} la ip-ul mașinii virtuale și verificați funcționalitatea site-ului creat anterior în apache.
Rezolvare
root@mjolnir:~# cat /etc/hosts | grep myredmine
192.168.48.128  myredmine.org

Exerciții

  • [01]. Autentificați-vă pe Redmine folosind username/password de forma admin}. Creați un cont nou căruia îi acordați drepturi administrative.
  • [01].a. Autentificați-vă folosind contul nou creat și dezactivați contul admin}. (Hint: lock)
  • [01].b. Verificați că toate aspectele din administration-_information} sunt verificate/rezolvate.
  • [02].a. Creați, în Redmine, conturile dastardly}, muttley}, zilly} și clunk}.
  • [02].b. Creați proiectele squish-squasher} și proiectul birdie-wagon}. Adăugați la primul pe dastardly} cu rol de manager și pe muttley} cu rol de dezvoltator. Adăugați la al doilea pe clunk} cu rol de manager și pe zilly} cu rol de dezvoltator.
  • [03]. Creați două repository-uri Git (squish-squasher.git} și birdie-wagon.git}) în home-ul utilizatorului student} și integrați-le în Redmine, în cadrul celor două proiecte de mai sus.

Bonus

  • [01]. Configurați trimiterea de mesaje în momentul în care realizați un push în cadrul unui director.
    • Hints:
      • Urmăriți și activați hook-ul de post-receive.
      • Configurați variabilele de configurare Git necesare. (vedeți finalul fișierului inclus)
      • Urmăriti configurarea variabilelor folosind comanda git_config_nume.variabila}. (De exemplu: git_config_hooks.mailinglist}).
Rezolvare
$ cp post-receive.sample post-receive
; se decomentează ultima linie a fișierului
$ git config 'hooks.mailinglist=gogu@sclipici.com'
$ git config 'hooks.envelopesender=gitolite@destiny.local'
$ git config 'emailprefix=[git-post-receive]'
; ulterior se va da push în directorul cu pricina
gsr/laboratoare/laborator-12.1377205958.txt.gz · Last modified: 2013/10/03 09:23 (external edit)
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0