Jag har en applikation som har körts en längre tid på Debian 4.0. Nu så har jag fått nya servrar med Ubuntu 9.10 och helt plötsligt så tog uppstart av applikationen allt från några millisekunder till flera minuter. Skumt... Så det var bara att börja steppa koden för att ta reda på varför det tog sån tid att starta. Min applikation använder sig utav snmp4j och jag skapar en instans av Snmp vid uppstart. Snmp implementationen i sin tur skapade ett slump värde med hjälp av `java.security.SecureRandom¿ med följande kod:
byte[] rnd = new byte[8];
java.security.SecureRandom sr = java.security.SecureRandom.getInstance("SHA1PRNG");
sr.nextBytes(rnd); // <---- Uh oh - problems
Den markerade raden var det som tog tid...
Efter lite googling så kunde jag lista ut att källan till problemet var att Ubuntu fick slut på entropy som används av SecureRandom för att skapa slump värdet. Lösningen på problemet var att installera rng-tools
sudo apt-get install rng-tools
När installationen var klar och tjänsten skulle starta fick jag ett felmeddelande
...
Trying to create /dev/hwrng device inode...
Starting Hardware RNG entropy gatherer daemon: (failed).
invoke-rc.d: initscript rng-tools, action "start" failed.
Lösningen på det felet är att editera filen /etc/default/rng-tools
sudo vi /etc/default/rng-tools
Och lägga till följande rad
HRNGDEVICE=/dev/urandom
Sen så är det bara att starta tjänsten
sudo /etc/init.d/rng-tools start
Därefter så startade min applikation på nolltid igen.
Hur skulle man klara sig utan Google? Hur löste man problem innan internet fanns tillgängligt? Jag bara undrar...