When working with dates that are 0000-00-00, it will always return a null as by default it is considered an invalid date.
Author Archives: Leo
Solving “Error occurred during initialization of VM” on a VPS
After installing java (via yum) on a VPS, running java
results in:
Error occurred during initialization of VM Could not reserve enough space for object heap *** glibc detected *** java: double free or corruption (out): 0x0000000041040f30 *** ======= Backtrace: ========= /lib64/libc.so.6[0x2afe08ed12ef] /lib64/libc.so.6(cfree+0x4b)[0x2afe08ed173b] /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/lib/amd64/server/libjvm.so[0x2afe0978cbb4] /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/lib/amd64/server/libjvm.so[0x2afe0978cd78] /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/lib/amd64/server/libjvm.so[0x2afe09791733] /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/lib/amd64/server/libjvm.so(JNI_CreateJavaVM+0x74)[0x2afe0950eb14] java(JavaMain+0x96)[0x4026c6] /lib64/libpthread.so.0[0x2afe08841617] /lib64/libc.so.6(clone+0x6d)[0x2afe08f32c2d] ======= Memory map: ========
This can be solved by running:
export _JAVA_OPTIONS="-Xms20m -Xmx64m -XX:MinHeapFreeRatio=20 -XX:MaxHeapFreeRatio=40 -XX:NewSize=10m -XX:MaxNewSize=10m -XX:SurvivorRatio=6 -XX:TargetSurvivorRatio=80 -XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled"
Or placing it in the bashrc
file.
Note: You will need to change the Xms (initial java heap size), Xmx (maximum java heap size) above depending on the amount of free memory your container has. See addendum II
Addendum I actually attempted to run this in a OpenVZ VPS. There is absolutely no hope in getting java to run under OpenVZ unless you have a lot of guaranteed memory. If you really need to get java working in your VPS, try to get a Xen or vmware based VPS.
Addendum II I got java to run on an openVZ container with 256 MB guaranteed ram using the following java arguments:
-Xms8m -Xmx16m -Xss4m
However, upon creating threads and executing commands, java failed immediately with cannot fork memory messages.
I just got a XEN 128MB / 256MB swap VPS and it ran the same java application without a single problem. I didn’t even need those arguments.
Allowing only SSH tunnel on an account
Add no-pty to the authorized_keys
immediately before the ssh-rsa or ssh-dds entry like so:
no-pty ssh-rsa AAAAB3Nza...cFojMlQ== user@serverA
This will let the user login but with no prompt.
Logging in via SSH keys
Let user@ServerA be the host that wants to connect to user@ServerB.
Run the following commands as user@ServerA
ssh-keygen -t rsa # use empty pass phrase, save the keys to ~/.ssh/id_rsa and ~/.ssh/id_rsa.pub chmod 700 ~/.ssh # set the permissions of the .ssh directory to 700. chmod 600 ~/.ssh/* # set the permissions of the keys so no one else can read them.
It’s important to set the permissions! Otherwise SSH will not use the keys without a warning or message. I’ve wasted enough time to learn this the hard way.
Copy the ~/.ssh/id_rsa.pub from user@ServerA to user@ServerB:~/.ssh/authorized_keys. Again, set the permissions.
chmod 700 ~/.ssh # set the permissions of the .ssh directory to 700. chmod 600 ~/.ssh/* # set the permissions of the keys so no one else can read them.
Compiling & Installing vnstat-1.10
Run the following commands to install vnstat. This will also configure vnstat to listen on eth0 and start automatically on boot.
This was done in CentOS5.4, but it should also work for any *NIX based machines.
Note: You may want to check on the vnstat website for the latest build. At the time of this writing, the latest version is 1.10.
Note2: The following example will configure vnstat on eth0; You may want to change this if you are on a OpenVZ VPS to venet0.
wget http://humdi.net/vnstat/vnstat-1.10.tar.gz tar -xzf vnstat-1.10.tar.gz cd vnstat-1.10 make make install vnstat --testkernel /bin/cp examples/init.d/centos/vnstat /etc/init.d/vnstat ln -s /etc/init.d/vnstat /etc/rc3.d/S40vnstat vnstat -u -i eth0 /etc/init.d/vnstat start
Compiling PHP with LiteSpeed (with lsapi)
Compiling PHP with litespeed using LiteSpeed 4.10 SAPI.
You must download the latest PHP package and the litespeed sapi package to the /root directory, then run the following commands.
You may wish to change the config settings as needed.
Note: Litespeed was installed in /opt/lsws. You will want to change the prefix accordingly.
cd /root
tar -xjf php-5.3.2.tar.bz2
cd php-5.3.2
cd sapi
tar -xzf /root/php-litespeed-4.10.tgz
cd ..
touch ac*
./buildconf --force
./configure --prefix=/opt/lsws/lsphp5 --with-litespeed --with-config-file-path=/etc/ --with-gd --enable-shmop --enable-track-vars --enable-ftp --enable-sockets --enable-exif --enable-zip --enable-sysvsem --with-zlib --enable-sysvshm --enable-magic-quotes --with-jpeg-dir --with-png-dir --enable-mbstring --enable-embedded-mysqli=shared --with-curl --with-mysql=/opt/mysql --with-mysqli=/opt/mysql/bin/mysql_config --with-mcrypt
make
make install
/etc/init.d/lsws stop
sleep 5
/bin/cp sapi/litespeed/php /opt/lsws/fcgi-bin/lsphp
/etc/init.d/lsws start
Note: The ‘sleep 5’ statement is not necessary if you do these steps manually. It is added so the copy operation immediately after is successful. Otherwise, litespeed might still be running which will cause the copy operation to fail.
Compiling MySQL with Sphinx
The following commands were used to compile MySQL 5.1.43 with Sphinx 0.9.9. This will install it in /opt. You may want to change the prefix accordingly.
Download the proper packages and following the following commands.
Note: For some reason, MySQL > 5.1.43 gives a “LT_INIT: command not found” error when compiling. Although it seems like it has something to do with autoconf < 2.2, this was ‘resolved’ by using an older release (5.1.43 instead of 5.1.44) at the time of this writing.
When configuring MySQL, if configure complains about something about no Sphinx, delete the entire MySQL source directory and try again from scratch.
Note: You should already have the following packages installed: libtermcap-devel libgcc-c++ libtool gcc make autoconf g++ gcc-c++
cd /root tar -xzf mysql-5.1.43.tar.gz tar -xzf sphinx-0.9.9.tar.gz
You may want to ignore this step if you do not want to compile sphinx with mysql.
cd mysql-5.1.43 cp -R ../sphinx-0.9.9/mysqlse/ storage/sphinx sh BUILD/autorun.sh
Configure MySQL and compile as usual
./configure --prefix=/opt/mysql --with-unix-socket-path=/opt/mysql/mysql.sock --without-man --enable-shared --without-debug --enable-assembler --with-ssl --with-plugins=sphinx CFLAGS=-O3 'CXXFLAGS=-O3 -fno-exceptions -felide-constructors -fno-rtti' CXX=gcc
make
make install
Setting up MySQL configuration and the initial database.
/bin/cp /root/my.cnf /etc/my.cnf /bin/cp support-files/mysql.server /etc/init.d/mysql chmod 755 /etc/init.d/mysql ln -s /etc/init.d/mysql /etc/rc3.d/S40mysql /bin/cp support-files/my-medium.cnf /etc/my.cnf /usr/sbin/useradd mysql cd /opt/mysql chown -R mysql . chgrp -R mysql . bin/mysql_install_db --user=mysql chown -R root . chown -R mysql var bin/mysqld_safe --user=mysql & chown mysql /opt/mysql
Set the lib paths of MySQL so the libmysqlclient.so or whatever else libraries can be found. This is required when attempting to compile anything that requires MySQL (including sphinx).
echo "/opt/mysql/lib/mysql" > /etc/ld.so.conf.d/mysql.conf ldconfig
Now that MySQL is done, we will compile Sphinx.
cd /root cd sphinx-0.9.9 ./configure --prefix=/opt/sphinx --with-mysql make make install
Post install steps:
/bin/cp /root/sphinx.conf /opt/sphinx/etc/sphinx.conf cp contrib/scripts/searchd /etc/init.d/ chmod 777 /etc/init.d/searchd ln -s /etc/init.d/searchd /etc/init.d/S55searchd
Setting up BIND on CentOS
The following steps were used to setup BIND using yum on CentOS 5.4. Assume the hostname is titan.steamr.com.
At the time of this writing, the yum repo had BIND 9.3
Step 1: Install the necessary packages:
yum -y install bind bind-libs bind-utils
Step 2: Create a new file /etc/named.conf with the following contents. Change titan.steamr.com for the hostname.
vi /etc/named.conf
options { directory "/var/named"; // the default }; zone "localhost" { type master; file "localhost.zone"; }; zone "titan.steamr.com" { type master; file "titan.steamr.com.zone"; };
Step 3: Create a new file /etc/named/localhost.zone with the following contents:
$TTL 86400 @ IN SOA @ root ( 42 ; serial (d. adams) 3H ; refresh 15M ; retry 1W ; expiry 1D ) ; minimum IN NS @ IN A 127.0.0.1 IN AAAA ::1
Step 4: Create a new file /etc/named/titan.steamr.com.zone with the following contents: (Change titan.steamr.com with your hostname)
$TTL 86400 titan.steamr.com. 14400 IN SOA tns1.steamr.com root ( 20110000 ; serial (d. adams) 3H ; refresh 15M ; retry 1W ; expiry 1D ) ; minimum titan.steamr.com. 14400 IN NS tns1.steamr.com titan.steamr.com. 14400 IN NS tns2.steamr.com titan.steamr.com. 14400 IN A 67.215.230.73 localhost 14400 IN A 127.0.0.1 www 14400 IN CNAME titan.steamr.com ftp 14400 IN CNAME titan.steamr.com
Step 5: Start BIND via /etc/init.d/named start
Step 6: Make BIND start on startup mv /etc/rc3.d/K87named S87named
Step 8: To add other DNS entries, append
zone "new.host.com" { type master; file "new.host.com.zone"; };
and create a new zone file /var/named/new.host.com.zone with something like the contents in step 4.
You will want to reload BIND once you add a new entry by running /etc/init.d/named reload
VI Search & Replace
Search & Replace the next element
:s/search/replace
Search & Replace everything
:%s/search/replace