söndag 29 december 2013

Xfce4: failed to open / on

När jag försöker trycka på "Browse Network" i thunar möts jag av "failed to open / on".
Ett par googlesökningar ger mig att paketet gvfs-backends ska installeras.
sudo apt-get install gvfs-backends

Ikoner saknas i xfce4

Efter att ha installerat xfce4 i ubuntu server 13.04 märkte jag hur ikonerna saknas. Lösningen är att gå in på Applications menu -> Settings -> Appearance, gå sedan till fliken icons, välj "tango" och tryck close.

Nu ska ikonerna laddas om och finnas.

Ladda om fstab

Jag letade efter services eller liknande, men kommandot är mycket kortare än så;
sudo mount -a

söndag 10 november 2013

Köra dator med stängt lock i Ubuntu 13.10

Efter att jag bootat om min server (som är en laptop) märkte jag att den la sig i viloläge så fort jag försökte stänga locket. För att göra situationen värre, så hängde den sig efter jag öppnade locket igen. Efter lite googlande visade det sig att det är en bugg i 13.10.

Lösningen är att redigera filen /etc/systemd/logind.conf
I den ska man lägga till raden:
HandleLidSwitch=ignore

Efter det startar jag om och kan numera stänga locket utan problem.

Källa:
bugs.launchpad.net

fredag 8 november 2013

Se partitionstyper i Linux

Häromdagen var jag osäker på vilka olika typer av partitioner som var monterade i mitt ubuntu-system. Kommandot df -T kan visar detta. För att få trevligare ouput på storlekar kan man lägga på -h för human readable.



sniglom@ubuntu:~$ df -T
Filesystem              Type      1K-blocks      Used  Available Use% Mounted on
/dev/mapper/ubuntu-root btrfs      74883072  64868632    7660472  90% /
none                    tmpfs             4         0          4   0% /sys/fs/cgroup
udev                    devtmpfs    1947336         4    1947332   1% /dev
tmpfs                   tmpfs        391584       948     390636   1% /run
none                    tmpfs          5120         0       5120   0% /run/lock
none                    tmpfs       1957904         0    1957904   0% /run/shm
none                    tmpfs        102400         0     102400   0% /run/user
/dev/sda1               ext2         233191     85180     135570  39% /boot
/dev/mapper/ubuntu-root btrfs      74883072  64868632    7660472  90% /home
/dev/sdc1               btrfs    3907010376 130943884 3773014644   4% /mnt/fillmore
/dev/sdb1               btrfs     488385560 454164988   28962604  95% /mnt/storage




Källa: linuxquestions.org

torsdag 7 november 2013

Förlorad btrfs-partition på extern usb-disk.

Efter att jag uppgraderat mitt ubuntusystem med apt-get dist-upgrade och gjort en omstart kunde inte längre en av mina btrfs-partitioner fram.
När jag tittade i /dev fanns endast /dev/sdc inte /dev/sdc1.

Efter massa pillande med btrfs-verktyg hittade jag verktyget testdisk. (sudo apt-get install testdisk).
Jag startade programmet valde min usb-disk som fanns på /dev/sdc i mitt fall. Valde [Intel] Intel/PC Partition, [Analyze] och sedan quick search.
Testdisk hittade min partition på ett par sekunder, jag fick valet att skriva den till disk och där efter behövde jag boota om.

Efter omstarten var min disk tillbaka tillsammans med alla filer på den, redo att återmonteras.

måndag 4 november 2013

plugin will not work. php extension must be installed (json)

Efter att jag uppgraderat till Ubuntu 13.10 slutade rutorrent att fungera. Allt jag möttes av var felmeddelandet Bad response from server: "(500 [error,getplugins])".
När jag flyttat ut alla plugins ur plugin-mappen startade rutorrent igen, jag började där efter att flytta in alla plugins manuellt, en efter en.

Jag möttes nu av ett nytt felmeddelande, plugin will not work. php extension must be installed (json).

Problemet var att json har flyttats ur php5-dev paketet i ubuntu från och med 13.10. Därför behövde jag installera json,
sudo apt-get install php5-json

Efter det fungerade allt som förut!

fredag 25 oktober 2013

Snabba upp Maven nedladdning av pom-filer från Nexus

I dag reagerade jag över hur lång tid det tog för Maven att hämta hem pom-filer från Nexus. Okej att det går långsamt att ladda hem små filer, men varför är det så lång väntetid mellan varje fil?
Efter att ha sökt runt lite upptäckte jag att Nexus använder sig av något som kallas "Ordered Group Repositories". Vilken ordning dina repon ligger i påverkar prestandan en hel del, eftersom Maven börjar med att leta efter pom-filer i det översta repot, där efter det näst översta och så vidare.

I mitt testfall blev byggtiden mindre än hälften efter att ha flyttat runt ordningen på mina repon. Då vill jag poängtera att samtliga av mina repon är lokala och att Nexus-servern står i samma byggnad som jag befinner mig i. En reduktion från 6.5 minuter till 2-3.5 minuter är inte dåligt.

För att komma åt inställningen loggar du in på Nexus, trycker på repositories i vänsterkolumnen. Väljer din repository group i högerkolumnen och trycker där efter på fliken configuration.
Du kan nu dra i repon under "Ordered Group Repositories" för att flytta på dem.

I min mening är detta ett mycket dåligt designval. Delvis finns det ingen knapp som tydligt demonstrerar att repon kan flyttas upp och ner i listan. Det finns inte heller någon varningstext som påpekar att felaktig konfiguration har enorm inverkan på prestandan. Vad jag vet finns det inte heller något profilingverktyg som kan hjälpa dig att placera dina repon i rätt ordning.

Källor:
books.sonatype.com
siddesh-bg.blogspot.com


måndag 21 oktober 2013

Smokeping i ubuntu/raspbian med lighttpd

För närvarande fungerar det inte särskilt bra att installera smokeping via apt-get om man kör lighttpd, därför har jag antecknat mina steg för att få igång en sådan installation.

Några av problemen är att smokeping är konfigurerat för att använda sendmail, men apt-get-paketet har inte sendmail som en dependency. Smokeping får också en trasig fil i sin rotmapp (smokeping.fcgi.dist). Vidare så installeras inte rrdtool automatiskt, fastän smokeping är oanvändbart utan.

Min installationsprocedur kanske inte är best practice, har du någon åsikt så kommentera gärna.

Installera nödvändiga paket
apt-get install lighttpd
apt-get install smokeping rrdtool

Skapa cgi-bin i din www-rot
sudo mkdir /var/www/cgi-bin

Länka in smokeping
sudo ln -s /usr/lib/cgi-bin/smokeping.cgi .

Kommentera ut sendmail ur konfigurationen
sudo nano /etc/smokeping/config.d/pathnames

Från:
sendmail = /usr/sbin/sendmail

Till
#sendmail = /usr/sbin/sendmail

Lägg till cgi-stöd i lighttpd
sudo lighttpd-enable-mod cgi

Starta om lighttpd
sudo service lighttpd restart

Starta om smokeping
sudo service smokeping restart

Nu ska du kunna nå smokeping på
hostname/cgi-bin/smokeping.cgi

torsdag 22 augusti 2013

Sätta upp git-repo för scm-sync-configuration plugin

Det finns ett utmärkt Jenkinsplugin för att spara konfigurationer och deras ändringar till GIT eller SVN, scm-sync-configuration. För att börja använda pluginet behövs ett repo där det kan spara konfigurationerna.

När jag hade använt git init på en mapp kunde pluginet trots detta inte spara, jag fick blandade felmeddelanden.
Lösningen var att initiera repot som ett bare repo.

Eftersom jag redan hade ett skapat repo (git init) gjorde jag om det till ett bare repo med följande kommando:
git config --bool core.bare true

Men om jag vill sätta upp ett nytt repo av denna sorten gör man så här:
git init --bare

tisdag 20 augusti 2013

Sök filer och kör kommandon på dem i Linux

För att utföra detta kan man använda find:
find . -name '*.foo' -exec cat {} \;

Det som händer när vi kör operationen är följande:
. Sök i den mappen som vi är i.
-name '*.foo' Sätter ett filter för vilka filer som ska hittas.
-exec cat {} Kör cat, ersätt {} med filnamnen från sökresultaten.
\; Avslutar -exec-kommandot.
Källor:
StackOverflow

fredag 16 augusti 2013

admin user missing i UGE

När skulle installera Univa Grid Engine 8.1.5, UGE, under Red Hat RHEL6 möttes jag av det något kryptiska meddelandet "admin user missing" när installationen skulle slutföras.

Som felsökning försökte jag köra installationen som root och låta root vara UGE-admin. Försökte även skapa en användare vid namn admin, som ingick i wheel-gruppen. Fortfarande samma felmeddelande.

I användarguiden nämns felmeddelandet. Men lösningen är då inte mycket till hjälp;
Setup the host properly so that name service provides the name properly to the remote machine (or create the user locally).

Förklaringen? UGE är uppdelat i flera paket, ett plattformsoberoende installationspaket samt plattformsspecifika binärer. Under installationsprocessen behövs binärerna, men det finns ingen kontroll för att se att de finns på plats. Felmeddelandet man får om binärerna saknas är därför "admin user missing".

Lösningen är därför väldigt simpel, extrahera binärerna och installationspaketet i samma mapp.

söndag 11 augusti 2013

Uppgradering av ruTorrent

I detta inlägg ska jag gå igenom hur man hämtar hem senaste versionen av ruTorrent samt återställer sin gamla konfiguration.

Jag börjar med att hämta ut senaste versionen via svn
svn checkout http://rutorrent.googlecode.com/svn/trunk/ rutorrent

I SVN-repot ligger plugin-filerna inte inuti rutorrent-installationen, det får vi lösa.
cd rutorrent
mv plugins rutorrent/
cd rutorrent
mv * ..
rm -rf rutorrent

Nu behöver vi hämta konfigurationen från vår gamla ruTorrent-installation. I mitt fall ligger den i www.
cp -r /var/www/rutorrent/conf .

Jag behöver också kopiera konfigurationen från mina plugins
cp -r /var/www/rutorrent/share .

Jag flyttar nu bort min gamla installation och lägger den nya på plats.
sudo mv /var/www/rutorrent ~/rutorrent.old
cd ..
sudo mv rutorrent /var/www/rutorrent
chown -r www-data:www-data /var/www/rutorrent

Om allt gått vägen ska din nya installation vara på plats!

rTorrent fryser

Jag har tidigare beskrivit hur man installerar rTorrent tillsammans med ruTorrent. Efter något års användande märkte jag att rTorrent började frysa mer och mer. Men det var svårt att lista ut varför, lasten var alltid låg och rTorrent kunde frysa även direkt efter omstart och när nätverkstrafiken var låg.

Efter en del sökande hittade jag till slut svaret. rTorrent förlitar sig på cURL, som i sin tur inte kan göra DNS-uppslagningar asynkront. Resultatet är att rTorrent hänger sig så fort den försöker göra en DNS-uppslagning som tar tid.

Lösningen är att kompilera om cURL tillsammans med c-ares, där efter kompilera om libtorrent och slutligen rtorrent.


1. Installera c-ares
wget http://c-ares.haxx.se/download/c-ares-1.10.0.tar.gz
tar zxf c-ares-1.10.0
cd c-ares-1.10.0
./configure
make
sudo make install

2. Installera cURL
wget http://curl.haxx.se/download/curl-7.31.0.tar.gz
tar zxf curl-7.31.0.tar.gz
cd curl-7.31.0
./configure --enable-ares
make
sudo make install

3. Installera libtorrent
git clone https://github.com/rakshasa/libtorrent
cd libtorrent
./autogen.sh
./configure
make
sudo make install

4. Installera rtorrent
git clone svn://rakshasa.no/libtorrent/trunk/rtorrent
cd rtorrent
./autogen.sh
./configure --with-xmlrpc-c
make
sudo make install

Efter detta kör jag curl --version för att se att följande står: Features: AsynchDNS.

Om du kör ruTorrent är det möjligt att den säger följande nu:
"rss: Some functionality will be unavailable. Web-server user can't access external program (curl)."

I så fall ska du köra:
sudo apt-get install curl php5-curl

Efter det bekräftar jag åter igen att rätt version av curl körs med hjälp av curl --version.

Källa:
FileShareFreak
Ubuntu Forums
Rutorrent Forums

lördag 27 juli 2013

Technic launcher kraschar i OS X

Skulle testa på modden tekkit till Minecraft på min Mac som kör OSX 10.8.4, men märkte snabbt att hela applikationen kraschade så fort den kom till "launching minecraft".

Anledningen till detta är att tekkit använder en version av LWJGL (ett java-bibliotek) som bara fungerar med java 1.6, men 10.8.4 använder java 1.7.

Lösningen på problemet är att antingen manuellt installera en nyare version av LWJGL till technic launcher eller att tvinga technic launcher att köras med java 1.6.

Då problemet är känt hos tekkit föredrog jag att tvinga java 1.6 än att pilla med filer i installationen. OSX 10.8.4 har nämligen båda java-binärerna installerade.

För att tvinga technic launcher att använda java 1.6 kan man köra följande:
/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/bin/java -jar TechnicLauncher.jar

En mer permanent lösning är att bygga ett shellskript med följande innehåll:
#!/bin/zsh
cd "${0:h}"
export JAVA_HOME=/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/
java -jar ./TechnicLauncher.jar


Källor:
StackOverflow.com
technicpack.net

torsdag 4 juli 2013

Extern access för Apache i CentOS

Installerade nyligen CentOS 6.3 och där efter Apache2 via yum. Men jag kunde inte nå Apache utifrån hur jag än gjorde, däremot fungerade ssh fint utifrån.
Jag tittade i Apache-konfigurationen och allt såg riktigt ut, jag tittade i netstat och såg att listen för port 80 accepterade på alla interface.
Till slut prövade jag att i ren desperation stänga ner iptables, det fungerade. Tydligen blockerar CentOS port 80 som standard, men tillåter port 22.

En snyggare lösning än att stänga ner iptables är att lägga till en regel som tillåter port 80.
När jag googlade lösningen skulle det vara okej att köra följande kommando och sedan spara konfigurationen med /sbin/service iptables save.
iptables -A INPUT -p tcp --dport 80 -j ACCEPT

För mig räckte inte detta, det visade sig att ordningen som reglerna står i spelar roll.
Så jag redigerade /etc/sysconfig/iptables manuellt.

Före:
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [6:968]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT


Efter:
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [6:968]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT



Källa:
StackExchange

Lägga till systemvariabler permanent i bash

Redigera bash_profile
nano ~/bash_profile

Lägg till dina systemvariabler på formatet
export MINVARIABEL=mittVärde

Spara filen, logga ut och logga in igen.

btrfs-problem vid do-release-upgrade

När jag kör en do-release-upgrade får btrfs magiskt slut på utrymme, vilket resulterar i en avbruten do-release-upgrade och ett filsystem där jag inte kan utföra några operationer.

Mitt utgångssystem var Ubuntu Server 12.04 som uppdaterades till 12.10 via do-release-upgrade.

Anledningen till problemet?
btrfs lurar filsystemet om hur mycket ledigt utrymme det finns.
Om du jämför output från följande kommandon kan du också se detta:

df -h /
Size: 72G Used: 57G

sudo btrfs fi df /
total=63.23GB, used=50.43GB

sudo btrfs fi show
size 71.41GB used 54.44GB


Lösningen
Börja med att försöka köra btrfs balanseringskommando:
sudo btrfs balance /

I mitt fall var disken för full för att kunna köra en balansering, jag kunde inte heller ta bort mappar eller flytta filer. Jag började därför med att ta bort enstaka filer. Ibland fick jag försöka flera gånger, men för varje fil jag lyckades ta bort blev nästkommande ännu enklare. Till slut hade jag flyttat och tagit bort tillräckligt för att kunna starta btrfs balance.

När min balansering var slutförd var det dags att reparera min avbrutna do-release-upgrade:
sudo dpkg --configure -a
sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade
sudo apt-get autoremove
sudo reboot

Efter denna procedur skulle jag köra ännu ett steg av do-release-upgrade, döm av min förvåning då alla problem återuppstod igen.
Jag hade ju precis balanserat mitt filsystem?! Efter ett första balanseringsförsök hamnade disken i read only och gick inte att återmontera. Efter två omstarter fick jag till slut igång filsystemet. Dags för ännu en runda av att försöka flytta/slänga filer innan jag kunde starta balanseringen.

Efter denna sista balansering är filsystemet snabbare än någonsin. Ska man använda btrfs bör man inte köra på en äldre kernel än 3.6+!


Källor:
nican
ArchLinux BBS

Lägga till identifieringsnyckel för ssh permanent

Efter att jag hade bråkat med ssh-agent och ssh-add på Ubuntu under någon vecka tröttnade jag. Det går att lägga till nycklarna permanet.
Kopiera din identifieringsnyckel till .ssh-katalogen i din hemmapp.
cp minNyckel.pem ~/.ssh

Redigera sedan konfigurationsfilen för ssh:
nano ~/.ssh/config

Lägg till följande
IdentityFile ~/.ssh/minNyckel.pem

Källa: stackOverflow



måndag 1 juli 2013

do-release-upgrade avbruten

Om du försöker uppgradera Ubuntu från en version till en annan, i mitt fall från 12.04 till 12.10 och do-release-upgrade avbryts kan du inte återuppta uppgraderingen genom att köra kommandot igen.

Lösningen är att köra följande:
sudo dpkg --configure -a
sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade
sudo apt-get autoremove
sudo reboot

Efter detta är allt som skulle gjorts med do-release-upgrade slutfört.

Källa: administratosphere

torsdag 27 juni 2013

Lås fokus med iPhone-kameran

Kameran i 3gs och senare modeller har autofokus. Om man bara trycker på foto-knappen försöker telefonen själv hitta en lämplig fokuspunkt, om den inte duger kan man alltid trycka på skärmen. Igår lärde jag mig att om man håller inne på skärmen en liten stund, så kommer kameran låsa fokuspunkten. Något som kan vara väldigt användbart om man vill fokusera bakom någonting eller har problem att fota något som är väldigt nära.

onsdag 26 juni 2013

Could not open a connection to your authentication agent.

När jag försöker lägga till en privat ssh-nyckel med hjälp av ssh-add möts jag av följande;
"Could not open a connection to your authentication agent."

Problemet ligger i att antingen ssh-agent inte körs eller att systemvariablerna som behövs inte är uppsatta.

Jag börjar med att försäkra mig om att ssh-agent inte körs.
sudo killall ssh-agent

Därefter lägger jag till systemvariablerna från ssh-agent med eval.
eval `ssh-agent`

Efter detta går det fint att köra
ssh-add minNyckel

En alternativ lösning är att sätta upp ett temporärt skal med miljövariablerna.
exec ssh-agent bash
Efter man kört kommandot kommer en ny bash-instans startas upp där man kan köra ssh-add.

Källor:
tmtk75
techotom

tisdag 25 juni 2013

Vilket apt-paket tillhör en fil?

Om man vill ta reda på vilket apt-paket en fil tillhör kan man göra det med verktyget apt-file.

Installera
sudo apt-get install apt-file

Uppdatera apt-files databas
sudo apt-file update

Sök efter filen
apt-file search mittFilnamn

lördag 15 juni 2013

Internetradio via pls-filer i mpg123

När jag skulle spela upp internetradio med min raspberry pi märkte jag att mpg123 inte hanterar pls-filer som ofta är standard.
Lösningen är att ladda hem pls-filen, öppna den i en texthanterare och sedan välja en av de mirrors som finns i filen.

Som exempel kan vi använda radioseven. Deras ström finns på www.radioseven.se/128.pls

Jag börjar med att hämta pls-filen
wget www.radioseven.se/128.pls

Jag tittar sedan i filen
pi@raspberrypi ~ $ cat 128.pls
[playlist]

File1=http://sc5.radioseven.se:80
Title1=Radioseven - www.radioseven.se
Length1=-1

File2=http://sc5.radioseven.se:8500
Title2=Radioseven - www.radioseven.se
Length2=-1

File3=http://sc9.radioseven.se:8500
Title3=Radioseven - www.radioseven.se
Length3=-1

File4=http://sc2.radioseven.se:8500
Title4=Radioseven - www.radioseven.se
Length4=-1

File5=http://sc3.radioseven.se:8500
Title5=Radioseven - www.radioseven.se
Length5=-1

NumberOfEntries=5
Version=2


Här kan man se de olika strömmarna, jag väljer att spela upp den första.
mpg123 http://sc5.radioseven.se:80

Färdigt!

Autostart av network-manager i Xubuntu

Jag hade mycket problem med att tjänsten network-manager inte autostartade i Xubuntu. Det första jag prövade var att återställa tjänsten så den hamnade som ett uppstartsjobb.
sudo update-rc.d network-manager defaults

I mitt fall hjälpte dock inte detta, så jag bestämde mig för att kolla skriptet som styr över uppstartsjobbet för network-manager.

sudo nano /etc/init/network-manager


I filen hittade jag följande:
start on (local-filesystems
and started dbus
and static-network-up)
stop on stopping dbus


En snabb googling visade att static-network-up är en signal som kommer när jag fått ip-nummer. Men utan network-manager kan jag inte få ip-nummer till mitt wlan-kort, därför kommer network-manager aldrig att autostarta.

Jag tar därför bort static-network-up ur /etc/init/network-manager
start on (local-filesystems
and started dbus)
stop on stopping dbus


Efter en omstart vaknar network-manager precis som den ska, datorn ansluter till wlan och jag får ip!

lördag 8 juni 2013

Ubuntu väntar på nätverk vid uppstart

En av mina Ubuntu-maskiner har oftast inget nätverk vid uppstart. Av någon anledning förväntar sig installationen att det ska finnas nätverk. Av denna anledning väntar den först 40 sekunder på nätverksanslutning och sedan ytterligare 60 sekunder när detta misslyckas.

Under uppstarten står meddelandet "Waiting for network configuration" och "Waiting up to 60 seconds for network configuration".

En lösning på detta är att modifiera skriptet som körs vid uppstart;
sudo nano /etc/init/failsafe.conf

Leta reda på och kommentera bort följande rader:
$PLYMOUTH message --text="Waiting for network configuration..." || :
sleep 40

$PLYMOUTH message --text="Waiting up to 60 more seconds for network configuration..." || :
sleep 59

$PLYMOUTH message --text="Booting system without full network configuration..." || :


onsdag 5 juni 2013

Gerrit och Gitweb i Ubuntu Server

Installation av gerrit & gitweb i Ubuntu server.

Detta är en grundläggande guide som tar med samtliga installationssteg. Guiden är utförd på Ubuntu Server 11, men samma steg bör gälla även för nyare versioner.

Jag har valt att använda OpenJDK och MySQL, men så klart fungerar även andra databaser och JDKer.
Huvudsakligen kommer mina instruktioner från den officiella gerrit-dokumentationen. När artikeln skrevs, 2012, var en del fel i dokumentationen och det var därför jag skrev denna artikel.

Installation av nödvändiga paket
1. Se till att alla paket är uppdaterade
sudo apt-get update
sudo apt-get upgrade

2. Installera nödvändiga paket för denna guide
sudo apt-get install mysql-server apache2 openjdk-7-jre git

The installation will ask you for a root password for the mysql database, choose a secure password. This password is only for the mysql database.

3. Jag väljer att installera gitweb separat, eftersom det kan bli problem om man försöker installera den före Apache:
sudo apt-get install gitweb

Installation av gitweb
1. Redigera konfigurationsfilen för gitweb
sudo nano /etc/gitweb.conf

Ändra
$projectroot = "/var/cache/git";

till
$projectroot = "/home/gerrit2/gerritSite/git";

2. Starta om Apache
sudo /etc/init.d/apache2 restart

3. Lägg till ett användarkonto för Gerrit
sudo adduser gerrit2

Konfigurering av MySQL

1. Nu ska vi skapa tabeller för Gerrit, börja med att starta MySQL som root.
mysql -u root -p

Observera att detta är rootlösenordet till MySQL-databasen och inte till Linux.

2. Skriv av följande rader nedan, tryck enter för varje ny rad. Har du en vettig terminal går det även att göra copy paste. Glöm inte att byta ut "myPassword" mot något säkrare!

CREATE USER 'gerrit2'@'localhost' IDENTIFIED BY 'myPassword';
CREATE DATABASE reviewdb;
ALTER DATABASE reviewdb charset=latin1;
GRANT ALL ON reviewdb.* TO 'gerrit2'@'localhost';
FLUSH PRIVILEGES;

Avsluta genom att skriva
exit

Installation av Gerrit
1. Byt till gerrit2-användaren.
sudo su gerrit2

2. Gå till hemmappen
cd ~/

3. Ladda hem gerrit (länk är till senaste versionen 2013-06-05)
wget https://gerrit.googlecode.com/files/gerrit-2.5.4.war

4. Kör war-paketet, detta kommer starta en installationsguide.
java -jar gerrit-2.2.1.war init -d gerritSite

5. Starta gerrit
./gerritSite/bin/gerrit.sh start

Gerrit kan också startas om eller stoppas med följande kommandon
./gerritSite/bin/gerrit.sh restart
./gerritSite/bin/gerrit.sh stop

Mercurial-server och hgweb i Ubuntu Server

Jag installerade Mercurial Server på jobbet. En programvara för att administrera rättigheter och repon till Mercurial. När jag ändå hade det färskt tänkte jag passa på att posta det här.

Jag utgår från att man redan har en färdiginstallerad maskin med Ubuntu Server. Maskinen som jag installerade detta på körde Ubuntu Server 11, men proceduren borde vara precis samma på nyare versioner.

1. Börjar med att se till att alla paket är uppdaterade.
sudo apt-get update
sudo apt-get upgrade

2. Installera mercurial-server och apache2
sudo apt-get install mercurial-server apache2

3. Skapa hgweb.config
sudo nano /var/lib/mercurial-server/repos/hgweb.config

Lägg till följande text i filen:
[collections]
/var/lib/mercurial-server/repos/ = /var/lib/mercurial-server/repos/

4. Skapa index.cgi och folderstruktur
sudo mkdir /var/www/cgi-hg
sudo cp /usr/share/doc/mercurial-common/examples/hgweb.cgi /var/www/cgi-hg/index.cgi

5. Redigera index.cgi
sudo nano /var/www/cgi-hg/index.cgi

Ändra följande rad från:
config = "/path/to/repo/or/config"

till:
config = "/var/lib/mercurial-server/repos/hgweb.config"

6. Lägg till en root-användare för mercurial-server
Kopiera din publika SSH-nyckel till /etc/mercurial-server/keys/root/

Om du behöver skapa en SSH-nyckel kan detta göras med putty-keygen från Windows.
I unixoperativ kan man använda ssh-keygen kommandot.

Efter att SSH-nyckeln blivit tillagd behöver mercurial-server uppdateras för att hitta nya användare.
sudo -u hg /usr/share/mercurial-server/refresh-auth

7. Lägg till fler användare
Börja med att klona ut hgadmin-mappen från servern
clone ssh://hg@your-server/hgadmin

I din utklonade mapp ska du nu skapa följande undermappar:
keys
keys/root
keys/users

För att skapa en användare gör du en ny mapp med användarens namn, du lägger sedan hans SSH-nyckel i denna mappen. Slutligen lägger du detta i antingen root eller users och pushar tillbaka ändringarna.

Exempelvis
keys/root/enAdmin/publikNyckel
keys/users/SvenH/publikNyckel

Om du behöver ta bort en användare så tar du bort hans mapp och pushar in ändringen.

8. Konfigurera Apache

Vi börjar med att skapa en virtuell host åt Apache för att peka ut mercurial-repon.

sudo nano /etc/apache2/sites-available/default
Lägg till följande i botten av filen men ovanför taggen.
Alias /hg /var/www/cgi-hg

DirectoryIndex index.cgi
AddHandler cgi-script .cgi
Options ExecCGI
Order allow,deny
Allow from all


Slutligen, ge Apache access till hg-mapparna
sudo chown www-data:www-data -R /var/lib/mercurial-server/repos

Källor
Mercurial-server http://dev.lshift.net/paul/mercurial-server/docbook.html
Apache Configuration http://redline6561.livejournal.com/362393.html

måndag 27 maj 2013

Failed to add service – already in use

När jag försökte starta en OpenGL-applikation (minecraft) i Raspbian (Debian) på min Raspberry Pi möttes jag av felmeddelandet:
Failed to add service – already in use

Problemet berodde på att jag hade gett grafikdelen för lite minne, något som ställde till problem även om jag körde med X-forwarding.

Lösningen? Kör sudo raspi-config, gå in på 8 Advanced Options och där efter A3 Memory Split. Ställ upp mängden GPU-minne (jag valde 128MB), spara och starta om.

Problem med locale i debian och ubuntu

Jag hade problem både på Ubuntu server och Debian (Raspian) att locale krånglade och spottade felmeddelanden som exempelvis "locale: Cannot Set LC_ALL to default locale: No such file or directory.".

Vanliga tips är att köra locale-gen, update-locale eller att köra dpkg-reconfigure locales. Om man kör via ssh bör man se till att den maskin man kör ssh-klienten på använder locales som finns i den maskin som kör ssh-servern. Tyvärr löste inget av detta mitt problem.

Lösningen var att manuellt redigera filen /etc/default/locale .
Min fil såg ut så här först:
# File generated by update-locale
LANG=en_US.UTF-8

Efter mina ändringar såg den ut så här:
LANG=en_US.UTF-8
LC_ALL="en_US.UTF-8"
LANGUAGE="en_UTF.UTF-8"

Efter jag sparat filen, loggade jag ut och loggade in igen. Nu fungerar locales ordentligt!

måndag 1 april 2013

Wireshark under OSX 10.8 Mountain Lion

Wireshark kräver X11 för att köras under OSX. I och med OSX 10.8 ingår inte längre X11 och Apple hänvisar användare till xquartz.

När jag försökte köra Wireshark tillsammans med Xquartz märkte jag att inga fönster öppnas även om programmet visas som det är startat. En workaround är att starta Xquartz, öppna en Xterm i Xquartz och sedan köra följande:
open /Applications/Wireshark.app/

Nu kommer Wireshark att starta upp normalt.

tisdag 5 februari 2013

Rensa sökcache i Windows

Om indexering är aktiverat i Windows 7 kommer det att skapas det cachefiler, Windows.edb samt tillhörande *.ci-filer. Antalet filer och utförda sökningar påverkar cachestorleken.

I min utvecklingsdator där jag regelbundet söker i källkod och har ett stort antal filer är cachestrukturen över 5GB stor. Då maskinen har en liten SSD var det dags att utföra en rensning.

Öppna kontrollpanelen, gå till Indexing Options. Tryck på modify-knappen, bocka ur samtliga platser.
Tryck där efter på Advanced-knappen, tryck där efter på Rebuild. Nu kommer Windows att rensa all cache.

Om du behöver cache, gå tillbaka till indexing options, lägg till de platser du behöver. Nu kan du antingen välja att göra en rebuild igen för att låta cachen återskapas direkt eller trycka close och låta cachen skapas vid behov.

Även om alla platser är urbockade kommer indexeringen inte bli helt inaktiverad. Vill du inaktivera indexeringen gör du så här:
Gå till Control Panel -> Administrative tools -> Services.
Dubbelklicka på Windows Search, välj disabled och tryck där efter på stop.

Om du däremot bara vill stänga av indexering för en specifik hårddisk går även detta att göra. Öppna My Computer, högerklicka på en hårddisk, välj properties. Bocka sedan ur rutan
"Allow files on this drive to have contents indexed in addition to file properties".


onsdag 23 januari 2013

GPU-prestanda Xbox 360 och Playstation 3

I föregående post gick jag igenom beräkningsprestanda i Playstation 3 och Xbox 360. Jag snuddade även vid att GPUn i Xbox 360 går att använda för GPGPU-beräkningar. I detta inlägg tänkte jag jämföra de två grafiklösningarna som används i Playstation 3 och Xbox 360.

Xenos som sitter i Xbox 360 är en modern typ av GPU med unified shaders och GPGPU-funktionalitet. Det går alltså att utföra annat än grafikberäkningar och prestandan påverkas inte av fördelningen mellan pixel- och vertexshaders i spel.

Xenos är föregångaren till R600, det vill säga Radeon 2900-/2600-/2400-serien.
En markant skillnad är hur ration mellan shaders, texture mapping units och ROPs ser ut.

Xenos: 6:2:1
2400: 10:1:1
2600: 30:2:1
2900: 20:1:1

Xenos har alltså förhållandevis extremt få shaders och ganska många texture units. Detta ger en hög fillrate, men låg beräkningskapacitet.

Faktiska siffror:
Xenos: 48:16:8
2400: 40:4:4
2600: 120:8:4
2900: 320:16:16

Xenos har inget dedikerat vram utan är ansluten till en stor minnespool på 512MB som den delar med Xboxens CPU. Däremot har Xenos 10MB edram anslutet, dit den skriver delar av sin framebuffer (tiled rendering).

Edramet har också extra logik anslutet för att avlasta Xenos med anti alias, alpha compositioning och stencil buffering. Data som processas av denna logik har en bandbredd av 256GB/s vidare mot Edramet! Operationer som alpha compositioning och stencil buffering görs normalt av ROP, så räknar man in detta har Xenos ett väldigt högt antal ROPs i förhållande till shaders.

RSX som sitter i Playstation 3 är baserad på Geforce 7800. Detta är en äldre typ utan unified shaders eller GPGPU-stöd. RSX har 24st pixel shaders och 8st vertex shaders.

Till skillnad från Xenos har RSX dedikerat minne på 256MB. Bandbredden är på 22.4GB/s vilket är markant lägre än 7800GTX. RSX kan också mappa in ramminne om 256MB inte skulle räcka, då sjunker prestandan till 15GB/s läs och 10GB/s skriv.

RSX: 22.4GB/s 128bit, 1400MHz GDDR3
7600GT: 22.4GB/S 128bit, 1400MHz GDDR3
7800GS: 38.4GB/s 256bit, 1200MHz GDDR3
7800GTX: 38.4GB/s 256bit, 1200MHZ GDDR3

Även om RSX är baserad på 7800GTX är det en något bantad modell, som hamnar någonstans mellan GTX och GS om man tittar på pixel shaders, vertex shaders, texturing units och ROPs.

RSX: 24:8:24:8, 550MHz
7600GT: 12:5:12:8, 560MHz
7800GS: 16:8:16:8, 375MHz
7800GTX: 24/8/24/16, 430MHz

Ser man till förhållandet mellan dem, verkar det mer normalt än för Xenos:
RSX: 3:1:3:1
7600GT: 2.4:1:2.4:1.6
7800GS: 2:1:2:1
7800GTX: 3:1:3:2

Normaliserar vi med klockfrekvens ser vi följande:
Xenos: 132:44:132:44
7600GT: 67:28:67:45
7800GS: 60:30:60:30
7800GTX: 103:34:103:69

Men om vi jämför korten hur ser prestandan ut då?
Bandbredden är komplicerad att räkna in, eftersom Xenos bandbredd både beror på edram och det delade minnet, precis som att RSX kan mappa ram om det behövs. Därför tänker jag bara gå genom rå beräkningsprestanda.

Antal operationer per sekund:
RSX: 400GFlops, (24 pixel s. * 27ops + 8 vertex s. * 10ops) * 550MHz
Xenos: 240GFlops, 48 shaders * 10ops * 500MHz

Här är den teoretiska prestandan i RSX markant högre, men det kräver perfekt fördelning av pixel- och vertex-shaders medan Xenos behåller sitt värde oavsett fördelning. Vid en fördelning av 24/16 kommer RSX bara hantera 200GFlops exempelvis.

Antal shaderoperationer per sekund:
RSX: 75 Miljarder, (24 Pixel s. * 5 ALU + 8 vertex s. * 2 ALU) * 550MHz
Xenos 96 Miljarder, 48 * 4 ALU * 500MHz

Här gäller också perfekt fördelning för att RSX ska uppnå sina värden.

Texel fillrate
RSX: 13.2 GigaTexels, 24 texture units * 550MHz
Xenos: 8 GigaTexels, 16 texture units * 500MHz

Pixel fillrate
RSX: 4.4 Gpixels, 8 ROPs * 550MHz
Xenos: 4 Gpixels, 8 ROPs * 500MHz

Z sample rate
RSX: 8.8 GigaSamples, 2x Z-samples * 8 ROPs * 550 MHz
Xenos: 8 GigaSamples, 2x Z-samples * 8 ROPs * 500 MHz
Att ha möjlighet till två Z-samples är något som kan utnyttjas för att köra två pass över scenen som ska renderas. Första gången samplar man vad som ligger längst fram i bild, så att det som ligger bakom kan ignoreras om det är täckt.

Som vi kan se är fillrate och sample rate högre, däremot är shaderoperationer lägre. Pixel fillrate på 360 ska vara exakt matchat mot edram för att kunna utföra 4xAA vid hd-upplösningar.
http://www.beyond3d.com/content/articles/4/4

Något som siffrorna inte kan visa är att Xenos är effektivare under ojämn last, samt hur hög praktisk effektivitet grafiklösningarna faktiskt har under last.



Beräkningsprestanda i 360 och PS3

Nu är det snart dags för nästa generation av Playstation och Xbox. I och med detta väcks diskussionerna om prestanda i nuvarande generation.

En vanlig tolkning är att Playstation 3 skulle ha högre prestanda än Xbox 360, men varifrån kommer denna tolkning från och stämmer den?

Tolkningen kommer från att Cell-CPUn i PS3 har teoretisk topprestanda som ligger över den i Xbox 360.

Cellprocessorn i Playstation 3 består av en PPE, en traditionell CPU samt 7st SPU-enheter. SPU-enheterna är avsedda att effektivt kunna beräkna flyttalsoperationer och är jämförbara med vad man hittar i ett modernt grafikkort med GPGPU-funktionalitet.

Xbox 360 har en CPU, Xenon, som består av 3st PPE-enheter och inga SPU-enheter. Microsoft har gjort några mindre ändringar till Altivec-enheten i PPEn. Det nya instruktionssetet kallas VMX128 och är inte bakåtkompatibelt med Altivec.

En annan skillnad mellan PPE i Cell och Xenon är att Xenon har 1MB Cache som delas mellan kärnorna, medan Cell har 512KB cache till PPEn. Således bör enkeltrådad prestanda vara högre på Xenon, men det finns ingen praktisk anledning att köra sådan kod.

Jag roade mig med att jämföra teoretisk prestanda mellan de två. Notera att jag bara räknar med 6 SPUer eftersom den sjunde är reserverad av systemet i Playstation 3.

Flyttal, single precision
360: 3x 25.6 = 76.8 GFlops
PS3: 1x 25.6 + 6x 25.6 = 179.2 GFlops

Det är oftast här jämförelsen slutar och så säger man att PS3 är snabbast. Men låt oss fortsätta:

Flyttal, double precision
360: 3x 6.4 = 19.2 GFlops
PS3: 1x 6.4 + 6x 1.8 = 17.2 GFlops

Xbox 360 har också en modernare GPU, Xenos, denna har GPGPU-funktionalitet, till skillnad från RSX i PS3. Vi kan alltså låta Xenos göra beräkningar, om än bara i single precision.

Flyttal, single precision
360: 3x 25.6 + 240 = 316.8 GFlops
PS3: 1x 25.6 + 6x 25.6 = 179.2 GFlops

I teorin är alltså Xenon + Xenos snabbare än Cell oavsett om vi vill beräkna single- eller double precision.