Category Archives: Linux

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!

Fixing permissions in a shared Git repo

I hate shared Git repos’. Especially when I forget to set them as shared ones. And I start inviting people to join in on the fun.

So, therefore, here’s a tip from a blog that tells you a way of fixing the mess you did, retroactively: https://blog.christophersmart.com/2014/01/10/permanently-fixing-permissions-on-a-shared-git-repo/

tl;dr TheRightWay

git init --bare --shared

tl;dr TheRadioactiveWay

ssh server
chown -Rf root:git /path/to/bare/git/repo
cd /path/to/bare/git/repo
git config core.sharedRepository group
find /path/to/bare/git/repo -type f | xargs chmod 664
find /path/to/bare/git/repo -type d | xargs chmod 775
find /path/to/bare/git/repo -type d | xargs chmod g+s

Cygwin och “My documents” i Windows-nätverk

Stötte på ett intressant fenomen när jag försökte få ihop min datormiljö på jobbet. Två datorer har jag, en Ubuntu och en Windows XP. Båda sitter på samma nät och monterar en enhet (Ubuntu) och Mina Dokument (Windows) vid inloggning. Att symlänka enheten i Ubuntu var en barnlek, men på Windows blev det värre. Eftersom Mina Dokument-mappen är en monterad mapp från nätverket blev det inte riktigt rätt att i Cygwin skriva

cd /cygdrive/c/Documents\ and\ Settings/[min användare]/My\ Documents

Däremot lyckades jag ta reda på var någonstans mappen hörde hemma och med lite trial-and-error lyckades jag luska ut att följande fungerar:

cd '\\[Server]\[Share}\[Folder]'

Detta kan man ju sedan med fördel använda för att skapa symlänk av.

Avgör om du kör 32 eller 64 bitars *buntu

Satt på jobbet och försökte ta reda på hur man tar fram om man kör 32 eller 64 bitars Ubuntu. En snabb sökning senare avslöjade kommandot

file /sbin/init

Felmeddelanden som inte klarar sig utan Google

Idag skulle jag lägga till en HP LaserJet 1200 i Lubuntu 12.04. Allting flöt på precis som jag förväntade mig i guiden tills jag skulle peka ut drivrutinen jag ville köra (PCL5e passar oftast skitbra till den här skrivaren, tillsammans med Gutenprint). Då får jag “CUPS server error”-meddelande som innehåller de (enda användbara bland flera) beskrivande orden “client-error-not-possible”.

Det var det jag hade att gå på. Processen att lösa det på blir: Öppna ny Chrome-flik, skriv in följande “lubuntu cups server error adding printer client-error-not-possible”, klicka på första svaret, lägg till smbclient, prova att lägga till skrivaren igen, cha-ching! Funkis skrivare!

Men vad i hela helsefyr är “client-error-not-possible” för ett beskrivande felmeddelande på att jag saknar smbclient? Jag svär högljutt inombords…

Lubuntu på HP dc7700p, saker att hålla i minnet (och hitta lösningar på)

Jag kände för att börja Dual-boota igen. Jag hade kört Windows i nästan ett år och tyckte väl att det var trevligt, men insåg att jag på min HP DC7700P borde köra något som kanske är lite mindre prestandakrävande och spelvänligt (BF3 och Syndicate och Portal), som tex Lubuntu. Det fanns dessutom lite folk i #sis (irc.bthstudent.se) som själva kör och har kört Lubuntu, vilket helt klart är en fördel när man ska börja felsöka konstigheter.

Det jag stötte på problem med direkt var

  • Nvidias drivrutiner
  • Dubbla skärmar
  • Tangentbordsnedtryckningar: repetitionsfrevens och delay
  • Fokus på nya fönster

Låt oss då gå igenom dem en i taget för att skriva ner länkar till källor på guider och lösningar, samt vad jag försökt själv och hur det ser ut att fungera.

Nvidias drivrutiner

Jag är lite kluven på vad man ska göra här. Det finns i skrivande stund två olika val man kan göra när man installerar Nvidia-drivisarna genom Lubuntus “Additional drivers”

  • Version current, recommended
  • Post-release updates, version current-updates

Skillnaderna på dessa, enligt vad jag hittat, är att “Post-release updates” uppdateras löpande och är mer känsliga för förändringar. Version current är en låst release som inte kommer att uppdateras. Jag har testat båda och båda har gett lite olika resultat för varje installation jag gjort. Jag brukar köra med recommended för att de är… tja, rekommenderade. Förhoppningsvis ligger det något bakom påståendet.

Slutligen

Jag använder mig av Nvidias “Version current” release av drivrutiner. Efter en del försök och hoppande genom alla möjliga olika ringar så ser det ut som om Nvidias drivrutiner klarar av att hantera skrivbordsmiljön minst lika bra som den drivrutin Lubuntu levererar som standard.

Dubbla skärmar

Dubbla skärmar i Ubuntu verkar det vara många som håller på att brottas med. Askubuntu har en intressant tråd som ser ut att ha gett bra resultat för vissa och mindre bra för andra. Dock är det lösningar på väldigt specifika önskemål. Det finns även en tråd på ubuntuforums som kan vara värd att gräva mer i för att se om man kan få ordning på saker och ting.

Slutligen

Efter att ha installerat om ett gäng gånger och testat med olika konfigurationer av Nvidias och Lubuntus drivrutiner, samt ett gäng olika konfigurationsverktyg så som nvidia-settings, arandr, Monitor Settings och Openbox Configuration Manager, kom jag till slut fram till följande uppsättning:

Nvidia: Kör “gksudo nvidia-settings” för konfiguration av skärmar. Det som är spännande finns under kategorin “X Server Display Configuration”. Där ställer jag in min primära skärm till 1600×1200. Jag har testat att sätta den till “Make this the primary display for the X screen” men inte sett någon skillnad från om den skulle var urklickad. Det finns en skärm till, den sekundära, men den är avaktiverad. Jag klickar på den och väljer “TwinView” under “Configuration”. Att använda sig “Separate X screen” har bara resulterat i en svart bakgrund och X-musmarkör på den sekundära. Jag sätter upplösningen på denna till 1680×1050. Därefter klickar jag på “Apply” och sedan (skitviktigt!) “Save to X Configuration file”. Här har jag fått lite blandade resultat, men om man kör det här verktyget med sudo så brukar det inte strula. Verktyget sparar då ner den konfiguration du klickat fram, till en xorg.conf som läses in varje gång Lubuntu bootar.

Openbox Configuration Manager: Den här kikade jag på riktigt tidigt och kom efter en hel del ominstallationer av drivrutinerna på att den med säkerhet också påverkar mycket av fönstermiljön i Lubuntu. Mycket riktigt, här finns godsaker som “Focusing windows”, “Placing windows” och “Primary Monitor”. Efter att ha petat runt lite kan jag bara konstatera att ett par av dessa inställningar verkar direkt överlappande nvidia-settings, så det är viktigt att ta en extra titt här för att påverka sättet som tex nya fönster dyker upp.

Tangentbordsnedtryckningar

En sak som jag gärna vill göra är att påverka vilken fördröjning en nedhållen tangent har innen den börjar repetera. Det här var inte så självklart som man kunde tro, dvs att använda verktyget Keyboard and Mouse och försöka påverka lite reglage, klicka Ok och sen glömma det hela. Något verkar fuffens i hur Lubuntu sparar ner dessa värden och i mitt fall ser detta inte ut att göras alls. Efter lite snack med mina Lubuntu-kompisar så är tanken att det ska finnas en fil placerad i .config/lxsession/$SESSIONNAME/desktop.conf, men det sker alltså inte i min miljö. Till dags dato har jag fortfarande inte kommit underfund med hur den här filen skapas och accessas av Lubuntu, för den skiner med sin frånvaro. Jag har ett par tester kvar att göra för att se om jag kan skapa den självmant och få Lubuntu att fatta läget, men jag är lite skeptisk.

Slutligen

Det sättet jag fick tangentbordsinställningarna att fungera på var att köra: cd; mkdir -p .config/lxsession/$DESKTOP_SESSION/; lxinput;, göra en tangentbordsjustering vilken som helst, klicka Ok och sedan gå in och redigera filen .config/lxsession/$DESKTOP_SESSION/desktop.conf, eftersom GUI-verktyget till synes inte fixar att göra detta. Däremot kan verktyget visa för dig vilken inställning du har, vilket iallafall är något.
Den här lösningen visade sig ha rätt så förödande effekter på fönstermiljön. Varje gång jag skapade filen och justerade delayen, så pajjade massvis med väsentliga delar i fönstermiljön. Jag rekommenderar inte att man gör på det här viset för tillfället.

Fokus på nya fönster

Det här är en rapporterad bugg som jag ganska snabbt blev lite irriterad på. Om jag tex använder mig av Alt+F2 för att få upp Run-fönstret, då placeras det per default i bakgrunden. Om det är det enda fönstret som är synligt visas det åtminstonde, men det har inget fokus.

Slutligen

Debian bugs ser ut att ha lösningen på problemet genom att redigera ~/.config/openbox/sessionname-rc.xml och lägga till följande innan </applications> i slutet av den filen:

  <application name="lxpanel" type="dialog">
      <focus>yes</focus>
  </application>

 Ett par saker till

  • Keybinds
  • 256-färgers xterm
  • 256-färgers gnome-terminal

Keybinds

Med det Windows-tangents-aktiverade tangentbord man har är det rätt användbart att lägga lite keybinds på det. I och med att jag kör TwinView på Nvidia-kortet såg jag det som väldigt tursamt att jag kunde få ett fönster att byta skärm, utan att för den sakens skull ha definierat “Monitor 0”, “Monitor 1”, osv, i xorg.conf. Jag hittade även ett kommando för att maximera fönster med en keybind.

Slutligen

Min .config/openbox/lubuntu-rc.xml innehåller förutom standardgrejset även dessa rader:

<keybind key="A-F10">
    <action name="ToggleMaximizeFull" />
</keybind>

<keybind key="W-C-Right">
    <action name="MoveResizeTo">
        <monitor>next</monitor>
    </action>
</keybind>

<keybind key="W-C-Left">
    <action name="MoveResizeTo">
        <monitor>prev</monitor>
    </action>
</keybind>

256-färgers xterm

Mina syntax highlighting definitioner i vim fungerar så mycket bättre när man har ett par fler än 16(!) färger i terminalen. Welcome, xterm-256color! Enkelt nog kunde jag gå in i min .bashrc och knattra lite.

Slutligen

Jag redigerade ~/.bashrc och lade i botten av den filen följande kodsnutt
if [ “x$TERM” = “xxterm” ]
then
export TERM=”xterm-256color”
fi

256-färgers gnome-terminal (och lite till)

Mina lite speciella önskemål rörande vim (som nästintill kräver 256 färger, anpassningsbar font till Dina och anpassningsbar markör) gjorde att jag fick byta till gnome-terminal. Den ingår tydligen i Lubuntu som standard och uppfyller alla dessa krav. JAg behövde göra ett par saker med min .vimrc.local för att allt slutgiltligen skulle gå rätt till

Slutligen

I min .vimrc.local så har jag:

if has("autocmd")
    au InsertEnter * silent execute "!gconftool-2 --type string --set /apps/gnome-terminal/profiles/Default/cursor_shape ibeam"
    au InsertLeave * silent execute "!gconftool-2 --type string --set /apps/gnome-terminal/profiles/Default/cursor_shape block"
    au VimLeave * silent execute "!gconftool-2 --type string --set /apps/gnome-terminal/profiles/Default/cursor_shape block"
endif

Liten extra notering om Worker om jag skulle glömma det…

För att få Worker (en DirOpus-inspirerad filhanterare) att lira snällt med gnome-terminal ska man sätta “Terminal program” till “gnome-terminal -e %s” och det kommando, säg vim, man vill köra till: “vim {F}” med inställningarna: Start mode: “in terminal”.
Uppdatering: Jag tror att jag kommit fram till en sak som jag aldrig förstått innan. Om man i Start mode väljer tex “Normal mode”, då används inte “Terminal program” för att utföra kommandot. Det är det “in terminal” och “in terminal and wait for key” är till för. Så fungerar det inte att använda sig av “in terminal” för något kommando, växla över till “normal mode” och skriv in hela kommandot som krävs för att det ska kunna exekveras på egen hand.

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]

Packa upp .tar.gz

Det stör mig att jag glömmer bort vilka växlar som gäller för detta

tar -xzf [fil]