Monday, February 17, 2014

Setup Eclipse Binary for Eclipse Official Website in Fedora 20

Following is a sample note to setup eclipse binary from Official Eclipse Website instead of using yum.

I chose to go down this path since yum is several revisions behind the official version.

# Install jdk development if not already, to prevent some strange behavior when compiling code
sudo yum -y install java-1.7.0-openjdk-devel.x86_64

# Download the eclipse from official site. (http://www.eclipse.org/)
wget http://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/kepler/SR1/eclipse-jee-kepler-SR1-linux-gtk-x86_64.tar.gz eclipse.tar.gz

# Unpackage it
mkdir -p eclipse
cd eclipse
tar -xvf ../eclipse.tar.gz

# Create eclipse.desktop file
cat > ~/eclipse.desktop <<"EOF"
[Desktop Entry]
Encoding=UTF-8
Name=Eclipse IDE
Exec=/opt/eclipse/eclipse
Icon=/opt/eclipse/icon.xpm
Type=Application
Categories=Development;
EOF

# Make it all permission
chmod a+wrx eclipse.desktop

cd ..

# Copy the binary to opt
sudo mv eclipse /opt/eclipse

# Make the desktop symbolic link
sudo ln /opt/eclipse/eclipse.desktop /usr/share/applications/eclipse.desktop

One should be able to see it in Search Menu

Thanks.

Sincerely,
Danil

Sunday, February 2, 2014

Happy New Year 2014


New Year 2014 by danil-ko on deviantART



Artwork is completed in Krita with GIMP to add texts and some enhancements.

Hope you guys like it and wish you guys happy New Year 2014.

Sincerely,
Danil

Sunday, January 26, 2014

OpenShift Origin 3.0 with JBossews CentOS Installation


One can download the CentOS Minimal Image at
http://wiki.centos.org/Download

One of link is
http://mirror.trouble-free.net/centos/6.5/isos/x86_64/

Install the VM Image by using VirtualBox
https://www.virtualbox.org/

It is recommended to use
4GB Memory
40GB Dynamic Disk Space




Following needed to be set
Bridge Adapter


After the installation complete, run following bash script

(Host at github https://github.com/danilko/openshift-origin-3-jbossews-cartridge-installation)

#!/bin/bash

BROKER_OPENSHIFT_HOSTNAME=`hostname`
APP_OPENSHIFT_HOSTNAME=`echo ${BROKER_OPENSHIFT_HOSTNAME} | cut -d '.' -f2-`

# Make eth0 adapater enable during system start up
sed -i 's^ONBOOT=no^ONBOOT=yes^g' /etc/sysconfig/network-scripts/ifcfg-eth0

# Restart network service
service network restart

# Make current hostname to be resolvable
echo  -e "\n127.0.0.1 broker.platform.local" >> /etc/hosts

yum -y install java-1.7.0-openjdk-devel wget unzip

cd /tmp
wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
rpm -Uvh epel-release-6*.rpm;
cat > /etc/yum.repos.d/openshift-origin-deps.repo <<"EOF"
[openshift-origin-deps]
name=OpenShift Origin Dependencies - EL6
baseurl=http://mirror.openshift.com/pub/origin-server/release/3/rhel-6/dependencies/$basearch/
gpgcheck=0
EOF

yum install -y ruby193-ruby unzip curl bind httpd-tools puppet augeas

# Install default config file
cat > ~/.openshift/oo-install-cfg.yml <<"EOF"
---
Version: 0.0.1
Description: This is the configuration file for the OpenShift Installer.
Deployment:
  DNS:
    component_domain: broker.platform.local
    register_components: Y
    app_domain: platform.local
  Hosts:
  - ip_addr: 127.0.0.1
    named_ip_addr: 127.0.0.1
    user: root
    host: broker.platform.local
    state: new
    ip_interface: eth0
    roles:
    - msgserver
    - dbserver
    - broker
    - node
    ssh_host: localhost
Vendor: OpenShift Origin Community
Subscription:
  type: yum
  jenkins_repo_base: http://pkg.jenkins-ci.org/redhat
  repos_base: https://mirror.openshift.com/pub/origin-server/release/3/rhel-6
Name: OpenShift Installer Configuration
EOF

sh <(curl -s https://install.openshift.com/) -w origin_deploy

# Update the DNS of current host
nsupdate -k /var/named/Kplatform.local*.key
server ${BROKER_OPENSHIFT_HOSTNAME}
update delete ${BROKER_OPENSHIFT_HOSTNAME} A
update add  180 A 127.0.0.1
send
quit

######################################
## SSL Cert Generation
######################################

mkdir -p /tmp/pki
cd /tmp/pki

cat >  platform.crt.config <<"EOF"
 RANDFILE               = $ENV::HOME/.rnd

 [ req ]
 default_bits           = 1024
 default_keyfile        = keyfile.pem
 distinguished_name     = req_distinguished_name
 attributes             = req_attributes
 prompt                 = no
 output_password        = changeme

 [ req_distinguished_name ]
 C                      = US
 ST                     = CA
 L                      = SAN JOSE
 O                      = PLATFORM
 OU                     = PLATFORM
 CN                     = *.platform.local
 emailAddress           = changeme

 [ req_attributes ]
 challengePassword              = changeme
EOF

# Generate a new key that lasts 365 days
openssl req -batch -x509 -nodes -days 365 -newkey rsa:2048 -keyout platform.key -out platform.crt -config platform.crt.config

# Backup old certificate and key
\cp -rf  /etc/pki/tls/certs/localhost.crt /etc/pki/tls/certs/localhost.crt.bak
\cp -rf  /etc/pki/tls/private/localhost.key /etc/pki/tls/private/localhost.key.bak

# Copy certificate and key
\cp -rf platform.crt /etc/pki/tls/certs/localhost.crt
\cp -rf platform.key /etc/pki/tls/private/localhost.key

# Setup so the serveralias also contain *platform.local
sed -i 's^ServerAlias localhost^ServerAlias localhost *.platform.local^g' /etc/httpd/conf.d/000001_openshift_origin_node.conf
sed -i 's^ServerAlias localhost^ServerAlias localhost *.platform.local^g' /etc/httpd/conf.d/000002_openshift_origin_broker_proxy.conf

# Get certificate through opnenssl
# Do not need since the cert is auto generated
#echo -n | openssl s_client -connect broker.platform.local:443 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > platform.crt

# Import to java keystore to prevent ssl problem
keytool -import -trustcacerts -keystore /usr/lib/jvm/java-1.7.0-openjdk-1.7.*.x86_64/jre/lib/security/cacerts -storepass changeit -noprompt -alias platform_cert -file /tmp/pki/platform.crt

cd  /tmp
rm -rf /tmp/pki

# Restart httpd
service httpd restart

# Ensure cgconfig and cgred is on to make sure gear config
/sbin/chkconfig cgconfig on
/sbin/chkconfig cgred on

reboot now

After the reboot, run the following bash script
#!/bin/bash

cd /tmp

TOMCAT7_VER=7.0.50
TOMCAT6_VER=6.0.37
MAVEN_VER=3.1.1

# Download binary
wget http://supergsego.com/apache/tomcat/tomcat-7/v${TOMCAT7_VER}/bin/apache-tomcat-${TOMCAT7_VER}.tar.gz
wget http://apache.mirrors.hoobly.com/tomcat/tomcat-6/v${TOMCAT6_VER}/bin/apache-tomcat-${TOMCAT6_VER}.tar.gz 
wget http://apache.petsads.us/maven/maven-3/3.1.1/binaries/apache-maven-${MAVEN_VER}-bin.tar.gz 
wget https://github.com/openshift/origin-server/archive/openshift-origin-release-3.zip 

# Untar/Unzip binaries
tar -xvf apache-tomcat-${TOMCAT7_VER}.tar.gz
tar -xvf apache-tomcat-${TOMCAT6_VER}.tar.gz
tar -xvf apache-maven-${MAVEN_VER}-bin.tar.gz
unzip openshift-origin-release-3.zip

######################################
## Install Maven
######################################
\cp -rf apache-maven-${MAVEN_VER} /etc/alternatives/maven

# Setup maven path system wide
echo -e 'export M2_HOME=/etc/alternatives/maven\nexport PATH=${M2_HOME}/bin:${PATH}'  > /etc/profile.d/maven.sh

source /etc/profile.d/maven.sh

mvn -v

######################################
## Install JBossews
######################################
# Copy jbossews/tomcat to correct location
\cp -rf apache-tomcat-${TOMCAT6_VER} /etc/alternatives/jbossews-1.0
\cp -rf apache-tomcat-${TOMCAT7_VER} /etc/alternatives/jbossews-2.0

# Copy openshift cartridges
\cp -rf origin-server-openshift-origin-release-3/cartridges/openshift-origin-cartridge-jbossews /usr/libexec/openshift/cartridges/jbossews

chmod a+x /usr/libexec/openshift/cartridges/jbossews/bin/*

# Install the cartridge
oo-admin-cartridge -a install -s /usr/libexec/openshift/cartridges/jbossews

# Clear broker cache
oo-admin-broker-cache -c

# Clean up folder
rm -rf origin-server-openshift-origin-release-3
rm -rf apache-maven-${MAVEN_VER}
rm -rf  apache-tomcat-${TOMCAT7_VER}
rm -rf  apache-tomcat-${TOMCAT6_VER}

######################################
## Change Default User Gear Size all to medium
######################################

# Resource limit file
RESOURCE_LIMIT_CONFIG_FILE=/etc/openshift/resource_limits.conf
sed -i 's^node_profile=small^node_profile=medium^g' ${RESOURCE_LIMIT_CONFIG_FILE}
sed -i 's^quota_blocks=1048576^quota_blocks=2097152^g' ${RESOURCE_LIMIT_CONFIG_FILE}
sed -i 's^quota_files=80000^quota_files=999999^g' ${RESOURCE_LIMIT_CONFIG_FILE}
sed -i 's^memory_limit_in_bytes=536870912       # 512MB^memory_limit_in_bytes=1073741824       # 1024MB^g' ${RESOURCE_LIMIT_CONFIG_FILE}
sed -i 's^memory_memsw_limit_in_bytes=641728512 # 512M + 100M (100M swap)^memory_memsw_limit_in_bytes=1178599424 # 1024M + 100M (100M swap)^g' ${RESOURCE_LIMIT_CONFIG_FILE}

# Set the file connection limit
RESOURCE_LIMIT_CONFIG_FILE=/etc/security/limits.conf
sed -i 's^#End of file^^g' ${RESOURCE_LIMIT_CONFIG_FILE}

echo -e "\n* soft nofile 32000\n* hard nofile 32000" >> ${RESOURCE_LIMIT_CONFIG_FILE}
echo -e "\n#End of file" >> ${RESOURCE_LIMIT_CONFIG_FILE}

# Reboot node services
service mcollective restart
oo-cgroup-enable --with-all-containers
oo-pam-enable --with-all-containers
oo-admin-ctl-tc restart

sed -i 's^"small"^"medium"^g' /etc/openshift/broker.conf

# Change demo user gear size
oo-admin-ctl-user --removegearsize small -l demo
oo-admin-ctl-user --addgearsize medium -l demo

# Clear broker cache
oo-admin-broker-cache -c

######################################
## Setup rhc tool
######################################

# Setup rhc tool
gem install rhc
echo yes | rhc setup --server=broker.platform.local -l demo -p changeme -k –no-create-token

By the end, one should have a working OpenShift configuration with JBossews Cartridges enable


Thanks.

Sincerely,
Danil

Sunday, February 10, 2013

Jersey + Multipart + Maven

I thought I should write about a problem that takes a long time for me to solve in case I forget about it.

I looked through tutorials and other articles to learn about Jersey Multipart. However, I ran into issues with missing dependency by following these tutorials. I finally solved it by setting up my maven POM file in the following way:

<dependencies>
  <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
        <dependency>
      <groupId>com.sun.jersey</groupId>
      <artifactId>jersey-server</artifactId>
      <version>1.9</version>
    </dependency>
   <dependency>
      <groupId>com.sun.jersey.contribs</groupId>
      <artifactId>jersey-multipart</artifactId>
      <version>1.9</version>
    </dependency>
    <dependency>
      <groupId>com.sun.jersey</groupId>
      <artifactId>jersey-json</artifactId>
      <version>1.9</version>
    </dependency>
     <dependency>
      <groupId>org.jvnet.mimepull</groupId>
      <artifactId>mimepull</artifactId>
      <version>1.9</version>
    </dependency>
  </dependencies>

In short, problems seem to come from version differences across jersey libraries as well as mimepull libraries. All libraries should be the same version. So even if other Jersey libraries  already had 1.14 version, it should be safer to use 1.9 version since it was the latest version for mimepull.

The missing dependency error messages were not too informative at this case.

Thanks to authors of original articles and  their comments who contribute to the solution.

Hope it helps others.

中文翻譯:

最近花了不少時間解決了一個問題, 想說先把解決方案寫下來以免忘記.

之前幾日在網路上尋找關於Jersey Multipart的教學. 在讀完許多教學後自己寫了一個簡單的範例.但是在Deploy時卻遇到missing dependency的問題. 最後終於在把Maven的POM檔做出以下修改後解決了問題:


<dependencies>
  <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
        <dependency>
      <groupId>com.sun.jersey</groupId>
      <artifactId>jersey-server</artifactId>
      <version>1.9</version>
    </dependency>
   <dependency>
      <groupId>com.sun.jersey.contribs</groupId>
      <artifactId>jersey-multipart</artifactId>
      <version>1.9</version>
    </dependency>
    <dependency>
      <groupId>com.sun.jersey</groupId>
      <artifactId>jersey-json</artifactId>
      <version>1.9</version>
    </dependency>
     <dependency>
      <groupId>org.jvnet.mimepull</groupId>
      <artifactId>mimepull</artifactId>
      <version>1.9</version>
    </dependency>
  </dependencies>


總結是Jersey libraries跟mimepull的版本必須要相同. 不然會出現Missing Dependency的問題. 所以即使Jersey libraries已有1.14版, 這裡必須使用1.9版, 因為mimepull只有到1.9版.

完全沒想到missing dependency會跟版本有相關性.

希望這篇文章可以幫到需要的朋友們.

Original Tutorial Site:
http://www.mkyong.com/webservices/jax-rs/file-upload-example-in-jersey/

Sincerely,
Danil

Thursday, January 10, 2013

Happy New Year 2013

DeviantArt Link: http://browse.deviantart.com/#/d5pzedp


I managed to finish before the New Year in US.

Artwork is completed in MyPaint with GIMP to add texts and some enhancements.

Hope you guys like it and wish you guys happy New Year 2013.


總算在美國新年前完成.

作品是在MyPaint中完成, Gimp 加上文字與修正.

希望您們會喜歡也祝福各位新年快樂.

Sincerely,
Danil