Java 8 + Glassfish 4 asennus Debian Linuxiin – osa 1

Ajattelin kirjailla kokemuksia Glassfish Linux asennuksesta, 64-bittiseen Debianiin. Osaan 1 laitan perusohjeistusta, osaan 2 tulee sudenkuoppia ja yksityiskohtia.

Olen kirjoitellut jo aiemmin tästä Raspberry Pi vinkkelistä, mutta tässä vähän lisää yksityiskohtia. Tarinaa olen haalinut hyvistä muista blogeista, ja pistän linkkiä loppuun, mutta ainakin paras niistä on häviämässä netistä joten pistän tämän itsellekin talteen.

Testailin juuri asennuksia AWS pilvipalvelun 64-bittiseen Ubuntuun, ja näyttäisi pelittävän ihan heittämällä myös sinne.

Alkuun tarvitaan Java, JDK 7 tai 8, itsellä tietenkin 8. Tästä taisin juuri kirjailla, miten Java on lisenssiteknisistä syistä vähän jännä asennella. Mutta tässä Oracle JDK 8 litaniat:

#make sure you're up-to-date
sudo apt-get update
sudo apt-get upgrade

#install oracle jdk 8
sudo echo "deb http://ppa.launchpad.net/webupd8team/java/ubuntu trusty main" | sudo tee /etc/apt/sources.list.d/webupd8team-java.list
sudo echo "deb-src http://ppa.launchpad.net/webupd8team/java/ubuntu trusty main" | sudo tee -a /etc/apt/sources.list.d/webupd8team-java.list
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys EEA14886
sudo apt-get update
sudo apt-get install oracle-java8-installer
java -version

Löytyykö sieltä Java? Hienoa!

Glassfish oletusasennus käyttelee root tunnaria joka on vähän hyi hyi. Tämän vuoksi meidän kannattaa tehdä prosessille uusi käyttäjätunnus, glassfish. Jos lähdet tälle polulle, muista että muokatessa glassfish kansion tiedostoja tai ajaessa prosessia, se tulisi aina tehdä glassfish tunnarien alla. Muuten voi syntyä tiedostoja joihin glassfish-serveriprosessi ei omaa pääsyä, esim. temp, cache, jne. Sen voi onneksi aina korjata chownaamalla koko glassfish hierarkian.

#Add a new user called 'glassfish' with group 'glassfish'
sudo adduser --system --group --home /home/glassfish [--shell /bin/bash] glassfish
#Enable an existing user to be a GlassFish administrator. Repeat for additional users.
sudo usermod -a -G glassfish existingUserAccountName
# can check your groups with:
groups #list should include 'glassfish' - remember to relogin here!

Sitten tuikataan Glassfish 4 zip release paikalleen:

#get glassfish 4 release
cd ~
wget http://download.java.net/glassfish/4.0/release/glassfish-4.0.zip

sudo apt-get install unzip
sudo unzip -d /opt/ glassfish-4.0.zip 

#glassfish is owner of this folder
sudo chown -R glassfish:glassfish /opt/glassfish4
#glassfish can freely access bin folders and autodeploy
sudo chmod -R ug+rw /opt/glassfish4
#glassfish can execute binaries
sudo chmod -R ug+rwx /opt/glassfish4/bin
sudo chmod -R ug+rwx /opt/glassfish4/glassfish/bin
#others are not allowed to access glassfish
sudo chmod -R o-rwx /opt/glassfish4/

Seuraavaksi fiksataan proaktiivisesti yksi asia: Java seiskan viimeisimmissä päivityksissä – ja myös Java 8:ssa – on tiukennettu tietoturva-asetuksia. Tästä johtuen esim. Derby tietokantaa ei saa käyntiin ellei sitä salli policyissä. Tässä on karu tapa lisätä kaikelle ajettavalle Java-koodille oikeus käyttää Derby-porttia. Tätä voi tiukentaa halutessaan esim. kansiokohtaiseksi:

#edit $JAVA_HOME/jre/lib/security/java.policy, insert following between existing grant blocks:
grant {
 // allows Derby to claim port 1527
 permission java.net.SocketPermission "localhost:1527", "listen,resolve";
};

Seuraavaksi päräytetään vaihtaen glassfish tunnarille – jotta luotavat tiedostot menevät oikeille omistussuhteille ja oikeuksille. Käynnistetään derby ja glassfish jotta voidaan todeta toimiiko kaikki:

#now, run glassfish server & database
sudo su --shell /bin/bash glassfish
whoami # should say 'glassfish'
/opt/glassfish4/bin/asadmin start-database
/opt/glassfish4/bin/asadmin start-domain domain1

Kaikki hyvin? Voit testata varmuudeksi löytääkö selain portit:

http://localhost:8080

https://localhost:8181

http://localhost:4848

Jos näyttää hyvältä, on aika sammutella Glassfish, ja poistua glassfish tunnuksesta takaisin omaan:

/opt/glassfish4/bin/asadmin stop-domain domain1
/opt/glassfish4/bin/asadmin stop-database
exit

Jos kaikki löytyy, voit seuraavaksi asentaa tämän palveluna. Aloitetaan Glassfishin omalla työkalulla:

sudo /opt/glassfish4/bin/asadmin create-service

Valitettavasti käynnistysscripti jonka tämä luo on täyttä moskaa. Jos käynnistäisit nyt koneen, se ei toimisi. Siinä on monia virheitä:
– init.d scriptit ajetaan ennenkuin esim. profile tiedostot ja niiden pathit on käsitelty. Näin mitään työkaluja ei ole patheissa vaan pathit pitää exportoida erikseen, tai viitata koko absoluuttisilla poluilla
– scriptistä puuttuu service header tiedostot jotka estävät sen toiminnan
– oletusscripti ajelee serveriä roottina, joten jos sinne pujahtaa pätkä ilkeämmän puoleista koodia jonkun haavoittuvuuden vuoksi…. WORLD DOMINATION!!!
– derby kanta olisi myös hyvä käynnistellä ja sammutella
– olisi kiva saada status tietoja

Joten, korvataan scripti parannetulla versiolla. Avaa editori:

sudo nano /etc/init.d/GlassFish_domain1

Jyrää vanha moska tällä, säädä tarpeen mukaan vastaamaan omia polkujasi tai tarpeitasi:

#! /bin/sh
### BEGIN INIT INFO
# Provides: glassfish
# Required-Start: $remote_fs $network $syslog
# Required-Stop: $remote_fs $network $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Starts GlassFish
# Description: Starts GlassFish application server
### END INIT INFO
# We need this, since NetworkServerControl uses $JAVA_HOME to find java
export JAVA_HOME="/usr/lib/jvm/java-8-oracle"
GLASSFISH=/opt/glassfish4
DERBY_BIN=/opt/glassfish4/javadb/bin
case "$1" in
start)
 echo "Starting GlassFish from $GLASSFISH"
 sudo -u glassfish -E "$GLASSFISH/bin/asadmin" start-database
 sudo -u glassfish -E "$GLASSFISH/bin/asadmin" start-domain domain1
 ;;
stop)
 echo "Stopping GlassFish from $GLASSFISH"
 sudo -u glassfish -E "$GLASSFISH/bin/asadmin" stop-domain domain1
 sudo -u glassfish -E "$GLASSFISH/bin/asadmin" stop-database
 ;;
restart)
 $0 stop
 $0 start
 ;;
status)
 echo "# GlassFish at $GLASSFISH:"
 sudo -u glassfish -E "$GLASSFISH/bin/asadmin" list-domains | grep -v Command
 sudo -u glassfish -E "$GLASSFISH/bin/asadmin" list-domains | grep -q "domain1 running"
 if [ $? -eq 0 ]; then
 sudo -u glassfish -E "$GLASSFISH/bin/asadmin" uptime | grep -v Command
 echo "\n# Deployed applications:"
 sudo -u glassfish -E "$GLASSFISH/bin/asadmin" list-applications --long=true --resources | grep -v Command echo "\n# JDBC resources:"
 sudo -u glassfish -E "$GLASSFISH/bin/asadmin" list-jdbc-resources | grep "jdbc/"
 fi
 echo "\n# Derby:"
 sudo -u glassfish -E "$DERBY_BIN/NetworkServerControl" ping | sed "s/^.* : //"
 ;;
*)
 echo "Usage: $0 {start|stop|restart|status}"
 exit 1
 ;;
esac
exit 0

Nättiä kuin kesäheinän teko. Tässä voi olla vielä parannettavaa mutta itselle ainakin varsin tyydyttävä toiminta. Pistä kommenttia jos tulee parannuksia itsellesi mieleen!

Aja seuraavaksi palvelun testi:

#test that it works:
/etc/init.d/GlassFish_domain1 start
/etc/init.d/GlassFish_domain1 status
/etc/init.d/GlassFish_domain1 stop

Jup, status voi heittää vähän autentikointivirheitä koska kannassa ei ole glassfish käyttäjää. Mutta palvelun pitäisi käynnistyä ja sammua tätä kautta. Seuraavaksi uudelleenasennetaan tämä palveluna, ja testataan että se toimii edelleen:

#cool, now let's update the autorun part with the script:
sudo update-rc.d GlassFish_domain1 defaults

#test that it works as a service
sudo service GlassFish_domain1 start

#if it seems to work, test that it REALLY works: 
sudo reboot

#and verify by connecting to http://thisservername:8080 and http://thisservername:4848

Nice? Yeah, hyvin pelittää. Ensi kerralla voitaisiin näperrellä servosta turvallisempi ja tehokkaampi.

Linuxin kanssa on kiva pitkästä aikaa puuhailla. Niissä servereissä on erona winkku servoihin että kun johonkin ei koske pitkään aikaan ja sen melkein unohtaa, se toimii yhtä hienosti kuin asennuspäivänä 😉

Linkkivinkki mitä itse eniten käytin: http://www.physics.usyd.edu.au/~rennie/glassfish.html

Advertisements

Vastaa

Täytä tietosi alle tai klikkaa kuvaketta kirjautuaksesi sisään:

WordPress.com-logo

Olet kommentoimassa WordPress.com -tilin nimissä. Log Out / Muuta )

Twitter-kuva

Olet kommentoimassa Twitter -tilin nimissä. Log Out / Muuta )

Facebook-kuva

Olet kommentoimassa Facebook -tilin nimissä. Log Out / Muuta )

Google+ photo

Olet kommentoimassa Google+ -tilin nimissä. Log Out / Muuta )

Muodostetaan yhteyttä palveluun %s