Line 1: |
Line 1: |
− | == Gitorious DB hacking ==
| + | Deprecated. Unavailable from 31st July 2022. --[[User:Quozl|Quozl]] ([[User talk:Quozl|talk]]) 19:21, 4 February 2023 (EST) |
| | | |
− | === Web interface === | + | == Hostnames == |
− | http://admin.osuosl.org/phpmyadmin
| |
| | | |
− | === Get a MySQL prompt ===
| + | * [http://git.sugarlabs.org git.sugarlabs.org], Gitorious main site. |
− | type "db" at the prompt, than give the db password
| + | * [http://src.sugarlabs.org/ src.sugarlabs.org], Git repositories capable for HTTP cloning. |
− | from ~gitorious/config/database.yml
| + | * Gitorious diagnostic page (only for admins) [http://git.sugarlabs.org/admin/diagnostics]. |
| + | * Gitorious diagnostic summary page [http://git.sugarlabs.org/admin/diagnostics/summary]. |
| | | |
− | === Change project owner === | + | == Hardware == |
− | select * from users where login='sdz';
| |
− | select id from projects where slug='soas';
| |
− | update projects set user_id=117 where slug='soas';
| |
| | | |
− | === Add committer ===
| + | [[Machine/jita]] |
− | insert into committerships set
| |
− | user_id=299,
| |
− | repository_id=275,
| |
− | kind=2,
| |
− | created_at='2009-08-03 08:12:19',
| |
− | created_at='2009-08-03 08:12:19';
| |
| | | |
− | === WARNING === | + | == Administrative contact == |
− | To zap a user account, make sure you also remove | + | |
− | its related records from all tables (committers, | + | git AT sugarlabs DOT org |
− | projects, repositories, events...)
| + | |
| + | == Sysadmins == |
| + | |
| + | For non-emergency calls, preferably send email to the administrative contact. |
| + | |
| + | * [[User:alsroot|Aleksey Lim]] |
| + | |
| + | == Notes == |
| + | |
| + | [http://gitorious.org/ Gitorious] hosting. |
| + | |
| + | {| class="wikitable" |
| + | |- |
| + | !scope="row" | Home |
| + | |{{Code|/srv/gitorious}} |
| + | |- |
| + | !scope="row" | Daemon |
| + | |{{Code|/etc/init.d/gitorious}} |
| + | |- |
| + | !scope="row" | Logs |
| + | |{{Code|/srv/gitorious/app/log}} |
| + | |- |
| + | !scope="row" | Config |
| + | | |
| + | {{Code|/srv/gitorious/app/config/database.yml}}<br> |
| + | {{Code|/srv/gitorious/app/config/gitorious.yml}}<br> |
| + | {{Code|/etc/cron.daily/gitorious}}<br> |
| + | {{Code|/etc/logrotate.d/gitorious}}<br> |
| + | {{Code|/etc/httpd/conf.d/git.sugarlabs.org.conf}} |
| + | |- |
| + | !scope="row" | SSL certificates |
| + | | |
| + | {{Code|/etc/ssl/private/git.sugarlabs.org.key}}<br> |
| + | {{Code|/etc/ssl/certs/git.sugarlabs.org.pem}} |
| + | |- |
| + | !scope="row" | Ports |
| + | | |
| + | {{Code|9418}} git server |
| + | |- |
| + | !scope="row" | Sources |
| + | | http://gitorious.org/~alsroot/sugarlabs-org |
| + | |- |
| + | |} |
| + | |
| + | === Plugins === |
| + | |
| + | Sugar Labs Gitorious instance uses downstream several plugins. All of them are enabled from {{Code|app/processors/push_event_processor.rb}} file and placed to {{code|lib/}} directory. |
| + | |
| + | ==== CIA ==== |
| + | |
| + | Notify http://cia.vc about all commits. |
| + | |
| + | Plugin file: |
| + | |
| + | lib/cia.rb |
| + | |
| + | {{Code|gitorious.yml}} configuration: |
| + | |
| + | cia: true |
| + | |
| + | ==== Patchwork ==== |
| + | |
| + | [http://patchwork.sugarlabs.org/ Patchwork] integration. |
| + | |
| + | Plugin file: |
| + | |
| + | lib/patchwork.rb |
| + | |
| + | {{Code|gitorious.yml}} configuration: |
| + | |
| + | patchwork: |
| + | sugar: |
| + | url: "https://git.sugarlabs.org:0000000000000000000000000@patchwork.sugarlabs.org/xmlrpc/" |
| + | linkname: sugar |
| + | repositories: |
| + | - mainline |
| + | set_state: Accepted |
| + | find_states: |
| + | - New |
| + | - Under Review |
| + | |
| + | ==== Pootle commits ==== |
| + | |
| + | Send notification emails on every pootle commit. |
| + | |
| + | Plugin file: |
| + | |
| + | lib/emailer.rb |
| + | |
| + | {{Code|gitorious.yml}} configuration: |
| + | |
| + | emailer: true |
| + | |
| + | === Database tips === |
| + | |
| + | To make runtime changes in Gitorious database, follow regular Rails workflow - run {{Code|scripts/console}}: |
| + | |
| + | cd /srv/gitorious/app |
| + | sudo -u gitorious RAILS_ENV=production script/console |
| + | |
| + | It is regular Ruby console and all features, like {{Code|TAB}} completion, work. To tweak Gitorious data, just use its [http://gitorious.org/gitorious/mainline/trees/master/app/models model classes], e.g.: |
| + | |
| + | # search of particular object by its attributes |
| + | user = User.find_by_login("user") |
| + | project = Project.find_by_title("project") |
| + | |
| + | # get object attributes |
| + | user.email |
| + | |
| + | # change object attributes |
| + | project.owner = User.find_by_email("foo@bar") |
| + | project.save! |
| + | |
| + | # destroy object and all its dependencies |
| + | user.destroy |
| + | |
| + | # reset user password |
| + | user = User.find_by_email("user") |
| + | password_key = user.forgot_password! |
| + | Mailer.deliver_forgotten_password(user, password_key) |
| + | |
| + | # add repository committer |
| + | committer = User.find_by_login("user") |
| + | repo = Repository::find_by_path("sugar/mainline") |
| + | repo.committerships.create_with_permissions!({:committer => committer}, (Committership::CAN_COMMIT)) |
| + | |
| + | # delete repository committer |
| + | committer = User.find_by_login("user") |
| + | repo = Repository::find_by_path("sugar/mainline") |
| + | repo.committerships = repo.committerships.select {|i| !i.members.include? committer } |
| + | |
| + | # change repository owner |
| + | new_owner = User.find_by_login("user") |
| + | repo = Repository::find_by_path("sugar/mainline") |
| + | cs = repo.committerships.select {|i| i.committer == new_owner}.pop |
| + | cs.permissions = (Committership::CAN_ADMIN | Committership::CAN_COMMIT | Committership::CAN_REVIEW) |
| + | cs.save! |
| + | repo.owner = new_owner |
| + | repo.save! |
| + | |
| + | # move repository to another project |
| + | new_project = Project.find_by_title('sl-tweaks') |
| + | repo = Repository::find_by_path("sat-solver/mainline") |
| + | repo.project = new_project |
| + | repo.name = "sat-solver" |
| + | repo.save! |
| + | |
| + | # check users permissions for particular repository |
| + | repo = Repository::find_by_path("pukllanapac/mainline") |
| + | repo.committerships.each {|i| puts "#{User.find(i.committer_id).login} review=#{i.permissions & Committership::CAN_REVIEW > 0}"} |
| + | repo.committerships.each {|i| puts "#{User.find(i.committer_id).login} commit=#{i.permissions & Committership::CAN_COMMIT > 0}"} |
| + | repo.committerships.each {|i| puts "#{User.find(i.committer_id).login} admin=#{i.permissions & Committership::CAN_ADMIN > 0}"} |
| + | |
| + | === TODO === |
| + | |
| + | Current gitorious patch doesn't handle renaming repositories properly and doesn't update symliks in {{Code|/srv/gitorious/repos-by-name}}. For now, run code to recreate symlinks: |
| + | |
| + | Repository::find_each {|i| s='/srv/gitorious/repos/' + i.real_gitdir; d='/srv/gitorious/repos-by-name/' + i.gitdir; FileUtils.makedirs(File.dirname(d)) if !File.exist?(File.dirname(d)); File.symlink(s, d) if !File.exists? d} |
| + | |
| + | == Upgrade notes == |
| + | |
| + | {| class="wikitable" |
| + | !scope="row" | git |
| + | | |
| + | {{Code|/srv/gitorious/app}} |
| + | |- |
| + | |} |
| + | |
| + | After pulling new sources, migrate database: |
| + | |
| + | cd /srv/gitorious/app/ |
| + | sudo -u gitorious RAILS_ENV=production rake db:migrate |
| + | |
| + | To restart only Web application, instead of restarting the daemon, call: |
| + | |
| + | touch /srv/gitorious/app/tmp/restart.txt |
| + | |
| + | === Hardware migration === |
| + | |
| + | '''Disable servers of both hosts.''' |
| + | |
| + | mv /srv/gitorious/ssh/.ssh/authorized_keys{,.bak} |
| + | |
| + | a2dissite git.sugarlabs.org |
| + | a2dissite cgit.sugarlabs.org |
| + | /etc/init.d/apache2 reload |
| + | |
| + | /etc/init.d/gitorious-git stop |
| + | /etc/init.d/gitorious-poller stop |
| + | /etc/init.d/gitorious-sphinx stop |
| + | /etc/init.d/gitorious-stomp stop |
| + | |
| + | '''On old server.''' |
| + | |
| + | * Dump MySQL database: |
| + | |
| + | mysqldump -u root -h localhost -p gitorious | xz > dump.slq.xz |
| + | |
| + | '''On new server.''' |
| + | |
| + | * Create MySQL user and database for Gitorious: |
| + | |
| + | GRANT ALL PRIVILEGES ON *.* TO 'gitorious'@'localhost' IDENTIFIED BY '<insert password>' WITH GRANT OPTION; |
| + | FLUSH PRIVILEGES; |
| + | CREATE DATABASE gitorious; |
| + | |
| + | * Make preparations from root user: |
| + | |
| + | useradd gitorious -d /srv/gitorious/ssh -m |
| + | cat >> /srv/gitorious/ssh/.profile <<EOF |
| + | export RAILS_ENV=production |
| + | cd /srv/gitorious/app |
| + | EOF |
| + | xzcat dump.slq.xz | mysql -u root -p -D gitorious |
| + | |
| + | * Make preparations from gitorious user: |
| + | |
| + | su - gitorious |
| + | |
| + | mkdir /srv/gitorious/repositories-mirror |
| + | mkdir /srv/gitorious/repositories-mirror |
| + | mkdir /srv/gitorious/tmp |
| + | |
| + | git clone git://git.sugarlabs.org/sl-tweaks/gitorious.git /srv/gitorious/app |
| + | |
| + | rsync --delete-after -PHAXhaxv $OLD_HOST:/srv/gitorious/repositories/ /srv/gitorious/repositories/ |
| + | rsync --delete-after -PHAXhaxv $OLD_HOST:/srv/gitorious/app/public/system/ /srv/gitorious/app/public/system/ |
| + | rsync --delete-after -PHAXhaxv $OLD_HOST:/srv/gitorious/ssh/.ssh/authorized_keys.bak /srv/gitorious/ssh/.ssh/authorized_keys |
| + | |
| + | cd /srv/gitorious/app |
| + | rake db:migrate |
| + | rake ts:rebuild |
| + | rake mirror:symlinkedrepos |
| + | rake assets:clear |
| + | |
| + | * Start up Gitorious. |
| + | |
| + | a2ensite git.sugarlabs.org |
| + | a2ensite cgit.sugarlabs.org |
| + | /etc/init.d/apache2 reload |
| + | |
| + | /etc/init.d/gitorious-git start |
| + | /etc/init.d/gitorious-poller start |
| + | /etc/init.d/gitorious-sphinx start |
| + | /etc/init.d/gitorious-stomp start |
| + | |
| + | == Sources == |
| + | |
| + | * [https://gitorious.org/~alsroot/gitorious/sugarlabs-org Downstream repository]. |
| + | * [https://gitorious.org/gitorious/mainline Upstream repository]. |