![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Mantenimiento de Git de sicoThursday, 24 February 2022, 11:18:44 am Migro los repositorios desde gitolite a gitea Usando estas instrucciones (comentario del 4 de enero de 2018), el api usage y el config cheat sheet. Además se usan las instrucciones que ponen en este issue. Y este otro howto para migrar repositorios a gitea y este otro para aspectos puntuales de configuración (p.ej. SSL). 1. Se genera un token en el usuario gitea (http:3.0.1.45:3000 , user > settings > applications) con el nombre "gitolite2gitea_184hs181ak1" 2. Se comprueba que el userid es el correcto (user > site administration > user accounts). En el script de abajo se usa el userid 1, que debe de coincidir con el userid "gitea" que es el de admnistrador que hemos creado antes. 2. Se copian los repositorios desde chibiko a alejandia para que el gitea pueda acceder a ellos: En alejandria, como root mkdir -p /var/lib/gitolite chown git:git /var/lib/gitolite En alejandria, como git (se copia el id_rsa y el id_rsa.pub del usuario metro al usuario git) En chibiko, como root: (se añade el id_rsa.pub del paso anterior al authorized_keys de root@3.0.1.44) En alejandria, como git: cd /var/lib/gitolite ssh root@3.0.1.44 "cd /var/lib/gitolite && tar -cf - repositories | gzip -1" | tar -xzf - # Para actualizarlos en un momento posterior, ese usa la siguiente línea rsync -av root@3.0.1.44:/var/lib/gitolite/repositories . 3. Accedo a http://3.0.1.45:300, entro como gitea:gitea, y abro http://3.0.1.34:3000/apli/swagger, pincho "authorize" y en AuthorizationHeaderToken pongo "token gitolite2gitea_184hs181ak1" y pulso authorize. 3. En alejandria, como git, se hace lo siguiente:
cd /var/lib/gitolite/repositories
rm -f /tmp/migrate.sh
cat > /tmp/migrate.sh <<'EOF'
#!/bin/sh
HOSTNAME="3.0.1.45"
BASEPATH="/var/lib/gitolite/repositories"
USERID=1
while read REPO; do
REPONAME=`echo "$REPO" | sed "s/\.git\$//"`
curl -H 'Content-Type: application/json' \
-H 'Authorization: token gitolite2gitea_184hs181ak1 ' \
-d '{"clone_addr": "'$BASEPATH'/'$REPO'", "uid": '$USERID', "repo_name": "'$REPONAME'"}' \
-X POST http://$HOSTNAME:3000/api/v1/repos/migrate
done
EOF
chmod a+x /tmp/migrate.sh
ls -1 | grep "\.git\$" | grep -v gitolite-admin | /tmp/migrate.sh
Tuesday, 22 February 2022, 11:47:51 am Se instala "alejandria" (3.0.1.45, Devuan 4.0 "Chimaera") como nuevo servidor git, usando gitea Se siguen las instrucciones oficiales del gitea En alejandria, como root:
apt-get install git nginx gpg postgresql
/etc/init.d/postgresql stop
cd /etc/postgresql/13/main/
sed -i "s/^.*listen_addresses = .*/listen_addresses = 'localhost, 3.0.1.45'/g" postgresql.conf
sed -i "s/^.*password_encryption = .*/password_encryption = scram-sha-256/g" postgresql.conf
/etc/init.d/postgresql start
su -c "psql" - postgres
CREATE ROLE gitea WITH LOGIN PASSWORD 'gitea';
CREATE DATABASE giteadb WITH OWNER gitea TEMPLATE template0 ENCODING UTF8 LC_COLLATE 'es_ES.UTF-8' LC_CTYPE 'es_ES.UTF-8';
\q
sed -i '/local.*all.*postgres.*peer/alocal giteadb gitea scram-sha-256' pg_hba.conf
/etc/init.d/postgresql restart
# Comprobamos que el usuario y la BBDD están bien generados
psql -U gitea -d giteadb
# password: gitea
\q
cd /usr/local/bin/
wget -O gitea https://dl.gitea.io/gitea/1.16.0/gitea-1.16.0-linux-amd64
gpg --keyserver keys.openpgp.org --recv 7C9E68152594688862D62AF62D9AE806EC1592E2
wget https://dl.gitea.io/gitea/1.16.3/gitea-1.16.3-linux-amd64.asc
gpg --verify gitea-1.16.3-linux-amd64.asc gitea
adduser \
--system \
--shell /bin/bash \
--gecos 'Git Version Control' \
--group \
--disabled-password \
--home /home/git \
git
mkdir /etc/gitea
chown root:git /etc/gitea
chmod 770 /etc/gitea
cat >/etc/init.d/gitea <<'EOF'
#!/bin/sh
#
# Init script for gitea
#
# Parts copied from a start script for virtlogd by agx@sigxcpu.org
#
### BEGIN INIT INFO
# Provides: gitea
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start the gitea daemon
### END INIT INFO
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
export PATH
DAEMON=/usr/local/bin/gitea
NAME=gitea
DESC="gitea daemon"
test -x $DAEMON || exit 0
. /lib/lsb/init-functions
PIDFILE=/var/run/$NAME.pid
DODTIME=1 # Time to wait for the server to die, in seconds
GITEA_WORK_DIR=/home/git/gitea
export GITEA_WORK_DIR
GITEA_USER=git
GITEA_ARGS="-c /etc/gitea/app.ini -q --pid $PIDFILE"
# Include libvirtd defaults if available
if [ -f /etc/default/gitea ] ; then
. /etc/default/gitea
fi
running_pid()
{
# Check if a given process pid's cmdline matches a given name
pid=$1
name=$2
[ -z "$pid" ] && return 1
[ ! -d /proc/$pid ] && return 1
cmd=`cat /proc/$pid/cmdline | tr "\000" "\n"|head -n 1 |cut -d : -f 1`
# Is this the expected child?
[ "$cmd" != "$name" ] && return 1
return 0
}
running()
{
# Check if the process is running looking at /proc
# (works for all users)
# No pidfile, probably no daemon present
[ ! -f "$PIDFILE" ] && return 1
# Obtain the pid and check it against the binary name
pid=`cat $PIDFILE`
running_pid $pid $DAEMON || return 1
return 0
}
case "$1" in
start)
log_daemon_msg "Starting $DESC" "$NAME"
if running ; then
log_progress_msg "already running"
log_end_msg 0
exit 0
fi
rm -f $PIDFILE
touch $PIDFILE
chown git:git $PIDFILE
start-stop-daemon --start --quiet --pidfile $PIDFILE --chuid git \
--background --exec $DAEMON -- $GITEA_ARGS
sleep 0.2
if running; then
log_end_msg 0
else
log_end_msg 1
fi
;;
start-debug)
log_daemon_msg "Starting $DESC in foreground" "$NAME"
if running ; then
log_progress_msg "already running"
log_end_msg 0
exit 0
fi
rm -f $PIDFILE
touch $PIDFILE
chown git:git $PIDFILE
start-stop-daemon --start --quiet --pidfile $PIDFILE --chuid git \
--exec $DAEMON -- $(echo $GITEA_ARGS | sed "s/ -q / /g")
sleep 0.2
if running; then
log_end_msg 0
else
log_end_msg 1
fi
;;
stop)
log_daemon_msg "Stopping $DESC" "$NAME"
if ! running ; then
log_progress_msg "not running"
log_end_msg 0
exit 0
fi
start-stop-daemon --stop --quiet --pidfile $PIDFILE \
--exec $DAEMON
log_end_msg 0
;;
restart)
$0 stop
$0 start
;;
*)
log_success_msg "Usage: gitea {start|start-debug|stop|restart}"
log_success_msg " start, stop or reload the gitea git server"
return 1
;;
esac
exit 0
EOF
chmod a+x /etc/init.d/gitea
update-rc.d gitea defaults
/etc/init.d/gitea start
for i in repositories lfs log ; do mkdir -p /home/git/$i ; chown git:git /home/git/$i ; done
cd /home/git
su git
mkdir ssl
cd ssl
/usr/local/bin/gitea cert --host 3.0.1.45
exit
A continuación, se abre un navegador a la dirección http://3.0.1.45:3000/ para terminar la configuración, y se elige (sólo indico los campos que cambian):
Y entonces se clica en INSTALL. NOTA: Los usuarios hay que darlos de alta con el mismo nombre de usuario que el email de SICO para que funcione lo de "Hidden email domain". Por último, una vez comprobado que el servidor gitea funciona en http://3.0.1.45:3000, se desactiva el acceso a escritura del fichero de configuración por parte del servidor web gitea: (NOTA: ESTO ESTÁ SIN HACER) En alejandria, como root: chmod 750 /etc/gitea chmod 440 etc/gitea/app.ini /etc/init.d/gitea restart Update 20220303 Cambio la versión del ejecutable del 1.16.0 al 1.16.3, tanto en alejandria como en las instrucciones de esta entrada. Tuesday, 30 March 2021, 8:42:31 am No funcionaba el git de chibiko desde salchicha (ni desde el propio chibiko) Resulta que estaba desinstalado el paquete gitolite. Aparte, todas las cosas del home de gitolite estaban como del usuario gitlog. Se ha hecho lo siguiente: En chibiko como, root: cd /var/lib/gitolite find . -uid 115 -print | while read l ; do chown gitolite "$l" ; done apt-get install gitolite Monday, 20 January 2020, 9:50:13 am El gitweb no está funcionando ahora mismo en chibiko, y el gitlist da un error He activalo el gitlist haciendo la redirección siguiente en chibiko como root: cd /etc/apache2/mods-enabled ln -s ../mods-available/rewrite.load . echo 'Redirect "/gitweb/" "/gitlist/"' > gitweb apache2ctl restart Pero el gitlist da un error, que según este thread, es porque necesita php5 version 5.4 o superior, y ahora tiene el 5.2. TODO: compilar un "libapache2-mod-php5" con un php más moderno, así como el "php5", "php5-cgi" y "php5-common" NOTA: seguramente también haya que compilar "apache2-mpm-prefork", "apache2-utils", "apache2.2-common", "libapache2-mod-authnz-external", "libapache2-mod-php5". Saturday, 31 August 2013, 1:04:35 am Desaparecían repositorios del gitweb al hacer un commit por culpa de no ser el apache ejecutado como usuario gitolite Me pasaba lo mismo que en este post. Lo que he hecho ha sido lo siguiente, en chibiko, como root: root@chibiko# /etc/init.d/apache2 stop root@chibiko# sed -i "s/APACHE_RUN_USER=www-data/export APACHE_RUN_USER=gitolite/g" /etc/apache2/envvars root@chibiko# /etc/init.d/apache2 restart Friday, 15 February 2013, 7:22:06 pm Uso de git en salchicha salchicha tiene un git muy antiguo (1.5.x), y eso hace que:
Para suplir eso, hay que hacer el primer commit desde orto sitio. metro@chibiko tiene permisos para todos los repositorios, y se aconseja hacerlo en él. Por ejemplo, para tctiserver se ha hecho de la siguiente manera: metro@chibiko$ cd /tmp metro@chibiko$ git clone git@chibiko:tctiserver tctiserver metro@chibiko$ cd tctiserver/ metro#chibiko$ echo "tctiserver es el servidor de autentificacion de TCTI" > README metro@chibiko$ git add -A metro@chibiko$ git commit -m "Initial commit (README)" metro@chibiko$ git push origin master Lo del "git push origin master" es que el primer push se hace así en el git (para el resto ya vale lo del "git push" a secas, eso es porque los refs no están apuntando a master o algo así). Friday, 15 February 2013, 5:32:20 pm Actualizo gitolite a 3.2+ (git20130215) He hecho lo siguiente, en chibiko: # cd /var/lib # mv gitolite gitolite_g3.03 # mkdir -p gitolite/bin # chown -R gitolite:gitolite gitolite # cp /etc/skel/.* gitolite/ # chown gitolite:gitolite gitolite/.* # su - gitolite $ scp metro@localhost:.ssh/id_dsa.pub admin.pub $ git clone git://github.com/sitaramc/gitolite $ gitolite/install -to $HOME/bin $ gitolite setup -pk admin.pub $ cd ~/repositories $ mv ../../gitolite_g3.03/repositories/* . $ for i in `find . -type l -name update` ; do rm $i ; ln -s /var/lib/gitolite/.gitolite/hooks/common/update $i ; done $ exit Los uid/groups estaban configurados de la siguiente manera: /etc/passwd
/etc/group
Thursday, 14 February 2013, 7:30:19 pm Hay que cambiar un poco las scripts asistentes del Git Según este thread del autor del gitolite, la línea "repo nombrerepo" no es una declaración, sino que simplemente cambia el repositorio actual para las siguientes líneas "RW+ =...". Por eso no está creando los repositorios automáticamente.
Según parece, lo que habría que hacer es algo parecido a
Con eso los repositorios se generan "automáticamente" desde el cliente con un mero $ git ls-remote git@host:NewRepo
Con ambas soluciones, al editar el conf, el gitolite crea el repositorio. NOTA Realmente eso está arreglado en el gitolite 3.2, pero nosotros tenemos instalado el 3.03... ¿se podría actualizar? ¿Cómo fuciona el gbp.conf de aquí para generar un nuevo paquete? Supongo que es siguiendo esta guía... Tuesday, 12 February 2013, 6:13:30 pm Migración a gitolite 3 ("G3") Como para arreglar el problema de permisos hay que hacer un trabajo similar al de la reinstalación, aprovecho para migrar a gitolite 3 (¡¡¡inicialmente habíamos instalado gitolite 1!!!). Documentos necesarios para la migración:
Al final la "migración" la he hecho de la siguiente manera: chibiko# cd /var/lib chibiko# mv gitolite gitolite_g1 chibiko# cd /root/src.gitolite chibiko# dpkg -i gitolite3_3.03-u1-06d3398-1ppa1_all.deb chibiko# cp /home/metro/.ssh/id_dsa.pub /tmp/metro_chibiko.pub chibiko# dpkg-reconfigure gitolite3 Cuando pregunta por la clave del administrador, poner "/tmp/metro_chibiko.pub" (sin las comillas). chibiko# apt-get remove gitolite chibiko# cd /var/lib/gitolite/repositories chibiko# mv ../../gitolite_g1/repositories/* . chibiko# for i in *.git ; do rm $i/hooks/update ; ln -s /var/lib/gitolite/.gitolite/hooks/common/update $i/hooks/update ; done chibiko# ls -1 | grep -v "gitolite-admin\|testing" > ../projects.list Después para poner otra vez los repositorios antiguos: metro@chibiko$ mkdir t8 metro@chibiko$ cd t8 metro@chibiko$ git clone git@chibiko:gitolite-admin metro@chibiko$ cd gitolite-admin/conf metro@chibiko$ echo "" >> gitolite.conf metro@chibiko$ ( cd /var/lib/gitolite/repositories && ls -1 ) | while read r ; do n=`echo $r | sed s/\.git//g` ; if ! grep $n gitolite.conf >/dev/null ; then (echo "repo $n" ; echo "") >> gitolite.conf ; fi ; done metro@chibiko$ cd .. metro@chibiko$ git add -A metro@chibiko$ git commit -m "restored old repo" metro@chibiko$ git push Monday, 11 February 2013, 6:57:50 pm Problemas con la configuración Parece que la script de permisos se ha "equivocado" y ha quitado los permisos a gitolite-admin para todos los usuario s(no se debería poder hacer eso). Al ir a arreglarme he he encontrado con este "troublesooting manual": Y el HOWTO que me ha dado cómo solucionar mi problema es: Thursday, 7 February 2013, 6:03:37 pm Cómo sacar una versión antigua de un fichero del git Se puede seguir el ejemplo de gitolite hosting: Buscamos el fihcero $ git log --name-onlyCopiamos la versión actual del fihcero fuera del repositorio $ cp file ~/DesktopSacamos la versión antigua del fichero desde el git $ git checkout 389y5r8qfhhqwfhfujh file Thursday, 17 January 2013, 4:17:43 pm Añadir más usuarios para que puedan cambiar la configuración Se siguen estas instrucciones (sustituye el nuevo en itálicas por el nombre de tu máquina, p.ej. pepito): 1. Si no tienes claves dsa en el usuario al que quieres autorizar: nuevo$ cd ~/.ssh nuevo$ ssh-keygen -t dsa nuevo$ scp id_dsa.pub metro@chibiko:/tmp/nuevo.pub 2. Se copia el id_dsa.pub a chibiko:gitolite-admin/keydir metro@chibiko$ mkdir t5 metro@chibiko$ cd t5 metro@chibiko$ git clone git@chibiko:gitolite-admin metro@chibiko$ cd gitolite-admin metro@chibiko$ cp /tmp/nuevo.pub keydir metro@chibiko$ sed -i "/gitolite-admin/aRW+ = nuevo" conf/gitolite.conf metro@chibiko$ git add -A metro@chibiko$ git commit -m "updated configuration" metro@chibiko$ git push Thursday, 27 September 2012, 7:50 pm Copiar en read-only el repositorio git a un PC windows Primero se instala el wget para windows y el activestate python 2.7. Despues se hace lo siguiente: Copiar el repositorio en un windows: C:\Users\metro\Documents\repositorio>"\Program Files\GnuWin32\bin\wget.exe" -m -k http://3.0.1.44/gitweb/ Hacer que se pueda ver desde el Internet Explorer: C:\Users\metro\Documents\repositorio\3.0.1.44\gitweb>\Python27\python.exe -m SimpleHTTPServer En el Internet explorer hay que abrir la siguiente URL: http://localhost:8000 Tuesday, 24 July 2012, 7:39:40 pm Ya están importados los fuentes al repositorio de controlid con historia y changelog He actualizado la antrada anterior el el procedimiento que he utilizado finalmente. Incluso se pueden consultar vía web: http://3.0.1.44/gitweb/?p=controlid.git;a=summary FALTA: incluir el repositorio de chibiko ( /var/lib/gitolite/repositories/ ) al backup semanal. A partir de ahora, cuando se hagan modificacione y se quiera poner una nueva "versión" en el repositorio, se harían los cambios como siempre en el directorio ControlId, y después como arcom en chibiko se "suben" al repositorio con: $ cd /home/arcom/ControlId $ git add -A $ git commit -m "Comentario del commit" $ git push Como alternativa, se puede hacer el commit usando los datos del ControlId/ChangeLog utilizando la script commit-with-changelog.sh (el parámetro al commit-with-changelog.sh es la versión que se va a poner en loc comentarios al commit): $ cd /home/arcom/ControlId $ git add -A $ ../commit-with-changelog.sh 1.7.8 $ git push La script en cuestión es la siguiente: commit-with-changelog.sh
Friday, 20 July 2012, 7:59:14 pm Se han importado los snapshots de controlid en el git (Update 20120724: simplificado el proceso y corregidas las scripts). Para añadir un nuevo repositorio llamado controlid: cd /home/arcom git clone git@chibiko:gitolite-admin cd gitolite-admin echo " repo controlid" >> conf/gitolite.conf echo " RW+ = id_dsa" >> conf/gitolite.conf git add -A git commit -m "updated configuration" git push NOTA: Si quisieras borrar un repositorio completamente, se puede hacer (como root) un "rm -rf /var/lib/gitolite/repositories/nombrerepositorio.git" y editar según el método anterior el "conf/gitolite.conf"para quitar las dos líneas que hacen referencia al repositorio. Para recrearlo rehacer los pasos anteriores (si solo quieres borrarlo y recrearlo vacío, no tienes que borrar commit y reañadir commit, basta con editar el fichero añadiendo una línea vacía sin quitar nada y al hacer el add y el commit, verá que hay un repositorio no creado y lo recreará). Se ha usado la siguiente script (importa-todo.sh, teniendo en Repositorio los snapshots del programa y en ControlId el directorio montado y vacio donde se va a poner la versión final):
Para hacer un nuevo "clon" del repositorio en otro equipo, basta con hacer un: git clone git@chibiko:controlid.git FALTA: Actualizar los ficheros que usa el gitweb para que aparezcan en la web de chibiko los fuentes. Friday, 20 July 2012, 4:21:01 pm Importar snapshots de código al Git Se hace según este post. Básicamente es unsar esta script. Otras maneras:
Descripción del proyectoHabilitar Git y el hacer varios repositorios en chibiko de manera que sea el servidor del sistema de control de versiones distribuido de SICO. Para instalarlo se ha seguido el tutorial de instalación de git junto con gitolite (y otro). Además, para que acepte hacer "clones" y demás como usuario git, he seguido este post para hacer un user_alies desde gitolite a git: # useradd -o -u 117 gity después he editado /etc/passwd para que git tenga el mismo grupo, homedirectory y shell que gitolite. Para que el gitweb vea la lista de proyectos del gitolite, he hecho: # chmod 640 /var/lib/gitolite/projects.list NOTA: Por ahora sólo soporta el "dsa_id" del usuario dario@phonedevel. Habrá que añadir más de alguna manera... (ver Thursday, 17 January 2013, 4:17:43 pm). Y por último, leer el TUTORIAL DE GIT aunque más bien es un "cheat-sheet" que otra cosa. También es interesante haber leído algunas guidelines for commit messages. |