윈도우용 JDK를 보면 Portable 설치가 없다. 설치를 할려면 Windows Installer 를 이용하는 방법 밖에 없다. 문제는 두개의 버전, 1.7과 1.8 버전의 JDK 를 설치할 수가 없을 수도 있다. 최신판을 설치된 상태에서 구 버전을 설치할려면 이미 최신버전이 설치가 되어 있어서 설치가 안될 수도 있다. 이럴때 Linux 용 처럼 압축만 해제하면 쓸수 있도록 할 수 있지 않을까? 이 글은 JDK를 압축해제하는 것만으로 설치하는 방법인 Portable 설치에 대해서 다룬다. 또한, 이글은 다음 링크의 내용을 정리한 것이다. How can I get the latest JRE […]
JBoss EAP 5 MySQL JNDI 설정
JNDI 는 자바 애플리케이션 서버라면 거의 다 지원하는 기능이다. 이는 특정한 자원의 접근을 디렉토리 접근하듯이 하도록 해준다. 여기서 자원이라면 대부분 외부 서버에 있는 저장소들을 말한다. MySQL, PostgreSQL, Oracle, MS SQL 등 외부 저장소에 접속할때마다 저수준의 드라이버를 올리고 인증을 넣는게 아니라 자바 애플리케이션이 구동되면서 접속하을 해놓고 이것을 디렉토리화해서 올려놓으면 자바 애플리케이션에서는 이 디렉토리에 접근하는 것만으로 외부자원에 접속이 끝이 나게 되어 간편해진다. 이 글은 JBoss EAP 5 MySQL JNDI 설정에 관한 글이다. MySQL Connector/j MySQL에서는 자바 애플리케이션을 위해서 접속 드라이버를 제공한다. jar […]
Ubuntu 14.04 의 JBoss EAP 5.2 init 스크립트
JBoss EAP 5.2 를 Ubuntu 14.04 에서 운영할 경우에 서비스 시작을 init 에 등록하기 위한 스크립트. Wildfly 에 내용을 가지고 와서 마이그레이션 했다.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 |
#!/bin/bash # # /etc/init.d/jboss-SvrAPI01 -- startup script for jboss of SvrAPI01 # # NAME="systemV" DEFAULT="/opt/jboss/domains/${NAME}/jboss-env.sh" DESC="Jboss EAP 5.2 Application Server for $NAME" # clear work and tmp dirs? CLEAR_WORK_TMP="Y" HOST_NAME=`/sbin/ifconfig ens3|grep 'inet addr:'|awk '{print $2}'|awk -F : '{print $2}'` # Check privilege if [ `id -u` -ne 0 ]; then echo "You need root privileges to run this script" exit 1 fi # Make sure wildfly is started with system locale if [ -r /etc/default/locale ]; then . /etc/default/locale export LANG fi . /lib/lsb/init-functions if [ -r /etc/default/rcS ]; then . /etc/default/rcS fi # Overwrite settings from default file if [ -f "$DEFAULT" ]; then . "$DEFAULT" fi # Setup the JVM if [ -z "$JAVA" ]; then if [ -n "$JAVA_HOME" ]; then JAVA="$JAVA_HOME/bin/java" else JAVA="java" fi fi # Check if wildfly is installed if [ ! -f "$JBOSS_HOME/bin/run.jar" ]; then log_failure_msg "$NAME is not installed in \"$JBOSS_HOME\"" exit 1 fi # Run as wildfly user # Example of user creation for Debian based: # adduser --system --group --no-create-home --home $JBOSS_HOME --disabled-login wildfly if [ -z "$JBOSS_USER" ]; then JBOSS_USER=sbhyun fi # Check wildfly user id $JBOSS_USER > /dev/null 2>&1 if [ $? -ne 0 -o -z "$JBOSS_USER" ]; then log_failure_msg "User \"$JBOSS_USER\" does not exist..." exit 1 fi # Check owner of JBOSS_HOME if [ ! $(stat -L -c "%U" "$JBOSS_HOME") = $JBOSS_USER ]; then log_failure_msg "The user \"$JBOSS_USER\" is not owner of \"$JBOSS_HOME\"" exit 1 fi # The amount of time to wait for startup if [ -z "$STARTUP_WAIT" ]; then STARTUP_WAIT=120 fi # The amount of time to wait for shutdown if [ -z "$SHUTDOWN_WAIT" ]; then SHUTDOWN_WAIT=120 fi # Location to keep the console log if [ -z "$JBOSS_CONSOLE_LOG" ]; then JBOSS_CONSOLE_LOG="$SERVER_HOME/$SERVER_NAME/log/console.log" fi export JBOSS_CONSOLE_LOG touch $JBOSS_CONSOLE_LOG chown $JBOSS_USER $JBOSS_CONSOLE_LOG # Location to set the pid file JBOSS_PIDFILE="$SERVER_HOME/$SERVER_NAME/run/$SERVER_NAME.pid" export JBOSS_PIDFILE # Launch Jboss in background LAUNCH_JBOSS_IN_BACKGROUND=1 export LAUNCH_JBOSS_IN_BACKGROUND function cleanWorkTmp() { # clean tmp and work dirs echo "clean work and tmp dirs from ${SERVER_NAME}..." rm -Rf "${SERVER_HOME}/${SERVER_NAME}/work" rm -Rf "${SERVER_HOME}/${SERVER_NAME}/tmp" } function jbossPID() { # try get the JVM PID local jbossPID="x" jbossPID=$(ps -eo pid,cmd | grep "org.jboss.Main" | grep "${DOMAIN_IP}" | grep "${SERVER_NAME}" | grep -v grep | cut -c1-6) echo "$jbossPID" } # Helper function to check status of Jboss service check_status() { pidofproc -p "$JBOSS_PIDFILE" "$JAVA" >/dev/null 2>&1 } START_SCRIPT="$JBOSS_HOME/bin/run.sh" SHUTDOWN_SCRIPT="$JAVA -classpath $JBOSS_HOME/bin/shutdown.jar:$JBOSS_HOME/client/jnet.jar org.jboss.Shutdown --shutdown -s jnp://$DOMAIN_IP:$JNP_PORT -u $JBOSS_ADMIN_USER -p $JBOSS_ADMIN_PWD" case "$1" in start) log_daemon_msg "Starting $DESC" log_daemon_msg "instance $SERVER_NAME at $DOMAIN_IP ..." check_status status_start=$? if [ $status_start -eq 3 ]; then mkdir -p $(dirname "$JBOSS_PIDFILE") mkdir -p $(dirname "$JBOSS_CONSOLE_LOG") cat /dev/null > "$JBOSS_CONSOLE_LOG" su -l $JBOSS_USER -c "source $DEFAULT; $START_SCRIPT $JBOSS_OPTS --host $HOST_NAME -c $SERVER_NAME -b $DOMAIN_IP > ${JBOSS_CONSOLE_LOG} 2>&1 &" count=0 launched=0 until [ $count -gt $STARTUP_WAIT ] do grep 'Started in' "$JBOSS_CONSOLE_LOG" > /dev/null if [ $? -eq 0 ] ; then launched=1 break fi sleep 1 count=$((count + 1)); done if [ $launched -eq 1 ] ; then echo `jbossPID` > $JBOSS_PIDFILE chown $JBOSS_USER $(dirname "$JBOSS_PIDFILE") || true fi if check_status; then log_end_msg 0 else log_end_msg 1 fi if [ $launched -eq 0 ]; then log_warning_msg "$DESC hasn't started within the timeout allowed" log_warning_msg "please review file \"$JBOSS_CONSOLE_LOG\" to see the status of the service" fi elif [ $status_start -eq 1 ]; then log_failure_msg "$DESC is not running but the pid file exists" exit 1 elif [ $status_start -eq 0 ]; then log_success_msg "$DESC (already running)" fi ;; stop) check_status status_stop=$? if [ $status_stop -eq 0 ]; then read kpid < "$JBOSS_PIDFILE" log_daemon_msg "Stopping $DESC" su -l $JBOSS_USER -c "source $DEFAULT; $SHUTDOWN_SCRIPT" count=0 until [ $count -gt $SHUTDOWN_WAIT ] do if ! check_status; then break fi sleep 1 count=$((count + 1)); done if check_status; then kill -9 $kpid fi if [ "$CLEAR_WORK_TMP" = "Y" ]; then cleanWorkTmp fi rm "$JBOSS_PIDFILE" log_end_msg 0 elif [ $status_stop -eq 1 ]; then log_action_msg "$DESC is not running but the pid file exists, cleaning up" rm -f $JBOSS_PIDFILE elif [ $status_stop -eq 3 ]; then log_action_msg "$DESC is not running" fi ;; restart) check_status status_restart=$? if [ $status_restart -eq 0 ]; then $0 stop fi $0 start ;; status) check_status status=$? if [ $status -eq 0 ]; then read pid < $JBOSS_PIDFILE log_action_msg "$DESC is running with pid $pid" exit 0 elif [ $status -eq 1 ]; then log_action_msg "$DESC is not running and the pid file exists" exit 1 elif [ $status -eq 3 ]; then log_action_msg "$DESC is not running" exit 3 else log_action_msg "Unable to determine $NAME status" exit 4 fi ;; *) log_action_msg "Usage: $0 {start|stop|restart|reload|force-reload|status}" exit 2 ;; esac exit 0 |
아래는 jboss-env.sh 의 내용.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
#!/bin/sh # jboss-env.sh - starts a new shell with instance variables set ## set jboss base env export JBOSS_HOME="/opt/jboss/jboss-as" export SERVER_HOME="/opt/jboss/domains" export LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:/opt/jboss/lib" export JBOSS_USER=sbhyun export SERVER_NAME=systemV export DOMAIN_IP=0.0.0.0 export JNP_PORT=1199 export JAVA_HOME=/opt/java export CLASSPATH=.:/opt/java/jre/lib export PATH=$JAVA_HOME/bin:$JBOSS_HOME/bin:$PATH # JMX Credentials JMX_CREDETIALS_FILE="$SERVER_HOME/$SERVER_NAME/conf/props/jmx-console-users.properties" JMX_USER=$(cat $JMX_CREDETIALS_FILE | grep -v '#' | cut -d '=' -f 1 | head -n 1) JMX_PWD="$(cat $JMX_CREDETIALS_FILE | grep -v '#' | cut -d '=' -f 2 | head -n 1 | tr -d '\r')" JBOSS_ADMIN_USER=${JMX_USER:-"admin"} JBOSS_ADMIN_PWD=${JMX_PWD:-"admin"} if [ "x$JBOSS_OPTS" = "x" ]; then JBOSS_OPTS="-Dserver=$SERVER_NAME" JBOSS_OPTS="$JBOSS_OPTS -Djboss.server.base.dir=$SERVER_HOME" JBOSS_OPTS="$JBOSS_OPTS -Djboss.server.base.url=file://$SERVER_HOME" JBOSS_OPTS="$JBOSS_OPTS -Djboss.server.log.dir=$SERVER_HOME/$SERVER_NAME/log" #JBOSS_OPTS="$JBOSS_OPTS -Djboss.server.log.threshold=DEBUG" JBOSS_OPTS="$JBOSS_OPTS -Djboss.messaging.ServerPeerID=2" JBOSS_OPTS="$JBOSS_OPTS -Djboss.service.binding.set=ports-01" JBOSS_OPTS="$JBOSS_OPTS -Djboss.partition.name=systemV" JBOSS_OPTS="$JBOSS_OPTS -Djboss.default.jgroups.stack=tcp" JBOSS_OPTS="$JBOSS_OPTS -Djboss.jgroups.tcp.tcpping.initial_hosts=192.168.96.30[7700],192.168.96.31[7701]" JBOSS_OPTS="$JBOSS_OPTS -Djboss.jgroups.tcp.tcp_port=7600" JBOSS_OPTS="$JBOSS_OPTS -Djboss.jgroups.bind.address=192.168.96.30" #JBOSS_OPTS="$JBOSS_OPTS -Djgroups.bind_addr=228.2.2.2" #JBOSS_OPTS="$JBOSS_OPTS -Djboss.jgroups.tcp.tcp_port=7600" #JBOSS_OPTS="$JBOSS_OPTS -Djboss.partition.udpGroup=228.2.2.2" #JBOSS_OPTS="$JBOSS_OPTS -Djboss.hapartition.mcast_port=44552" fi if [ "x$JAVA_OPTS" = "x" ]; then JAVA_OPTS="-server" JAVA_OPTS="$JAVA_OPTS -noverify" JAVA_OPTS="$JAVA_OPTS -Xms512m" JAVA_OPTS="$JAVA_OPTS -Xmx512m" JAVA_OPTS="$JAVA_OPTS -XX:PermSize=128m" JAVA_OPTS="$JAVA_OPTS -XX:MaxPermSize=128m" #JAVA_OPTS="$JAVA_OPTS -Xss128k" JAVA_OPTS="$JAVA_OPTS -verbose:gc" JAVA_OPTS="$JAVA_OPTS -Xloggc:$SERVER_HOME/$SERVER_NAME/gclog/gc.log" JAVA_OPTS="$JAVA_OPTS -XX:+PrintGCDetails" JAVA_OPTS="$JAVA_OPTS -XX:+PrintGCTimeStamps" JAVA_OPTS="$JAVA_OPTS -XX:+PrintHeapAtGC" JAVA_OPTS="$JAVA_OPTS -XX:+HeapDumpOnOutOfMemoryError" JAVA_OPTS="$JAVA_OPTS -XX:HeapDumpPath=$SERVER_HOME/$SERVER_NAME/gclog/java_pid.hprof" # JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote" # JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.port=8286" # JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.ssl=false" # JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.authenticate=false" JAVA_OPTS="$JAVA_OPTS -Djava.net.preferIPv4Stack=true" JAVA_OPTS="$JAVA_OPTS -Dsun.rmi.dgc.client.gcInterval=3600000" JAVA_OPTS="$JAVA_OPTS -Dsun.rmi.dgc.server.gcInterval=3600000" JAVA_OPTS="$JAVA_OPTS -Dsun.lang.ClassLoader.allowArraySyntax=true " fi export JBOSS_OPTS JAVA_OPTS |
TCP 기반 JBoss 5 Clustering 하기
AWS EC2 에서 JBoss EAP 5.2 를 설치하고 운영할때에 보통 클러스터링을 설정하게 된다. 문제는 JBoss EAP 5.2 에서 클러스터링은 JGroup 을 기반으로 작성되어 있다. 중요한 것은 클러스터링을 할때에 Multicast UDP 를 사용한다는 것인데, AWS EC2 에서는 Multicast 자체를 지원하지 않는다. 따라서 JBoss EAP 5.2 를 AWS EC2 에서 운영하면서 클러스터링을 기본 설정값으로 설정하고 실행시키면 클러스터링이 되지 않는다. 이럴때 TCP 를 이용하면 가능해진다. 이 포스트는 AWS EC2 에서 TCP 기반 JBoss Clustering 에 관련된 내용이다. MPING을 TCPPING으로 바꾸기 Cluster 의 프로토콜 […]
[AWS] Private Subnet 으로 서비스 구성하기.
AWS 는 전 세계적으로 가장 인기있는 Cloud Platform 이다. Web Console을 이용해서 원하는 자원을 구성하고 컴퓨터, 네트워크, 저장소등을 실시간으로 생성할 수 있으며 네트워킹 구성도 실시간으로 구성이 가능하다. 그래서 많은 IT 업체들이 AWS 클라우드를 사용하고 있다. 특히나 전 세계를 대상으로 인터넷 서비스를 하려는 업체들은 AWS 를 통해서 막대한 IT 인프라 구축비용 절감하고 있다. 오늘은 AWS 클라우드를 이용해서 가장 많은 구성이며 기본적인 구성인 Web Service 를 Private Subnet 을 이용해 구성해보도록 하겠다. 이 포스트는 AWS 클라우드에 대해서 어느정도 기초지식을 갖추고 있다고 가정하고 […]
다음 지도 API 좌표값 얻기
다음 지도 API를 이용해서 좌표값을 얻는 PHP 예제 소스
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
// 다음 지도api 키값 $map_key = "<다음API키값>"; // 쿼리 돌릴 주소 $address = "지번주소, 혹은 법정주소"; $map_query = urlencode($address); // 여기부터 주소 검색 xml 파싱 $pquery = $map_key. "&q=". $map_query . "&output=xml"; $fp = fsockopen ("apis.daum.net", 80, $errno, $errstr, 30); if (!$fp) { echo "$errstr ($errno)"; } else { fputs($fp, "GET /local/geo/addr2coord?"); fputs($fp, $pquery); fputs($fp, " HTTP/1.1\r\n"); fputs($fp, "Host: apis.daum.net\r\n"); fputs($fp, "Connection: Close\r\n\r\n"); $header = ""; while (!feof($fp)) { $out = fgets ($fp,512); if (trim($out) == "") {break;} $header .= $out; } $mapbody = ""; while (!feof($fp)) { $out = fgets ($fp,512); $mapbody .= $out; } $idx = strpos(strtolower($header), "transfer-encoding: chunked"); if ($idx > -1) { // chunk data $temp = ""; $offset = 0; do { $idx1 = strpos($mapbody, "\r\n", $offset); $chunkLength = hexdec(substr($mapbody, $offset, $idx1 - $offset)); if ($chunkLength == 0) {break;} else { $temp .= substr($mapbody, $idx1+2, $chunkLength); $offset = $idx1 + $chunkLength + 4; } } while(true); $mapbody = $temp; } fclose ($fp); } $channel=new SimpleXMLElement($mapbody); $py = $channel->item[0]->lng; // 위도 $px = $channel->item[0]->lat; // 경도 |
가상 Guest 이미지 마운팅
가상 Guest OS의 이미지를 마운트하는 법을 설명합니다. 이미지 마운트에는 두가지 방법이 있습니다. 첫번째방법 1.Guest OS 이미지에 파티션으로부터 디바이스 맵(Device Map)을 생성합니다.
|
1 2 3 |
]# kpartx -av /mnt/xen/images/test01_centos5_4_x64.img add map loop0p1 : 0 208782 linear /dev/loop0 63 add map loop0p2 : 0 10265535 linear /dev/loop0 208845 |
2.볼륨(Volume) 그룹을 스캔합니다.
|
1 2 3 |
]# vgscan Reading all physical volumes. This may take a while... Found volume group "VolGroup00" using metadata type lvm2 |
이렇게 볼륨이 잡히면 이 방법은 유효합니다. 그렇지 않으면 두번째 방법을 사용해야 합니다. 3.볼륨(volume) 그룹의 속성을 바꿉니다.
|
1 2 |
]# vgchange -ay VolGroup00 2 logical volume(s) in volume group "VolGroup00" now active |
볼륨의 상태를 확인합니다.
|
1 2 3 4 |
]# lvs LV VG Attr LSize Origin Snap% Move Log Copy% Convert LogVol00 VolGroup00 -wi-a- 3.84G LogVol01 VolGroup00 -wi-a- 1.03G |
4.이제 볼륨을 마운팅하면 됩니다.
|
1 |
]# mount /dev/VolGroup00/LogVol00 /opt/ |
이렇게 마운트가 되면 마운트 포인터(Mount Point)를 통해서 접근할 수 있습니다. 언마운트(Umount)는 다음과 같이 합니다. 5.언마운트(Unmount) 합니다.
|
1 |
]# umount /opt |
6.볼륨속성을 바꿉니다.
|
1 2 |
]# vgchange -an VolGroup00 0 logical volume(s) in volume group "VolGroup00" now active |
7.디바이스 맵을 지웁니다.
|
1 2 |
]# kpartx -d /mnt/xen/images/test01_centos5_4_x64.img loop deleted : /dev/loop0 |
두번째 방법 두번째 방법은 위의 […]
CentOS 7 Systemd 이해하기
CentOS 7로 배포판 버전이 바뀌면서 가장 크게 바뀐것이 Systemd 입니다. 기존의 볼수 없었던 서비스 하나일뿐이라고 생각할 수 있지만 Systemd 는 단지 서비스 하나의 문제가 아닙니다. Linux 의 기본 뼈대 프로세스 Linux는 운영체제 입니다. 전원을 넣고 부팅이 되는 과정에서 시스템을 초기화하고 기타 서비스들을 위한 환경을 조성하고 그들을 시작시켜주는 일을 하는 초기화 프로세스가 필요합니다. CentOS 6 까지는 Sys V 라고해서 init 프로세스가 이것을 담당했습니다. 커널이 메모리에 로딩되면 가장 먼저 실행되는 프로세스로 init 프로세스를 실행시킵니다. 이 프로세스는 init 스크립트, init 설정등을 기반으로 RunLevel […]
PostgreSQL Replication – Log Shipping
PostgreSQL 리플리케이션은 장애를 대비해 가용성을 높이는 최소한의 방법입니다. 현재 버전의 PostgreSQL 다양한 리플리케이션을 지원하는데, 이 문서는 가장 오래되고 기초적인 리플리케이션인 Log Shipping Replication 에 대해서 다룹니다. 이 리플리케이션은 Warm Standby 이라고 합니다. 이에 대한 설명은 PostgreSQL 문서에 다음과 같이 잘 나와 있습니다. 운영 서버에서 만드는 트랜잭션 로그 조각을 정기적으로 대기 서버로 옮기고, 그것을 적용시켜, 운영 서버가 장애로 멈추게 되면, 대기 서버를 운영해서, 가용성을 향상할 수 있다. 이 기능을 warm standby, 또는 log shipping 기능이라고 한다. 이 복제 방식은 먼저, 운영 […]
KVM Ubuntu 가상머신에 콘솔 접속하기
Ubuntu 를 KVM 가상머신으로 설치를 했다면 콘솔 접속을 해보면 안됩니다. 지난번에 CentOS6/7 배포판에서의 가상머신 콘솔접속에 대해서 다루어 었는데, Ubuntu 는 이들과 조금 다르기에 포스팅 해봅니다. 이 글은 ubuntu 14.04 를 대상으로 합니다. 처음 Ubuntu 를 KVM 가상머신으로 설치를 했다면 SSH 나 Virt-manager 나 vnc 를 이용해서 접속을 해야만 합니다. 그래야 콘솔접속을 위한 설정을 해볼 수 있습니다. GRUB 설정 공통 Grub 설정은 /etc/default/grub 에 있습니다. 다음과 같이 설정을 해줍니다.
|
1 |
GRUB_CMDLINE_LINUX_DEFAULT="console=ttyS0,38400n8 console=tty0" |
그리고 다음과 같이 업데이트를 해줍니다.
|
1 2 3 |
]# ## 둘중 하나만 해주면 됩니다. ]# update-grub ]# grub-mkconfig -o /boot/grub/grub.cfg |
Serial 콘솔 만들기 다음과 같이 […]