Category Archives: Debian

Tunneling Gerrit

Tunneling and Gerrit was a really interesting happening, as it wasn’t all clear how to do the following things

  • Allow cloning and interaction with Gerrit Git
  • Allow interaction with Gerrit’s web UI

The first part was easier than the second. So let’s look at the second first.

Allowing interaction with Gerrit’s web UI

In order to set this tunnel up you need to know the port it’s running at. This can be stuck in a few places, depending on your configuration. Most obvious places to look are

  • Apache site configuration
  • /etc/gerrit/gerrit.config

Mine was residing in the config, which said

[httpd]
    listenUrl = http://*:8080

This is something we can use when we set up our tunnel. The tunnel setup is a bit opaque, but the general gist is:

ssh -L [local port number]:[remote host where gerrit web is running]:[remote port where gerrit web is running] [username]@[remote host] -p [remote ssh port]

So, a command would look like this:

ssh -L 3333:cerberus:8080 john@doe.com -p 1234

After having done this and logged in you will be able to reach the web ui through:

http://localhost:3333

Make sure you add your local SSH key so you can interact with Gerrit Git.

In parallel you can/need to set up another tunnel to Gerrit, which usually runs on port 29418…

Allowing interaction with Gerrit Git

The port Gerrit runs on was found in the /etc/gerrit/gerrit.conf file, looking like this:

[sshd]
    listenAddress = *:24918

So let’s use this for setting up the Git tunnel. The command follows the same pattern as for tunnelling the Gerrit web UI:

ssh -L [local port number]:[remote host where gerrit web is running]:[remote port where gerrit web is running] [username]@[remote host] -p [remote ssh port]

And the final tunnel would be something like this:

ssh -L 29419:cerberus:29418 john@doe.com -p 1234

In order to interact properly with Gerrit Git through this tunnel, you would for instance clone a repo like this:

git clone ssh://[gerrit user]@localhost:[tunnel port]/[git repo]

And the command itself would be similar to:

git clone ssh://john@localhost:29419/doe.git

Good to know!

Automata-dagliga-, -nattliga-, -när-ni-vill-byggen av Android med Ant

Androidengineer har ett blogginlägg som jag läst på och testat för att få ordning på schemalagda byggen av mina (singular, egentligen) Android-applikationer.
Jag ska kortfattat försöka stylta upp vad det är som innefattar en sådan uppsättning i en Debian headless servermiljö. Jag har inte lyckats stillisera ihop en ren och fin sammanhängande process för detta, så vänligen läs in på länken ovan för att (föhopnningsvis) få svar på eventuella funderingar och frågor kring hur man använder vissa verktyg.
Logga in på din Debian-burk, bestäm dig för var du vill sätta upp saker och var du kan tänka dig vilja placera ett flertal hundra megabyte av Android SDK och kör:

  1. Installera Ant
  2. Installera Java Compiler (Jag använder openjdk-6-jdk)
  3. Ladda ner Android SDK:t (http://developer.android.com)
  4. Se till att Android SDK:t finns i din Path
  5. I SDK-mappen, kör: android update sdk –no-ui
  6. Checka ut/Kopiera ut ditt Android-projekt till en lämplig mapp på servern. Denna fungerar som bas för byggena
  7. Kör: android update project –path [sökväg till projektet] –target [Android build target] (Headless- Android-kommandostöd)
  8. Kör: ant

Så, nu bör du iallafall kunna bygga projektet genom Ant, vilket innebär att du är såhär [] nära att kunna fixa automatbyggebitarna.
Jag kan ge ett exempel på ett bash-skript jag kör, så du har något att utgå ifrån:

#!/bin/sh
cd /home/drlaban/projects/banjolejon
git checkout development //Kan vara vilken branch som helst
git reset --hard HEAD //Ser till så att det under inga omständigheter finns någon form av ändringar kvar innan bygget (man kan aldrig vara säker)
git pull
rm build.xml //Den här tas bort då den verkar fela då och då när man fösöker uppdatera sitt Android-projekt
android update project --path . //Uppdaterar Android-projektet, bygger build.xml
ant clean //Tar bort allt gammalt Ant-skröfs som ligger och skräpar
ant debug //Bygger nu hela projektet med Ant. Tar lite tid beroende på storlek
cp /home/drlaban/projects/banjolejon/bin/banjo-debug.apk /storage/dump/banjo-daily.apk

Sådär! Då har ni fått grunden för det här. Jag har gjort det och testat det och har till synes fått det att fungera. Så det borde du med kunna göra.

OBS! Detta bygger bara debug-versioner av din applikation. För att kunna bygga livliga applikationer måste man signera dem. Det står beskrivet i den första länken hur man kan gå till väga där.

Kontrollera om en process körs

Om man vill ta reda på huruvida en specifik process är igång i Debian eller inte kan man med fördel använda sig av

ps aux | grep [process]

Server-drift-kom-ihåg #1

# Ta reda på vilken användare [något] kör som i Debian
 ps aux | grep [något]
# Visa vilka användare som finns
 cat /etc/passwd
# Visa vilka grupper som finns
 groups
# Lägg till en användare i en grupp
 usermod -a -G [grupp] [användare] //Glöm inte att logga ut/in om du ändrar detta på den användare du just nu är inloggad som
# Visa vilka grupper en användare ingår i
 groups [användare]

WordPress-rättigheter

Bök, bök, bök. www-data, grupper, wp-content/uploads, FTP-access, osv…

Den här gången skulle jag en gång för alla se till att min WP-installation hade de rättigheter jag ville. Varför? För att jag vill låta min WP-installation uppdatera saker och ting på egen hand utan att fråga efter fruktansvärt frutstrerande FTP-uppgifter (1980, anyone?), plus ge de användare jag vill, rättigheter till olika delar av webinstallationen i övrigt. Det tog tid. Och jag fick det inte som jag ville slutändan ändå. Jag sitter inne med följande konfiguration:

  • Debian
  • Apache 2
  • PHP 5
  • WordPress 3.x

För att göra en historia kort och koncis:

  • Se till att mapparna wp-admin och wp-content ägs av www-data (dvs samma användare som apache kör) och att denna användare får läsa och skriva dit
sudo chown -R www-data:web wp-admin/ wp-content/
sudo chmod -R 775 wp-admin/ wp-content/

Internet: Hur i helsefyr kan jag få den här WP-installationen att köra som root:webdev och fortfarande låta uppgraderingar av WP vara FTP-lös. Jag vill inte köra med FTP bara för att rättigheterna inte är WP-kompatibla, men jag ser inte att jag ska behöva installera ACL och suPHP och suExec, osv… I mitt sinne borde det här fungera med “chown root:web…” eller “chown mickemus:web…” så länge www-data ingår i gruppen web och gruppen web får släsa/skriva till mapparna wp-admin och wp-content. Kommentera gärna!

MySQL-specifikt

Okej, nu har jag gjort det här tillräckligt sällan och behövt det tillräckligt många gånger (som så mycket annat som kommer läggas till senare)

# Lägg till en användare

CREATE USER 'monty'@'localhost' IDENTIFIED BY 'some_pass';

# Lägg till rättigheter åt en användare

GRANT ALL PRIVILEGES ON *.* TO 'monty'@'localhost' | WITH GRANT OPTION;

# Ta bort rättigheter från en användare

REVOKE ALL PRIVILEGES, GRANT OPTION FROM user [, user] ...

# Ta bort en användare

DROP USER user;

# Ändra namn på en användare

RENAME USER old_user TO new_user

# Ändra lösenord på en användare

SET PASSWORD FOR 'bob'@'*' = PASSWORD('newpass');

# Återställ root-lösen (the *nix-way)

  1. Logga in på boxen där ‘mysqld’ kör
  2. Hitta .pid-filen som innehåller serverns ‘process ID’. Den exakta platsen och namnet kan variera. Vanliga platser är:
    /var/lib/mysql
    /var/run/mysqld/
    /usr/local/mysql/data/
    Generellt har filen en ändelse .pid och börjar med ‘mysqld’ eller boxens namn.
    Du kan stoppa mysqld med ett normalt kill-kommando (inte kill -9), genom att använda hela sökvägen till .pid-filen, enligt:
    $ kill `cat /mysql-data-katalog/boxnamn.pid`
    Notera “backostroferna”.
  3. Skapa en textfil som innehåller följande (byt ut löesnord med ett egenvalt lösenord):
    UPDATE mysql.user SET Password=PASSWORD(lösenord’) WHERE User=’root’;
    FLUSH PRIVILEGES;
  4. Spara filen. Kalla den ‘mysql-init’ och lägg den i din egen hem-mapp, där ingen annan kan komma åt den. Se till att mysql har möjlighet att läsa filen.
  5. Starta MySQL-servern med växeln ‘–init-file’:
    $ mysqld_safe –init-file=[sökväg till]/mysql-init &
    MySQL-server kommer att starta upp, läsa in filens innehåll, vilket effektivt ändrar root:s lösenord till det du skrivit in.
  6. När servern har startat, radera filen mysql-init.

# Återställ root-lösen (the Mac-way med mysql-5.7.9-osx10.10)

  1. Stop the MySQL service if it’s running
  2. Start a shell
  3. Type in:
    sudo mysqld-safe –skip-grant-tables
  4. Start another shell
  5. Type in:
    mysql -u root
    update user set authentication_string=password(‘1111′) where user=’root’;
    FLUSH PRIVILEGES;
    exit
  6. Kill mysqld_safe by typing in:
    sudo kill -11 [PID of mysqld_safe]
  7. Restart the MySQL service

256 färger i konsollen

Detta är ett bra tips om man vill ha lite vettiga alternativ till 8 färger som Squeeze-terminalen erbjuder som standard. Mycket kort och koncist förklarat här:

256 colors on the Linux terminal

Flytta alla filer och mappar

Ett sätt att flytta samtliga filer och mappar till mappen ovanför den du står i.

find . -maxdepth 1 -exec mv {} .. ;

Alternativt (med kopieringskommando, som inte flyttar filer)

cp -r ./.* ../charlesdickens/

Alternativt (som är både kort och fungerar finfint i Debian)

mv {*,.*} ..

Grafiktrubbel på Thinkpad X30 och Debian Lenny

Detta ska inte på något sätt ses som någon permanent eller rätt lösning på drivrutinsproblem i Debian för den här Laptopen, den är så gammal att jag är imponerad över att det till 90% fungerar ur lådan. De problem jag har är att det är slö grafik och grafikbuggar i Debian Lenny och jag har iaf (såhär långt) lyckats bli av med grafikbuggarna. Detta gjorde jag genom att skriva in följande i /etc/X11/xorg.conf

Section "Device"
Identifier "Intel Corporation 82830 CGC [Chipset Graphics Controller]"
Driver "i810"
BusID "PCI:0:2:0"
EndSection

Hur jag ska lösa problemen med mitt trådlösa nätverkskort har jag _ingen_ aning om. Ge tips!

Edit: Tyvärr fungerade inte denna lösning heller. Efter ett tag började buggarna dyka upp igen, vilket får mig att tro att oavsett vad jag än skriver in i xorg.conf så kommer jag att ha det här problemet. Blä.

Dropbox på Debian Lenny (5.0.4) stable

Det är ju helt underbart att köra stable-versioner av Linux-distar eftersom de ofta är, just stabila. Men jag sliter mitt skinn (har inte hår, är renrakad) så fort man ska försöka sig på att installera något paket som inte ingår i sources. Ett sådant paket är tex det vida(?) kända(?) Dropbox. Jag måste säga att jag återigen har insett varför jag tycker rent ut sagt illa om Linux; installationer av programvaror är löjligt svårt alltför ofta. Det förvånar mig inte att människor drar sig för att använda Linux (oavsett dist) när det i tod och otid snackas om att man måste kompilera sina applikationer för att de ska fungera.

Nåväl, jag lyckades till slut hitta ett bloginlägg som fungerade direkt out-of-the-box (pun intended). Denna fungerade på en 32-bitars Debian med Gnome.

Jag skriver ut det för säkerhets skull om inlägget skulle dö någongång;

  • Install the necessary libraries.

apt-get install libnautilus-extension-dev libnotify-dev python-docutils

  • Download the latest “Source” tarball here and extract it.
  • From your tarball extraction folder, run the following, as root, to install it to /usr/local/. By default without the “–prefix” argument Dropbox installs it in /usr/, which is not recommended.

./configure –prefix=/usr/local

make

sudo make install

  • Log out and log back in.
  • From your menu, [Applications] => [Internet] => [Dropbox]. Either create a new account or log in with your existing credential.