Showing posts with label Ubuntu. Show all posts
Showing posts with label Ubuntu. Show all posts

5/18/2017

Building IntelliJ Idea Community edition on Ubuntu 16.10

Building IntelliJ Idea on Ubuntu is just a bit more complex than simply executing ant.

Acquiring dependencies

The commented lines below are required if you wish to use jdk1.6; in practice, things seem to build without (as of May, 2017 at least)

#sudo add-apt-repository ppa:webupd8team/java
#sudo apt-get update
#sudo apt-get install oracle-java6-installer
#sudo update-alternatives --config java
sudo apt-get install zlib1g-dev ant git
mkdir $HOME/tools
cd $HOME/tools
git clone git://git.jetbrains.org/idea/community.git idea
cd idea
./getPlugins.sh 
build/conf/install_nsis3.sh $HOME/tools/idea

If the build finishes with

...
scons: done building targets.
...the build of dependencies finished successfully.

Starting the build

If you've installed JDK1.6 (the commented lines above), here we need to refer to it (first line below). Again, IntelliJ Idea Community Edition builds without this, so left it commented out.

#export JDK_16_x64=/usr/lib/jvm/java-6-oracle
cd $HOME/tools/idea
ant

9/10/2014

Regenerate hinting for all fonts

First you have to install TTF Autohinter.
sudo apt-get install libtool automake autoconf qt4-qmake automoc imagemagick inkscape pandoc help2man
cd ~/tools
git clone http://repo.or.cz/ttfautohint.git
cd ttfautohint/
./bootstrap
./configure --with-doc=no
make
make install
Under Ubuntu 12.04, you will need to download and compile harfbuzz:
wget http://www.freedesktop.org/software/harfbuzz/release/harfbuzz-0.9.26.tar.bz2
tar xf harfbuzz-0.9.26.tar.bz2
cd harfbuzz-0.9.26
./configure && make && sudo make install
sudo ldconfig
Under later versions you may try sooner or later
sudo apt-get install harfbuzz
Then it's so simple:
mkdir -p ~/.fonts
for file in $(find /usr -name '*.ttf'); do ttfautohint -c -d -i --hinting-range-min=6 -i $file ~/.fonts/${file##*/}; done
fc-cache -fv

9/09/2014

Installing Nexus OSS from sources

After all it's not that tricky. Build fails with Maven 3.0.x, make sure to use a later version, 3.2.3 seems to be working fine. You'll also need the http.ssl hacks.

Pre-requisities

You'll need git. Using Ubuntu/Debian, a
sudo apt-get install git
will do, or on FreeBSD you can use
sudo portmaster devel/git
And now the fun part. On FreeBSD, the lines involving maven can be omitted if a version is already installed via ports via a "sudo portmaster devel/maven3"
cd ~/tools
wget http://apache.cu.be/maven/maven-3/3.2.3/binaries/apache-maven-3.2.3-bin.tar.gz
tar xvzf apache-maven-3.2.3-bin.tar.gz
ln -s ~/tools/apache-maven-3.2.3 ~/tools/maven
export PATH=~/tools/maven/bin:$PATH

export MAVEN_OPTS="-XX:PermSize=1500m -XX:MaxPermSize=1800m -Xmx4g"
cd ~/dev
git clone https://github.com/sonatype/nexus-oss.git
cd nexus-oss

# if you don't need https just uncomment below 
cat >> etc/org.sonatype.nexus.cfg << FILE_SEPARATOR
application-port-ssl=8443
FILE_SEPARATOR

mvn -Dskip-testsuite -DskipTests -Dmaven.wagon.http.ssl.insecure=true -Dmaven.wagon.http.ssl.allowall=true
sudo unzip -d /opt assemblies/nexus-base-template/target/nexus-base-template-*.zip
sudo ln -s /opt/nexus-base-template-* /opt/nexus

Autostart on Ubuntu/Debian

As of today, the wrapper service we can use in Karaf to autostart things does not work. As a workaround to autostart, create a /etc/init.d/nexus file:
#!/bin/bash

NEXUS_HOME=/opt/nexus

case "$1" in
  start)
    log_begin_msg "Starting Nexus OSS..."
        $NEXUS_HOME/bin/start
    log_end_msg 0
    ;;
  stop)
    log_begin_msg "Shutting down Nexus OSS..."
        $NEXUS_HOME/bin/stop
    log_end_msg 0
    ;;
  *)
  ;;
esac
...and execute this statement:
sudo update-rc.d nexus defaults 98 02

Autostart on FreeBSD

Start by putting the following script to /etc/rc.d/nexus:
#!/bin/sh

. /etc/rc.subr

name="nexus"
start_cmd="\${name}_start"
stop_cmd="\${name}_stop"
export NEXUS_HOME=/opt/nexus
export JAVA_HOME=/usr/local/openjdk7

nexus_start() {
        \$NEXUS_HOME/bin/start
}

nexus_stop() {
        \$NEXUS_HOME/bin/stop
}

load_rc_config \${name}
run_rc_command "\$1"
...and adapt appropriately to your system of course. You'll need to make it executable:
chmod +x /etc/rc.d/nexus

To activate it, you need to add the following to your /etc/rc.conf:
nexus_enable="YES"

If you need this often

If you need to re-do the same thing from time to time in different environments for different projects, you prefer to simplify things. So here is the single-copy-paste-prepared version; the same as above, this time without the explanation, automated.

cat > /etc/rc.d/nexus << FILE_SEPARATOR
#!/bin/sh

. /etc/rc.subr

name="nexus"
start_cmd="\${name}_start"
stop_cmd="\${name}_stop"
export NEXUS_HOME=/opt/nexus
export JAVA_HOME=/usr/local/openjdk7

nexus_start() {
        \$NEXUS_HOME/bin/start
}

nexus_stop() {
        \$NEXUS_HOME/bin/stop
}

load_rc_config \${name}
run_rc_command "\$1"
FILE_SEPARATOR
chmod +x /etc/rc.d/nexus

cat >> /etc/rc.conf << FILE_SEPARATOR
nexus_enable="YES"
FILE_SEPARATOR

service nexus start

Usage

To deploy to the locally installed Nexus, you can
  • - change your pom.xmls to refer to this local nexus for deployment
  • - change your settings.xml use the local nexus for deployment
  • <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
                              http://maven.apache.org/xsd/settings-1.0.0.xsd">
    
       <mirrors>
            <mirror>
                <id>nexus</id>
                <name>nexus</name>
                <mirrorOf>external:*</mirrorOf>
                <url>http://127.0.0.1:8081/content/groups/public/</url>
            </mirror>
        </mirrors>
    
        <servers>
            <server>
                <id>jnc</id>
                <username>tomcat</username>
                <privateKey>${user.home}/.ssh/id_rsa</privateKey>
            </server>
            <server>
                <id>nexus</id>
                <username>admin</username>
                <password>{Oen5wNM4lygHMZ9vf+6T5qmsePRcQbWtrc2AWkTrpKg=}</password>
            </server>
            <server>
                <id>snapshots</id>
                <username>admin</username>
                <password>{Oen5wNM4lygHMZ9vf+6T5qmsePRcQbWtrc2AWkTrpKg=}</password>
            </server>
            <server>
                <id>releases</id>
                <username>admin</username>
                <password>{Oen5wNM4lygHMZ9vf+6T5qmsePRcQbWtrc2AWkTrpKg=}</password>
            </server>
        </servers>
    
        <profiles>
            <profile>
                <id>local</id>
                <activation>
                    <activeByDefault>true</activeByDefault>
                </activation>
                <properties>
        <nexus.url>http://127.0.0.1:8081</nexus.url>
                    <repos.public.url>${nexus.url}/content/groups/public</repos.public.url>
                    <repos.release.url>${nexus.url}/content/repositories/releases</repos.release.url>
                    <repos.snapshot.url>${nexus.url}/content/repositories/snapshots</repos.snapshot.url>
                </properties>
                <repositories>
                    <repository>
                        <id>nexus</id>
                        <name>public</name>
                        <url>${repos.public.url}</url>
                        <layout>default</layout>
                        <snapshots>
                            <enabled>true</enabled>
                            <updatePolicy>always</updatePolicy>
                        </snapshots>
                        <releases>
                            <enabled>true</enabled>
                            <updatePolicy>daily</updatePolicy>
                        </releases>
                    </repository>
                    <repository>
                        <id>snapshots</id>
                        <name>snapshots</name>
                        <url>${repos.snapshot.url}</url>
                        <layout>default</layout>
                        <snapshots>
                            <enabled>true</enabled>
                            <updatePolicy>always</updatePolicy>
                        </snapshots>
                        <releases>
                            <enabled>false</enabled>
                            <updatePolicy>daily</updatePolicy>
                        </releases>
                    </repository>
                    <repository>
                        <id>releases</id>
                        <name>releases</name>
                        <url>${repos.release.url}</url>
                        <layout>default</layout>
                        <snapshots>
                            <enabled>false</enabled>
                        </snapshots>
                        <releases>
                            <enabled>true</enabled>
                            <updatePolicy>daily</updatePolicy>
                        </releases>
                    </repository>
                </repositories>
    
                <pluginRepositories>
                    <pluginRepository>
                        <id>nexus</id>
                        <name>public</name>
                        <url>${repos.public.url}</url>
                        <layout>default</layout>
                        <snapshots>
                            <enabled>true</enabled>
                            <updatePolicy>always</updatePolicy>
                        </snapshots>
                        <releases>
                            <enabled>true</enabled>
                            <updatePolicy>daily</updatePolicy>
                        </releases>
                    </pluginRepository>
                    <pluginRepository>
                        <id>snapshots</id>
                        <name>snapshots</name>
                        <url>${repos.snapshot.url}</url>
                        <layout>default</layout>
                        <snapshots>
                            <enabled>true</enabled>
                            <updatePolicy>always</updatePolicy>
                        </snapshots>
                        <releases>
                            <enabled>false</enabled>
                            <updatePolicy>daily</updatePolicy>
                        </releases>
                    </pluginRepository>
                    <pluginRepository>
                        <id>releases</id>
                        <name>releases</name>
                        <url>${repos.release.url}</url>
                        <layout>default</layout>
                        <snapshots>
                            <enabled>false</enabled>
                        </snapshots>
                        <releases>
                            <enabled>true</enabled>
                            <updatePolicy>daily</updatePolicy>
                        </releases>
                    </pluginRepository>
                </pluginRepositories>
            </profile>
        </profiles>
    </settings>
    
    
    ...and this goes to settings-security.xml, using the default password for authentication. If following this guide, on your local, firewalled server the default username/password combination might do. Otherwise change your password in nexus and update your settings.xml and settings-security.xml appropriately as described here.
    <settingsSecurity>
      <master>{KFp2s9kTyrcHsy+BT4dooaLri1eMcy+32raBPgydYvw=}</master>
    </settingsSecurity>
    
  • - use the following construct which overrides your default deployment directory:
    mvn clean deploy -DaltDeploymentRepository=nexus::default::http://127.0.0.1:8081/content/repositories/snapshots
    

Possible errors

Using Maven versions earlier than 3.2.3 may yield to the following error:
Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty

9/05/2014

Installing JDK 1.6, JDK 1.7 and JDK 1.8 from binary

You never know which one you need. Obviously if you have the luxury of a package manager, that will be better, especially if the PM supports multiple versions. Here I didn't have root permissions on a PC still I needed all versions; the switch can be made by sim-linking the proper version to ~/tools/jdk. Don't forget to download the files first - can't do wget since we have to accept the license agreement. Here we go:

JDK1.6

mv ~/Downloads/jdk-6u45-linux-x64.bin .
chmod +x jdk-6u45-linux-x64.bin
./jdk-6u45-linux-x64.bin

JDK1.7

mv ~/Downloads/jdk-7u67-linux-x64.tar.gz ~/tools
tar xvzf jdk-7u67-linux-x64.tar.gz

JDK1.8

mv ~/Downloads/jdk-8u11-linux-x64.tar.gz .
tar xvzf jdk-8u11-linux-x64.tar.gz
If you add ~/tools/jdk/bin to your PATH (via ~/.profile?), here's how touse jdk 1.8 as default:
ln -s ~/tools/jdk1.8.0_11 ~/tools/jdk

Building and installing PostgreSQL 9.3.5 from sources (no sudo needed)

cd ~/dev
wget http://ftp.postgresql.org/pub/source/v9.3.5/postgresql-9.3.5.tar.gz
tar xvzf postgresql-9.3.5.tar.gz
ln -s postgresql-9.3.5 postgresql
cd postgresql-9.3.5/
./configure --without-readline --prefix=$HOME/tools/postgresql
make
make install
~/tools/postgresql/bin/initdb -D ~/tools/postgresql/data
~/tools/postgresql/bin/pg_ctl -D ~/tools/postgresql/data -l ~/tools/postgresql/postgresql.log start
~/tools/postgresql/bin/createdb mydatabasename
To autostart the server, add this to a startup script:
~/tools/postgresql/bin/pg_ctl -D ~/tools/postgresql/data -l ~/tools/postgresql/postgresql.log start

Building and installing Apache Tomcat 7.0 from sources (no sudo needed)

You will need ant though. If you have a package manager and the appropriate rights it's super easy, either "apt-get install ant" on Ubuntu or "portmaster devel/apache-ant" on FreeBSD - or download and put ant to ~/tools. You will also need to update your PATH so that ant can be found.
cd ~/tools
svn co http://svn.apache.org/repos/asf/tomcat/tc7.0.x/trunk ~/tools/apache-tomcat-7-sources
cd ~/tools/apache-tomcat-7-sources
ant -Dbase.path=~/tools/apache-tomcat-7-sources/base download-compile
ant -Dbase.path=~/tools/apache-tomcat-7-sources/base deploy
mkdir -p ~/tools/apache-tomcat-7
mv ~/tools/apache-tomcat-7-sources/output/build/* ~/tools/apache-tomcat-7/
ln -s ~/tools/apache-tomcat-7 ~/tools/tomcat
That concludes the installation. In case you need some JDBC drivers and alike (unfortunately Tomcat 7 does not manage our dependencies like Karaf), here is a sample:
cd ~/tools/tomcat/lib/
wget http://repo1.maven.org/maven2/org/hsqldb/hsqldb/2.3.2/hsqldb-2.3.2.jar
wget http://repo1.maven.org/maven2/org/postgresql/postgresql/9.3-1102-jdbc41/postgresql-9.3-1102-jdbc41.jar
wget http://repo1.maven.org/maven2/javax/activation/activation/1.1.1/activation-1.1.1.jar
wget http://repo1.maven.org/maven2/javax/mail/mail/1.5.0-b01/mail-1.5.0-b01.jar
You may need to add this to ~/.profile file:
export JAVA_HOME=$HOME/tools/jdk

Building and installing Apache Karaf from sources (no sudo needed)

Once upon a time I was working for a company where sudo rights weren't given to developers. So I had to spend a significant fraction of my time finding workarounds, how silly is that. The no-sudo-needed series is the result of all these efforts: I've saved the process, so next time it is needed, it's easy to get back to it.

The point here is to be able to install them just by copying and pasting the code below. Things change around us though, so whatever may build today might just stop working tomorrow. Thus I do my best to keep these code snippets up-to-date.

Like today I need Karaf again. Building from source feels very appropriate, so even though I have sudo on my computers since leaving that company, I still keep coming back here for the "easy builds". Today I updated with Karaf 2.3.11, it is currently building in another window. If succeeds, I'll create another snippet for it. If you need it, feel free to get it!

Building Apache Karaf 2.3.11 from sources

wget http://apache.belnet.be/karaf/2.3.11/apache-karaf-2.3.11-src.tar.gz
tar xvzf apache-karaf-2.3.11-src.tar.gz
cd apache-karaf-2.3.11/src
mvn clean install -DskipTests
mv assemblies/apache-karaf/target/apache-karaf-2.3.11.tar.gz ~/tools
cd ~/tools
tar xvzf apache-karaf-2.3.11.tar.gz
ln -s apache-karaf-2.3.11 karaf

Building Apache Karaf 2.3.6 from sources

wget http://apache.belnet.be/karaf/2.3.6/apache-karaf-2.3.6-src.tar.gz
tar xvzf apache-karaf-2.3.6-src.tar.gz
cd apache-karaf-2.3.6/src
mvn clean install -DskipTests
mv assemblies/apache-karaf/target/apache-karaf-2.3.6.tar.gz ~/tools
cd ~/tools
tar xvzf apache-karaf-2.3.6.tar.gz
ln -s apache-karaf-2.3.6 karaf

Building Apache Karaf 4.0 from sources

git clone https://git-wip-us.apache.org/repos/asf/karaf.git
cd karaf
git checkout karaf-4.0.0
# to avoid "Detected JDK Version: 1.6.0-65 is not in the allowed range [1.7,1.9)" on osx, can only build with 1.7
export JAVA_HOME=`/usr/libexec/java_home -v 1.7`
mvn clean install -DskipTests

Building Karaf 4.0.10 from sources, checking out given branch only, building with java 1.8 on OSX:

git clone -b karaf-4.0.10 --single-branch https://github.com/apache/karaf.git
cd karaf
export JAVA_HOME=`/usr/libexec/java_home -v 1.8`
mvn clean install -DskipTests -DskipITs

Building and installing Apache Karaf 2.2.5 or 2.3.11 from sources (no sudo needed)

In my ~/.m2/settings.xml, I have a separate profile which uses a local Nexus repository as a proxy to all the remotes. It is not active by default, only activated with the -P local switch. Thus please don't update your settings.xml like this if you don't have a local Nexus proxy (and you won't need the "-P local" switch later neither in this case). The relevant part of my settings.xml:
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
                          http://maven.apache.org/xsd/settings-1.0.0.xsd">
    <profiles>
        <profile>
            <id>local</id>
            <!--<activation>-->
            <!--<activeByDefault>true</activeByDefault>-->
            <!--</activation>-->
            <properties>
                <repos.release.url>http://127.0.0.1:8081/content/groups/public</repos.release.url>
                <repos.snapshot.url>http://127.0.0.1:8081/content/groups/public</repos.snapshot.url>
            </properties>
            <repositories>
                <repository>
                    <id>nexus</id>
                    <name>public</name>
                    <url>http://127.0.0.1:8081/content/groups/public</url>
                    <layout>default</layout>
                    <snapshots>
                        <enabled>true</enabled>
                        <updatePolicy>always</updatePolicy>
                    </snapshots>
                    <releases>
                        <enabled>true</enabled>
                        <updatePolicy>daily</updatePolicy>
                    </releases>
                </repository>
                <repository>
                    <id>snapshots</id>
                    <name>snapshots</name>
                    <url>http://127.0.0.1:8081/content/repositories/snapshots</url>
                    <layout>default</layout>
                    <snapshots>
                        <enabled>true</enabled>
                        <updatePolicy>always</updatePolicy>
                    </snapshots>
                    <releases>
                        <enabled>false</enabled>
                        <updatePolicy>daily</updatePolicy>
                    </releases>
                </repository>
                <repository>
                    <id>releases</id>
                    <name>releases</name>
                    <url>http://127.0.0.1:8081/content/repositories/releases</url>
                    <layout>default</layout>
                    <snapshots>
                        <enabled>false</enabled>
                    </snapshots>
                    <releases>
                        <enabled>true</enabled>
                        <updatePolicy>daily</updatePolicy>
                    </releases>
                </repository>
            </repositories>

            <pluginRepositories>
                <pluginRepository>
                    <id>nexus</id>
                    <name>public</name>
                    <url>http://127.0.0.1:8081/content/groups/public</url>
                    <layout>default</layout>
                    <snapshots>
                        <enabled>true</enabled>
                        <updatePolicy>always</updatePolicy>
                    </snapshots>
                    <releases>
                        <enabled>true</enabled>
                        <updatePolicy>daily</updatePolicy>
                    </releases>
                </pluginRepository>
                <pluginRepository>
                    <id>snapshots</id>
                    <name>snapshots</name>
                    <url>http://127.0.0.1:8081/content/repositories/snapshots</url>
                    <layout>default</layout>
                    <snapshots>
                        <enabled>true</enabled>
                        <updatePolicy>always</updatePolicy>
                    </snapshots>
                    <releases>
                        <enabled>false</enabled>
                        <updatePolicy>daily</updatePolicy>
                    </releases>
                </pluginRepository>
                <pluginRepository>
                    <id>releases</id>
                    <name>releases</name>
                    <url>http://127.0.0.1:8081/content/repositories/releases</url>
                    <layout>default</layout>
                    <snapshots>
                        <enabled>false</enabled>
                    </snapshots>
                    <releases>
                        <enabled>true</enabled>
                        <updatePolicy>daily</updatePolicy>
                    </releases>
                </pluginRepository>
            </pluginRepositories>
        </profile>
    </profiles>
</settings>

...and the script for the build for version 2.2.5:
mkdir -p ~/tools
cd ~/tools
wget http://archive.apache.org/dist/karaf/2.2.5/apache-karaf-2.2.5-src.tar.gz
tar xvzf apache-karaf-2.2.5-src.tar.gz
cd apache-karaf-2.2.5/src
mvn clean install -DskipTests -P local
sudo mkdir -p /opt
cd /opt
sudo tar xvzf ~/tools/apache-karaf-2.2.5/src/assemblies/apache-karaf/target/apache-karaf-2.2.5.tar.gz
sudo ln -s apache-karaf-2.2.5 karaf

For version 2.3.11

mkdir -p ~/tools
cd ~/tools
wget http://archive.apache.org/dist/karaf/2.3.11/apache-karaf-2.3.11-src.tar.gz
tar xvzf apache-karaf-2.3.11-src.tar.gz
cd apache-karaf-2.3.11/src
mvn clean install -DskipTests -P local
sudo mkdir -p /opt
cd /opt
sudo tar xvzf ~/tools/apache-karaf-2.3.11/src/assemblies/apache-karaf/target/apache-karaf-2.3.11.tar.gz
sudo ln -s apache-karaf-2.3.11 karaf

Autostart on Ubuntu: to wrap or not to wrap

If you try to install the wrapper to achieve autostart, everything seems to be fine, but the wrapper segfaults on subsequent reboots, at least that's the sad situation on Ubuntu 12.04.5. This used to work before.
Still it has to work, so the workaround is to create a /etc/init.d/karaf script with this content:
#!/bin/bash

KARAF_HOME=/home/neusoft/tools/karaf

case "$1" in
  start)
    log_begin_msg "Starting Karaf..."
        $KARAF_HOME/bin/start
    log_end_msg 0
    ;;
  stop)
    log_begin_msg "Shutting down Karaf..."
        $KARAF_HOME/bin/stop
    log_end_msg 0
    ;;
  *)
  ;;
esac
To register the file with the system
sudo update-rc.d karaf defaults 98 02

Autostart on FreeBSD

Using FreeBSD, autostarting the service is different:

echo 'karaf_enable="YES"' | sudo tee -a /etc/rc.conf > /dev/null

The rc.conf entry will start the script under /etc/rc.d. And the contents of the /etc/rc.d/karaf file:

#!/bin/sh
. /etc/rc.subr
export KARAF_OPTS="-Dkey=value"
start_cmd="karaf_start"
stop_cmd="karaf_stop"
karaf_start() {
        export JAVA_HOME=/usr/local/openjdk7
        /opt/karaf/bin/start
}
karaf_stop() {
        export JAVA_HOME=/usr/local/openjdk7
        /opt/karaf/bin/stop
}
load_rc_config $name
run_rc_command "$1"

Then you just have to make it executable:

sudo chmod +x /etc/rc.d/karaf

Or even make a symbolic link for the ones expect logs to be at standard places:

sudo ln -s /opt/karaf/data/log /var/log/karaf

Gotchas

Building on OSX Yosemite with Apple's JDK 1.6 succeeds, but logging on shows that we have a crippled container:

# features:addurl http://repo1.maven.org/maven2/org/apache/felix/org.apache.felix.ipojo.features/1.12.0/org.apache.felix.ipojo.features-1.12.0.xml
# Command not found: features:addurl

Investigating /opt/karaf/data/log/karaf.log shows us the cause of the error:

"Bundle org.apache.karaf.features.command is waiting for dependencies [(objectClass=org.apache.karaf.features.FeaturesService)]"

Installing Oracle JDK 1.7 & setting JAVA_HOME appropriately fixes the problem.

export JAVA_HOME=`/usr/libexec/java_home -v 1.7`
...
(rebuild the whole shebang)
...

Building and installing Apache Maven from sources (no sudo needed)

Maven 3.0.3

Maven 3.0.4 is known for it's incompatibilities connecting to self signed certificates, which can be solved by a small patch. If you don't depend on this version, it's even easier not to use the broken version at all. Here's how to build from sources:
mkdir -p ~/tools
cd ~/tools
wget http://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.0.3/apache-maven-3.0.3-src.tar.gz
tar xvzf apache-maven-3.0.3-src.tar.gz
cd apache-maven-3.0.3
#for the next line to succeed, you need a binary maven version in the path
mvn clean install -DskipTests
cd ..
tar xvzf apache-maven-3.0.3/apache-maven/target/apache-maven-3.0.3-bin.tar.gz

Maven 3.2.3

mkdir -p ~/tools
cd ~/tools
wget http://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.2.2/apache-maven-3.2.2-src.tar.gz
tar xvzf apache-maven-3.2.2-src.tar.gz
cd apache-maven-3.2.2
#for the next line to succeed, you need a binary maven version in the path
mvn clean install -DskipTests
cd ..
tar xvzf apache-maven-3.2.2/apache-maven/target/apache-maven-3.2.2-bin.tar.gz

2/27/2014

Dual booting Ubuntu 12.04 and FreeBSD 10

Well first install Ubuntu, creating a separate /boot partition with 256MB space, a 10GB-ish Ubuntu partition, and leave free space at the end of the hard drive for FreeBSD.
Now install FreeBSD. Boot from USB Disk, chose Install FreeBSD, partitioning for beginners. This will auto-detect the space you've left out earlier for FreeBSD; don't type anything to the Mount Path, it will automatically create a master partition, where it handles the mount points automatically. Unless of course, you want a different partition-setup which you do with the tool here.
Be sure to have the / mounted to a UFS-formatted partition (this should be done for you automatically if you've followed the earlier steps), and proceed with the installation.
After the FreeBSD installer finished and you reboot your computer, you'll get the Linux bootloader, of course with no option to start FreeBSD. So here we go, let's fix GRUB:
sudo grub-probe -d /dev/sda1 -t fs_uuid  
should tell you the disk you have a UUID for. That should be your FreeBSD disk - now replace my UUID with yours for grub:
sudo vi /etc/grub.d/40_custom
should fire you up VI, here's my file:
menuentry 'FreeBSD' {
   insmod ufs2
   insmod bsd
   search --fs-uuid --no-floppy --set=root 011c86ed-6f2d-48a0-a132-f020c23a045c
   kfreebsd /boot/kernel/kernel
   kfreebsd_loadenv /boot/device.hints
   set FreeBSD.vfs.root.mountfrom=ufs:/dev/ufsid/011c86ed-6f2d-48a0-a132-f020c23a045c
   set FreeBSD.vfs.root.mountfrom.options=rw
}
Exit vi with :wq, update grub on disk:
sudo update-grub
Reboot your computer and you should be able to select FreeBSD in Grub now. Drop me a comment how it worked. Cheers!

12/28/2013

Building http://bellebonnesage.sourceforge.net/ generates fatal error: 'freetype/ftglyph.h' file not found

If you are on Mac OS, and trying to build Belle, Bonne, Sage from sources, you may experience the following error:

#svn co https://bellebonnesage.svn.sourceforge.net/svnroot/bellebonnesage/trunk bbs
#cd bbs
#./Scripts/MakeAll

Cleaning Build
Building Beaming
Building BlankPage
Building Chopin
Building Color
Building ConvertFont
Building Graph
Building Image
Building Spiral
Building Springs
Building Springs2
Building Text
Building Tutorial0
Building Tutorial1
Building Tutorial2
Building Tutorial3
In file included from ../Examples/Color.cpp:40:
In file included from ../Examples/../BelleBonneSage.h:95:
../Examples/../Modules/FreeType.h:48:10: fatal error: 'freetype/ftglyph.h' file not found
#include 
         ^
In file included from ../Examples/ConvertFont.cpp:40:
In file included from ../Examples/../BelleBonneSage.h:95:
../Examples/../Modules/FreeType.h:48:10: fatal error: 'freetype/ftglyph.h' file not found
#include 
         ^

That's because you don't have the ftgl library installed:

#brew install ftgl

3/05/2010

Make Ubuntu or FreeBSD look like OSX

Installing the Aurora Leopard BSM Theme

The Aurora Leopard BSM Theme provides a beautiful, minimalistic appearance. This is how it looks like:

Ubuntu

First we have to install the GTK engine. The steps to take:

sudo apt-get install build-essential libgtk2.0-dev gconf-editor
wget http://gnome-look.org/CONTENT/content-files/56438-aurora-1.5.1.tar.bz2
tar -xvjf 56438-aurora-1.5.1.tar.bz2
tar xvzf aurora-gtk-engine-1.5.tar.gz
cd aurora-1.5
./configure --prefix=/usr --enable-animation
make
sudo make install

FreeBSD

On FreeBSD, install the devel/glib20 and the aurora port instead:
sudo portmaster devel/glib20 x11-themes/gtk-aurora-engine

Both OS: drag the theme

Now we can install the theme, by downloading it from here. Save it to the desktop, then open System->Preferences->Appearance, and drag&drop the downloaded file to this window. Ubuntu will install the theme for us.

Looks a bit like OSX? Indeed it does. To go one step further,  we can change the order of the buttons too (this is a copy from here):
1 - Press "Alt + F2"
2 - Type "gconf-editor" and press "Enter"
3 - Browse to "Apps -> metacity -> general"
4 - On right panel, double click on "button_layout"
5 - Change the value to "close,minimize,maximize:menu"
6 - Press "OK"

Now we have the chance to install their icon-libraries. I ended up using a built-in icon library instead. This is how it looks like:

To install it on Ubuntu:
sudo apt-get install gnome-human-icon-theme
Or, here's a nice one for FreeBSD:
sudo portmaster /usr/ports/x11-themes/gnome-icons-dropline-neu

Now if you click "Customize" under System->Preferences->Appearance->Aurora Leopard BSM, under the Icons tab you'll find GNOME-Human (or Dropline...)

One more thing. You can use the (already enabled by default) desktop effects if you like, but after a while it can become disturbing, so I usually disable it under System->Preferences->Appearance->Visual Effects (not to mention that Desktop Effects still have some compatibilty issues, if I'm not mistaken Google Earth didn't like it).

Still, compositing makes the user-interface snappier; if you go back to gconf-editor, at the same place where you've had the button_layout (apps->metacity->general), you can enable the compositing_manager by checking it. This is the setting I've found the most performing; let me know if you think otherwise or if you've found some other hacks!

Hope you like it! Cheers!
Lajos











3/04/2010

Ubuntu post-installation tasks

After the installation is done, some additional steps must be taken to have a nicely configured system. Just for the record, I'll collect here all the steps I've followed with a brand-new Ubuntu installation.

64 bit Flash-player

Like it or not, flash is a must these days. We keep on receiving youtube-links from friends, etc. Still, if you install through Synaptic, you'll get the 32bit version, which will grab all the 32bit libraries. No good - and the 64bit version feels much more solid. So let's install the 64bit version.

I followed more or less this post; for the record here are the steps I've taken in Terminal:
wget http://download.macromedia.com/pub/labs/flashplayer10/libflashplayer-10.0.45.2.linux-x86_64.so.tar.gz
tar xvzf libflashplayer-10.0.45.2.linux-x86_64.so.tar.gz
mkdir -p ~/.mozilla/plugins
mv libflashplayer.so ~/.mozilla/plugins/
Youtube works like a charm after.

64 bit Skype

Easy. Just download the 64bit version from here. Double-click the downloaded .deb file, which opens Package Installer. Click Install and voila.

Now is a good time to call the beautiful lady at Skype Call Testing Service, hopefully she's there - if you can't here your own voice, check if the microphone is your default input device.

I didn't find the 64bit version in any official ubuntu repositories, so had to go away with the .deb file: this means Skype will have to be updated manually from the Skype website if a new version is released. If you found a repo, let us know!

3/03/2010

Configuring Ubuntu to mount a shared HFS partition

If you have followed along the earlier series of this article, you may have already met one of the limitations of Ubuntu's HFS support: it can't write journaled HFS volumes. Thus, it makes sense to partition the drives with non-case-sensitive and non-journaled HFS where there is a need to read/write. You can also manually disable journaling if you already finished partitioning and you've had the journaled option turned on.

A decision to take: move the home folder, or make symbolic links?
In earlier iterations of my dual-boot configurations, I had my OSX home folder moved to the shared partition. This works quite well, at least up to the point when the system starts up after a "dirty shutdown" when the regular shutdown procedure was not executed properly: like when the computer was frozen and was killed with the power switch (or facing a power-outage on an iMac, or running out of battery on macbooks). In these cases, a disk-check was performed during startup, but since the check can't finish until the computer boots up (and OSX does not wait for the check to finish, rendering the shared volume inaccessible temporarly), we may face an empty home-folder after a dirty shutdown (so you'll face a brand-new configuration, like you have just finished installation, since it uses the unmounted /Users/username folder). This can be fixed by a logout-login, nevertheless it is not nice.

Not to mention if we do the same with Ubuntu: if the home folder is moved to the shared partition and the partition is dirty on boot-up, it will be read-only; if I'm not mistaken this has resulted being not able to login to the system at all. This sounds really bad, so in my experience the best option is to leave the home folders where they are (e.g. Ubuntu will have its' home folder on the EXT3 drive, OSX on the HFS drive), and we'll make symbolic links to the documents, pictures, videos folders on the shared partition. Until we keep our documents where they belong, they will be on the shared drive.

Mounting an HFS volume on Ubuntu

There are two ways to identify a partition to mount on linux: either by the device's name (like /dev/sda1) or by its UUID, which is just a random number. The UUID option is better, since a partition will be identified even if its' name changes (like when the number of partitions changes on a drive: /dev/sda3 won't be /dev/sda3 anymore as soon as we remove /dev/sda1 and /dev/sda2).

To see some information about your partitions, you can use the command blkid:


In this screenshot (don't let yourself fooled by the appearance, this is Ubuntu having a nice gnome-theme applied, thus looks a bit like OSX, pretty neat huh? See here how to install it) it is apparent that I have four partitions, and I will have to mount the last one. I will mount /dev/sda4. Yours can be different, so double-check.

To mount a partition, first we have to create the folder where it will be mounted. Open a terminal, and enter
sudo mkdir /mnt/shared
sudo chmod 777 /mnt/shared
Now we'll add an entry in /etc/fstab. Press Alt+F2 to bring up the Run Application dialog, and enter
gksudo gedit /etc/fstab

Enter your password when it's been asked. This will bring up the contents of the fstab file in the text-editor using the proper rights to edit it (you can use vi of course but then you won't need my assistance in any case...) Add a line to the end of this file:
/dev/sda4 /mnt/shared       hfsplus    rw        0       2
Of course, replacing my /dev/sda4 with the correct entry if needed. Save the file & exit the editor.

Using UUIDs
You could also use UUID to identify the partition; I don't know why, it didn't work for me. To acquire the UUID, copy the UUID from the blkid command (or, if you are using Jaunty you can use the sudo vol_id /dev/sda4 command too), and add the fstab line like this:

UUID=aae739de-bfb8-39d6-b60a-a6e47222e74a /mnt/shared       hfsplus    rw        0       2
Somehow, even though it worked the first time, it didn't work after a reboot, so I've had to fall back to the name. If you figured out the reason, please let us know!

Now we have everything in place. If you reboot, this should mount automagically, but you can mount it right away by entering
sudo mount -a
to a terminal-window. This mounts all filesystems mentioned in fstab - since all others are mounted anyway, ours will be mounted now. To see your mounted filesystems enter
sudo mount
Hopefully your shared partition will be on the list. To shorten the list you can also use
sudo mount | grep sda4

Preparing the shared partition

The shared partition will contain our documents, pictures, music, videos, etc. Now that we have our shared partition mounted, we can create symbolic links from our home folder, so that we don't have to navigate to the shared folder manually.

First let's create the folder for our documents:
mkdir /mnt/shared/doma
mkdir /mnt/shared/doma/Documents
Don't forget to replace my name with yours of course.
sudo or not to sudo? Using multiple accounts
We don't need sudo here, since we want to keep our credentials; by repeating this same process for another user using another name, his/her documents will be on the shared partition as well. Just don't forget to logout/login with the other user's account in this case.

Now just to be sure we don't lose anything, we can move all our may-be-existing documents already:
mv ~/Documents/* /mnt/shared/doma/Documents
Now the Documents folder should be empty. We can verify it with
ls ~/Documents
It should be empty. If it is, we are ready to create the symbolic link.

Creating the symbolic link

To create the symbolic link, enter
ln -sf /mnt/shared/doma/Documents ~
in the terminal. ln -s creates a symbolic link, the f parameter replaces the Documents folder if it exists (it does). Even if it looks like (and we wouldn't have moved our documents earlier), it does not destroy anything under the old /home/doma/Documents: if we remove the link, the contents of the (now hidden) folder would reappear. But since we've been careful and moved everything out of the folder earlier, it is empty anyway.

This same procedure can be repeated with the Pictures, Videos and other folders.

Moving the folders on OSX

In order to have a nice and clean system, we should move these folders in OSX as well. Thus, if we'll go to the Documents folder, both OSX and Ubuntu will go to the same folder.

The procedure is quite similar to the previous one. Let's create a small shell-script which will help us:
mkdir /Volumes/shared/doma/$1
mv ~/$1/* /Volumes/shared/doma/$1 && sudo rm -rf ~/$1
ln -s /Volumes/shared/doma/$1 ~
Copy these lines to TextEdit, make it Plain Text (format menu) and save the file in your home folder using the name mv.sh - and don't forget to replace my name with yours! This shell-script automates all the necessary steps for OSX. We'll have to make it executable first with
chmod +x mv.sh
Now we can execute it for all the folders we want to move. For the Documents folder, enter
./mv.sh Documents
You can do the same with your Movies, Music, Pictures folder if you like - but take iTunes' and iPhoto's proprietary folder-structure into account, you'll see the details of their file-storage in Ubuntu (that's linux anyway and supposed to be lower level right?). In any case, you'll have access to your files - and if you use some other, possibly multi-platform tool to manage your pictures and music, you may end up having a quite usable multi-platform system.

Drop a comment if it works for you, tell us how you've configured your system - and don't hesitate to ask if you have a question!

Thanks for dropping by - see y'all next time!






11/12/2009

Skype on Ubuntu: No microphone on CM8738

I have just installed Ubuntu 9.10 "Karmic Koala" on a PC containing a C-Media Electronics Inc CM8738 sound-card. Quite oddly, although the microphone seemed to work thru Application->Sound & Video->PulseAudio Volume Control, there was no playback from the Skype call testing service.

Right clicking on the Volume control icon -> Sound Preferences -> Input seemed also silent. After fooling around a bit I realized that I need to set the proper input device not in PulseAudio but in alsamixer. Typing alsamixer in a terminal starts the mixer:

Press F4 to view the Capture controls, then the right arrow until you reach the microphone:

Now press the Up Arrow to increase your volume to an acceptable level (I have set it to the max just in case), and press ESC to exit from the mixer. This sets the microphone as the default input device with an adequate volume.

Go back to Skype and redo that call-testing (she has a beautiful accent, hasn't she?)

Hopefully it works now!











11/11/2009

Reinstall OSX, and re-partition from scratch with the installer for dual booting with Ubuntu

(This is the third part of the article Dual booting OSX and Ubuntu without REFIT)

My only problem with resizing the original OSX Snow Leopard installation is that it comes with lots of stuff I'm not using and this consumes quite some valuable disk-space. Do you really want to sacrifice 1.2GB on Language Transitions and 1.62GB on printer drivers if you don't need it? (Well, the printer drivers you may need, I have a Canon printer for which the driver is not in OSX, so I'll install separately anyway - thus I can get rid of this 1.62GB). Since I only have a 128GB drive to do the installation and I will install Logic Studio consuming some 60gigs, I prefer the reinstallation. Let's see how it works!

First and foremost, don't forget to back-up all your valuable data, since this method will destroy everything on the hard-drive. Don't forget: neither me nor anybody else can and will take responsibility for what you are doing on your own computer!

So pop in that CD (or USB key - did you know you can install Snow Leopard from an USB key?) and start the installation.

First select your language and click the arrow to proceed. In the "Install Mac OS X" window, don't continue just yet; first we will have to re-partition our hard drive. So click Utilities->Disk Utility. Click on your drive, and click on the "Partition" tab. In the "Volume Scheme" dropdown, select "4 Partitions". This will split your drive to four, equally sized partitions. Good enough to start with!

My preferred layout is the following:

osx As I will have Logic Studio installed which will take like 60 gigs, I will have to leave a huge partition for OSX. So I'll make it 74GB (I tell you how I came up with this number: I tried before and Logic just did not fit on 64GB :-) If you don't have any huge programs like Logic Pro or Final Cut, 20GB should do for the OSX partition with Office.
home Will be visible from both Ubuntu and OSX, containing the documents we are working with: videos, pictures, source-files, etc; thus, it should fill up the remaining space from all the other partitions. Since the HFS driver in Linux is not able to read/write journaled HFS partitions, we will have to change the type of this partition to non-journaled HFS. It should be non-case-sensitive as well, since Adobe products are fooled with case-sensitive file-systems. So, it will be "Mac OS Extended", which is "non-case-sensitive/non-journaled".
ubuntu The Ubuntu partition will contain the Linux OS. 16GB will do for Karmic Koala.
swap The swap partition is the virtual memory; you have to set the size depending on the amount of RAM you have. I have 4GBs, and since I want to use Hibernation I have to set it to at least 4GB (see [Swap partition size for 4GB RAM - Super User]). If hibernation is not needed, you can go away with 1GB as well.

You should come up with a layout of your own, depending on your actual situation, HDD size, OSX & Linux usages.
I have a 128GB drive, so this is how it will look like:
  • osx(74GB)
  • home(34GB).
  • ubuntu(16GB)
  • swap(5GB)
Click on the bottom-rectangle which says "Untitled 4". This selects the partition for the swap. Enter "swap" in the Name, MS-DOS in the Format, and 5GB in the Size field.

Click on the next rectangle, which says "Untitled 3". This is the partition for the Linux filesystem. Enter "ubuntu" in the Name, MS-DOS in Format and 16GB in the Size field.

Click on the next rectangle saying "Untitled 2". This is the shared partition. Enter "home" in the Name field, as size enter 34GB (or whatever you have calculated as your Shared partition size)

Click on the topmost rectangle which says "Untitled 1". This will be the partition of our OSX installation. Enter "osx" in the Name field; the size should be already fine since it equals to the remaining of all our previous partition-sizes.

Now you can click on any of the rectangles to verify your partition-sizes. If you are content, press Apply. This will do the partitioning in no time.

When it is finished, you can close Disk Utility. In the Install Mac OS X window, press Continue. Agree the Licence Agreement after reading it through, then select your "Macintosh HD" as a target disk. If you click Customize, you can remove the Printer Support if you don't have a printer or if have your own driver to install after OSX installation; as well as the Additional Fonts if you don't use those languages. I usually deselect the Language Transitions since I'm using OSX in english anyway. X11 I usually keep, but that's just because I may need it if I end up doing development in OSX.

So just click OK and Install.

After the OSX installation is finished, you can continue and Install Ubuntu 9.10 "Karmic Koala" on an already partitioned drive.











Install Ubuntu 9.10 "Karmic Koala" on an already partitioned drive

(This is the fourth part of the article Dual booting OSX and Ubuntu without REFIT)

To me it seems 64bit code runs smoother on today's hardware, so I'm using the 64bit editions if I have the chance. All Apple hardware containing Core2Duo (or better, e.g. Core i5, Core i7) processors is capable of running 64bit code; so here we're going to install Ubuntu 9.10 Desktop 64bit also known as Karmic Koala (under "Alternative download options" you'll find the 64bit edition). The nice thing is that it doesn't really matter: there is hardly any difference in setting up 32 or 64 bit Linux distributions.

Somehow installing Ubuntu thru USB didn't work for me on a Macbook Pro 4.1. So I have burnt the image to a CD and installed it from there: pop in and boot from the CD (keep pressing Alt when you turn on your Mac and select the CD), and select "English" then "Try Ubuntu without any change to my computer". Sounds careful doesn't it?

Ubuntu starts up as a live distro. Double-click on the icon Install Ubuntu 9.10. Select the language to use and click Forward.


Select your timezone and click forward.


Select your keyboard layout and click forward. On a mac, it makes sense to select USA - Macintosh.


Now comes the interesting part, partitioning. Select Specify partitions manually (advanced) and click Forward.


Since OSX is using GPT instead of MBR for partitioning our drives, you can see some strange things here, like the 200MB EFI partition (/dev/sda1) or the 134MB disk spaces between the partitions. This is fine, we just have to "see through the lines". If we write the OSX names next to the partitions everything will be clear:

/dev/sda1209 MBEFI
/dev/sda274356 MBosx
/dev/sda334000 MBhome
/dev/sda416000 MBubuntu
/dev/sda54131 MBswap

So, let's mount /dev/sda4 to "/" which will be the root of our Linux filesystem. Double-click on the line beginning with /dev/sda4, in Use as select EXT4 journaling filesystem, click Format the partition, in the Mount Point select "/" and click OK.


Now we're going to create a swap partition. Doucle-click on the /dev/sda5 line, select swap area under Use as, and click OK.


We can't select HFS in the installer, so we'll have to mount the shared "home" partition later on ourselves by the fstab file. For now, we have a root partition and a swap partition, so just click forward!


Fill in all the necessary parameters in the intimidating "Who are you" dialog and click forward again.


In the Ready to install dialog, click Install (GRUB will go into MBR, which is fine). The installation commences and will be finished in no time. Press Restart Now.

When the Mac starts up, you'll have to hold the Alt key for the operating system selector menu to pop up. Oddly the additional entry we have next to our Macintosh HD is Windows; apparently Apple thinks if there's anything next to its operating system, that will be Windows. So just select Windows and press ENTER and we are booting Ubuntu!

In the next post, we will discuss how to configure Ubuntu to have access to the Shared partition and we'll set up some symbolic links in both OSX and Ubuntu to store our Documents, Pictures, Music and Videos in the common folder, so that we have access to them no matter which one we start up.