2015년 1월 14일 수요일

pitftsh

#!/bin/bash

# PiTFT Resistive 2.8" (PID 1601) or Capacitive 2.8" (PID 1983) setup script or Resistive 3.5" (PID 2097) or 2.2" No-Touchscreen setup script!

set -e

function cleanup() {
 if [ "${mountpoint}" != "/" ]
 then
  sudo -n umount "${mountpoint}/boot" 2> /dev/null
  sudo -n umount "${mountpoint}" 2> /dev/null
  sudo -n rmdir "${mountpoint}" 2> /dev/null < /dev/null
 fi
}

function wgetfiles() {
# grab wget images
    wget -c http://adafruit-download.s3.amazonaws.com/libraspberrypi-bin-adafruit.deb
    wget -c http://adafruit-download.s3.amazonaws.com/libraspberrypi-dev-adafruit.deb
    wget -c http://adafruit-download.s3.amazonaws.com/libraspberrypi-doc-adafruit.deb
    wget -c http://adafruit-download.s3.amazonaws.com/libraspberrypi0-adafruit.deb
    wget -c http://adafruit-download.s3.amazonaws.com/raspberrypi-bootloader-adafruit-20140917-1.deb
}

function update_etcmodules() {
 chr="$1"
 shift

 if grep -xq "spi-bcm2708" "${chr}/etc/modules" ; then
     echo "Already had spi-bcm2708"
 else
     echo "Adding spi-bcm2708"
     sudo chroot "${chr}" /bin/sh -c 'cat >> /etc/modules' <<EOF
spi-bcm2708
EOF
 fi

 if [ "${pitfttype}" == "28c" ]
     then
     if grep -xq  "i2c-bcm2708" "${chr}/etc/modules" ; then
  echo "Already had i2c-bcm2708"
     else
  echo "Adding i2c-bcm2708"
  sudo chroot "${chr}" /bin/sh -c 'cat >> /etc/modules' <<EOF
i2c-bcm2708
EOF
     fi
 fi 

 if grep -xq  "fbtft_device" "${chr}/etc/modules" ; then
     echo "Already had fbtft_device"
 else
     echo "Adding fbtft_device"
     sudo chroot "${chr}" /bin/sh -c 'cat >> /etc/modules' <<EOF
fbtft_device
EOF
 fi
}

function install_onoffbutton() {
 chr="$1"
 shift

 echo "Adding rpi_power_switch to /etc/modules"
 if grep -xq "rpi_power_switch" "${chr}/etc/modules" ; then
     echo "Already had rpi_power_switch"
 else
     echo "Adding rpi_power_switch"
     sudo chroot "${chr}" /bin/sh -c 'cat >> /etc/modules' <<EOF
rpi_power_switch
EOF
 fi

 echo "Adding rpi_power_switch config to /etc/modprobe.d/adafruit.conf"
 if grep -xq "options rpi_power_switch gpio_pin=23 mode=0" "${chr}/etc/modprobe.d/adafruit.conf" ; then
     echo "Already had rpi_power_switch config"
 else
     echo "Adding rpi_power_switch"
     sudo chroot "${chr}" /bin/sh -c 'cat >> /etc/modprobe.d/adafruit.conf' <<EOF
options rpi_power_switch gpio_pin=23 mode=0
EOF
 fi 

}

function update_x11profile() {
 chr="$1"
 shift

 echo "Moving 99-fbturbo.conf to /home/pi"
 sudo chroot "${chr}" mv /usr/share/X11/xorg.conf.d/99-fbturbo.conf /home/pi

 if grep -xq "export FRAMEBUFFER=/dev/fb1" "${chr}/home/pi/.profile" ; then
     echo "Already had 'export FRAMEBUFFER=/dev/fb1'"
 else
     echo "Adding 'export FRAMEBUFFER=/dev/fb1'"
     sudo chroot "${chr}" /bin/sh -c 'cat >> /home/pi/.profile' <<EOF
export FRAMEBUFFER=/dev/fb1
EOF
 fi
}


function update_adafruitconf() {
 chr="$1"
 shift

 if [ "${pitfttype}" == "22" ]
     then
     sudo chroot "${chr}" /bin/sh -c 'cat > /etc/modprobe.d/adafruit.conf' <<EOF
options fbtft_device name=adafruit22a gpios=dc:25 rotate=270 frequency=32000000
EOF
 fi
 
 if [ "${pitfttype}" == "28r" ]
     then
     sudo chroot "${chr}" /bin/sh -c 'cat > /etc/modprobe.d/adafruit.conf' <<EOF
options fbtft_device name=adafruitrt28 rotate=90 frequency=32000000
EOF
 fi

 if [ "${pitfttype}" == "28c" ]
     then
     sudo chroot "${chr}" /bin/sh -c 'cat > /etc/modprobe.d/adafruit.conf' <<EOF
options fbtft_device name=adafruitct28 rotate=90 frequency=32000000
EOF
 fi

 if [ "${pitfttype}" == "35r" ]
     then
     sudo chroot "${chr}" /bin/sh -c 'cat > /etc/modprobe.d/adafruit.conf' <<EOF
options fbtft_device name=adafruitrt35 rotate=90 frequency=32000000
EOF
 fi
}

# currently for '90' rotation only
function update_xorg() {
 chr="$1"
 shift
 sudo chroot "${chr}" mkdir -p /etc/X11/xorg.conf.d

 if [ "${pitfttype}" == "28r" ]
     then
     sudo chroot "${chr}" /bin/sh -c 'cat > /etc/X11/xorg.conf.d/99-calibration.conf' <<EOF
Section "InputClass"
        Identifier      "calibration"
        MatchProduct    "stmpe-ts"
        Option  "Calibration"   "3800 200 200 3800"
        Option  "SwapAxes"      "1"
EndSection
EOF
 fi

 if [ "${pitfttype}" == "35r" ]
     then
     sudo chroot "${chr}" /bin/sh -c 'cat > /etc/X11/xorg.conf.d/99-calibration.conf' <<EOF
Section "InputClass"
        Identifier      "calibration"
        MatchProduct    "stmpe-ts"
        Option  "Calibration"   "3800 120 200 3900"
        Option  "SwapAxes"      "1"
EndSection
EOF
 fi

 if [ "${pitfttype}" == "28c" ]
     then
     sudo chroot "${chr}" /bin/sh -c 'cat > /etc/X11/xorg.conf.d/99-calibration.conf' <<EOF
Section "InputClass"
         Identifier "captouch"
         MatchProduct "ft6x06_ts"
         Option "SwapAxes" "1"
         Option "InvertY" "1"
         Option "Calibration" "0 320 0 240"
EndSection
EOF
 fi

}

function update_udev() {
 chr="$1"
 shift
 if [ "${pitfttype}" == "28r" ] || [ "${pitfttype}" == "35r" ]
     then
     sudo chroot "${chr}" /bin/sh -c 'cat > /etc/udev/rules.d/95-stmpe.rules' <<EOF
SUBSYSTEM=="input", ATTRS{name}=="stmpe-ts", ENV{DEVNAME}=="*event*", SYMLINK+="input/touchscreen"
EOF
 fi

 if [ "${pitfttype}" == "28c" ]
     then
     sudo chroot "${chr}" /bin/sh -c 'cat > /etc/udev/rules.d/95-ft6206.rules' <<EOF
SUBSYSTEM=="input", ATTRS{name}=="ft6x06_ts", ENV{DEVNAME}=="*event*", SYMLINK+="input/touchscreen" 
EOF
 fi
}

# currently for '90' rotation only
function update_pointercal() {
 chr="$1"
 shift
 if [ "${pitfttype}" == "28r" ]
     then
     sudo chroot "${chr}" /bin/sh -c 'cat > /etc/pointercal' <<EOF
-30 -5902 22077792 4360 -105 -1038814 65536
EOF
 fi

 if [ "${pitfttype}" == "35r" ]
     then
     sudo chroot "${chr}" /bin/sh -c 'cat > /etc/pointercal' <<EOF
8 -8432 32432138 5699 -112 -965922 65536
EOF
 fi

 if [ "${pitfttype}" == "28c" ]
     then
     sudo chroot "${chr}" /bin/sh -c 'cat > /etc/pointercal' <<EOF
320 65536 0 -65536 0 15728640 65536
EOF
 fi
}


function success() {
 exit 0
}

function is_zip() {
 unzip -qq -l "$*" > /dev/null 2> /dev/null
}


function is_image() {
 partitions=$(($(echo p | fdisk "${imagename}" 2> /dev/null | grep "${imagename}" | wc -l) - 1))

 # We need at least two partitions
 if [ $partitions -lt 2 ]
 then
  return 1
 fi
 return 0
}

function print_version() {
 echo "Adafruit PiTFT v1.1"
 exit 1
}

function print_help() {
 echo "Usage: $0 -r [-i input-file] [-o output.img] -t [pitfttype]"
 echo "    -h            Print this help"
 echo "    -v  Print version information"
 echo "    -r            Turn the root filesystem into PiTFT compatible"
 echo "    -t [type]     Specify the type of PiTFT: '28r' (PID 1601) or '28c' (PID 1983) or '35r' or '22'"
 echo "Or, you can work on an image file:"
 echo "    -i [file]     Source Raspbian input file"
 echo "    -o [output]   Output name of image file"
 echo ""
 echo "You must specify either -r (to update this system) or -i & -o (to"
 echo "patch a fresh Raspbian image.)"
 exit 1
}

function mount_image() {
 imagename="$1"
 mountpoint="$2"
 line1=$(echo p | fdisk "${imagename}" 2> /dev/null | grep "${imagename}1")
 if [ $? -ne 0 ]
 then
  bail "Unable to read partition table from image"
 fi

 line2=$(echo p | fdisk "${imagename}" 2> /dev/null | grep "${imagename}2")
 if [ $? -ne 0 ]
 then
  bail "Unable to read partition table from image"
 fi

 vfat_offset=$(($(echo ${line1} | awk '{print $2}') * 512))
 ext_offset=$(($(echo ${line2} | awk '{print $2}') * 512))

 sudo mkdir -p "${mountpoint}" || bail "Unable to make mountpoint"
 sudo mount -oloop,offset=${ext_offset} "${imagename}" "${mountpoint}" \
  || bail "Unable to mount root filesystem"
 sudo mount -oloop,offset=${vfat_offset} "${imagename}" "${mountpoint}/boot" \
  || bail "Unable to mount root filesystem"
}

function unmount_image() {
 mountpoint="$1"
 sudo -n umount "${mountpoint}/boot" 2> /dev/null
 sudo -n umount "${mountpoint}" 2> /dev/null
 sudo -n rmdir "${mountpoint}" 2> /dev/null < /dev/null
}

group=ADAFRUIT
function info() {
 system="$1"
 group="${system}"
 shift
 FG="1;32m"
 BG="40m"
 echo -e "[\033[${FG}\033[${BG}${system}\033[0m] $*"
}

function bail() {
 FG="1;31m"
 BG="40m"
 echo -en "[\033[${FG}\033[${BG}${group}\033[0m] "
 if [ -z "$1" ]
 then
  echo "Exiting due to error"
 else
  echo "Exiting due to error: $*"
 fi
 exit 1
}

function apt_update() {
 chr="$1"
 shift
 sudo chroot "${chr}" apt-get -y update
}

function apt_install() {
 chr="$1"
 shift
 sudo chroot "${chr}" apt-get -y install $*
}


function dpkg_install_kernel() {
    chr="$1"
    shift

    cp libraspberrypi-bin-adafruit.deb libraspberrypi-dev-adafruit.deb libraspberrypi-doc-adafruit.deb libraspberrypi0-adafruit.deb raspberrypi-bootloader-adafruit-20140917-1.deb "${chr}"/tmp
    #ls -l "${chr}"/tmp
    sudo chroot "${chr}" dpkg -i -B /tmp/libraspberrypi-bin-adafruit.deb /tmp/libraspberrypi-dev-adafruit.deb /tmp/libraspberrypi-doc-adafruit.deb /tmp/libraspberrypi0-adafruit.deb /tmp/raspberrypi-bootloader-adafruit-20140917-1.deb
}

function install_console() {
    chr="$1"
    shift
    
    sudo sed -i 's/rootwait$/rootwait fbcon=map:10 fbcon=font:VGA8x8/g' "${mountpoint}/boot/cmdline.txt"
    sudo sed -i 's/BLANK_TIME=.*/BLANK_TIME=0/g' "${mountpoint}/etc/kbd/config"
}

function ask() {
# http://djm.me/ask
    while true; do
 
 if [ "${2:-}" = "Y" ]; then
     prompt="Y/n"
     default=Y
 elif [ "${2:-}" = "N" ]; then
     prompt="y/N"
     default=N
 else
     prompt="y/n"
     default=
 fi
 
# Ask the question
 read -p "$1 [$prompt] " REPLY
 
# Default?
 if [ -z "$REPLY" ]; then
     REPLY=$default
 fi
 
# Check if the reply is valid
 case "$REPLY" in
     Y*|y*) return 0 ;;
            N*|n*) return 1 ;;
 esac
    done
}

trap cleanup EXIT

echo "START"
is_zipped=0
mountpoint=/

args=$(getopt -uo 'hvri:t:o:b:' -- $*)
[ $? != 0 ] && print_help
set -- $args

for i
do
 case "$i"
 in
  -h)
   print_help
   ;;
  -v)
   print_version
   ;;
  -i)
   imagename="$2"
   echo "Image file: ${imagename}"
   if [ ! -e "${imagename}" ]
   then
    bail "Image \"${imagename}\" doesn't exist"
    
   fi

   # Determine if it's a zipfile, or a valid image file
   if is_zip "${imagename}"
   then
    info ADAFRUIT "File is zipped"
    is_zipped=1
   elif is_image "${imagename}"
   then
    info ADAFRUIT "Image file is not zipped"
    is_zipped=0
   else
    bail "Image file is not valid"
   fi
   shift
   shift
   ;;
  -o)
   pitftname="$2"
   mountpoint="/media/rpi"
   shift
   shift
   ;;
  -r)
   mountpoint="/"
   shift
   ;;
  -t)
          pitfttype="$2"
   echo "Type = ${2}"
   shift
   shift
   ;;
     
 esac
done

if [ "${mountpoint}" != "/" ] && [ -z "${imagename}" ]
then
 print_help
fi

if  [ "${pitfttype}" != "28r" ] && [ "${pitfttype}" != "28c" ] && [ "${pitfttype}" != "35r" ] && [ "${pitfttype}" != "22" ]
then
    echo "Type must be '28r' (2.8\" resistive, PID 1601) or '28c' (2.8\" capacitive, PID 1983)  or '35r' (3.5\" Resistive) or '22' (2.2\" no touch)"
    print_help
fi
# Make sure we have a job to do
if [ "${mountpoint}" != "/" ] && [ -z "${pitftname}" ]
then
 echo "Must specify output image file"
 print_help
fi

info ADAFRUIT "Starting image modification"

needs_clone=1
if [ ${is_zipped} -eq 1 ] && [ "${mountpoint}" != "/" ]
then
 extracted=$((unzip -l -qq "${imagename}" | awk '{print $4}'))
 unzip -qq "${imagename}" || bail "Unable to extract zip"
 if ! is_image "${extracted}"
 then
  rm -f "${extracted}"
  bail "Zip does not contain a valid image"
 fi
 needs_clone=0
 imagename="${extracted}"
fi


wgetfiles

if [ "${mountpoint}" != "/" ]
    then
    if [ ${needs_clone} -eq 1 ]
 then
 info PITFT "Cloning image..."
 info PITFT "---> cp ${imagename} ${pitftname}" 
 cp "${imagename}" "${pitftname}" \
     || bail "Unable to create PiTFT image"
    else
 info PITFT "Renaming image..."
 info PITFT "---> mv ${imagename} ${pitftname}" 
 mv "${imagename}" "${pitftname}" \
     || bail "Unable to rename PiTFT image"
    fi
    
    info PITFT "Mounting image..."
    mount_image "${pitftname}" "${mountpoint}" \
 || bail "Unable to mount PiTFT image"
fi

info PITFT "Updating apt cache..."

apt_update "${mountpoint}" \
    || bail "Unable to update apt cache"

# info PITFT "Slimming down image..."
# apt_cleanup "${mountpoint}" "pkgs.txt" \
#  || bail "Unable to update package list"

info PITFT "Installing Adafruit kernel..."

dpkg_install_kernel "${mountpoint}" \
    || bail "Unable to dpkg debs"

info PITFT "Updating /etc/modules..."
update_etcmodules "${mountpoint}" \
    || bail "Unable to update /etc/modules"

info PITFT "Updating /etc/modprobe.d/adafruit.conf..."
update_adafruitconf "${mountpoint}" \
    || bail "Unable to update /etc/modprobe.d/adafruit.conf"

info PITFT "Updating X11 default calibration..."
update_xorg "${mountpoint}" \
    || bail "Unable to update /etc/X11/xorg.conf.d/99-calibration.conf"

info PITFT "Updating X11 setup tweaks..."
update_x11profile "${mountpoint}" \
    || bail "Unable to update X11 setup"

info PITFT "Updating TSLib default calibration..."
update_pointercal "${mountpoint}" \
    || bail "Unable to update /etc/pointercal"

info PITFT "Updating SysFS rules for Touchscreen..."
update_udev "${mountpoint}" \
    || bail "Unable to update /etc/udev/rules.d"

info PITFT "Installing evtest tslib libts-bin..."
apt_install "${mountpoint}" evtest tslib libts-bin \
    || bail "Unable to install evtest tslib libts-bin"


# ask for console access?
if ask "Would you like the console to appear on the PiTFT display?"
    then
    info PITFT "Updating console to PiTFT..."
    install_console "${mountpoint}" \
 || bail "Unable to configure console"
fi



if [ "${pitfttype}" != "35r" ]
    then
# ask for 'on/off' button
    if ask "Would you like GPIO #23 to act as a on/off button?"
 then
 info PITFT "Adding GPIO #23 on/off to PiTFT..."
     install_onoffbutton "${mountpoint}" \
  || bail "Unable to add on/off button"
    fi
fi

if [ "${mountpoint}" != "/" ]
    then
    info PITFT "Unmounting image..."
    unmount_image "${mountpoint}"
fi

info PITFT "Done"

2014년 8월 1일 금요일

Install IBM Worklight Studio

1. 요구사항
a. OS
Mac OS X: 10.8 or 10.9
Windows: 7 or 8
Linux: RHEL 6, SUSE 11, or Ubuntu 12.04

b. Eclipse
Eclipse IDE for Java EE Developers : Juno SR2 (4.2.2), Kepler SR1 (4.3.1), Kepler SR2 (4.3.2), or Luna R (4.4)

2. Eclipse 실행
Help > Eclipse Marketplace

3. Worklight로 검색

4. 설치
"IBM Worklight Studio"은 필수고 "IBM Dojo Mobile Tools", "IBM jQuery Mobile Tools"은 옵션


* 참고 : http://www.ibm.com/developerworks/mobile/worklight/index.html



2014년 7월 31일 목요일

mysql tips


* 사용자 추가
CREATE DATABASE databasename;
CREATE USER 'userid'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON databasename.* TO 'userid'@'%';
CREATE USER 'userid'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON databasename.* TO 'userid'@'localhost';
flush privileges;


* table의 DB engine 변경
alter table s3board type=innodb;




2014년 7월 16일 수요일

Install Redmine on Ubuntu 12.04 LTS (with MyLyn and Eclipse plugins)

http://ioriy2k.pe.kr/archives/4762


$ sudo apt-get install tasksel
$ sudo tasksel install lamp-server

$ sudo add-apt-repository ppa:ondrej/redmine
$ sudo apt-get update
$ sudo apt-get install redmine redmine-mysql

$ sudo ln -s /usr/share/redmine/public /var/www/redmine

$ sudo apt-get remove libapache2-mod-passenger

$ sudo gem install passenger

$ sudo apt-get install libcurl4-openssl-dev libssl-dev zlib1g-dev apache2-prefork-dev libapr1-dev libaprutil1-dev
$ sudo passenger-install-apache2-module

* 빌드후 다음과 같은 메세지가 출력되면 메모
   LoadModule passenger_module /var/lib/gems/1.8/gems/passenger-4.0.46/buildout/apache2/mod_passenger.so
   <IfModule mod_passenger.c>
     PassengerRoot /var/lib/gems/1.8/gems/passenger-4.0.46
     PassengerDefaultRuby /usr/bin/ruby1.8
   </IfModule>

$ sudo vi /etc/apache2/mods-available/passenger.load
LoadModule passenger_module /var/lib/gems/1.8/gems/passenger-4.0.46/buildout/apache2/mod_passenger.so

$ sudo vi /etc/apache2/mods-available/passenger.conf
<IfModule mod_passenger.c>
  PassengerRoot /var/lib/gems/1.8/gems/passenger-4.0.46
  PassengerDefaultRuby /usr/bin/ruby1.8
  PassengerDefaultUser www-data
</IfModule>

$ sudo vi /etc/apache2/sites-available/default
<Directory /var/www/redmine>
    RailsBaseURI /redmine
    PassengerResolveSymlinksInDocumentRoot on
</Directory>

$ sudo a2enmod passenger
$ sudo service apache2 restart

$ sudo ufw allow 80



http://ioriy2k.pe.kr/archives/4843

$ sudo apt-get install git-core ruby-git
$ cd /usr/share/redmine
$ sudo ruby script/plugin install --force git://redmin-mylyncon.git.sourceforge.net/gitroot/redmin-mylyncon/redmine-mylyn-connector
$ sudo service apache2 restart

2014년 7월 3일 목요일

Subversion 특정 날짜동안 변경된 목록 조회

svn diff --username <userid> --password <password> <svn_url> --summarize -r {2014-06-20}:{2014-07-02} > log.txt

2014년 7월 2일 수요일

[cloudv] Installing Jenkins on Ubuntu



sudo apt-get install openjdk-7-jdk

wget -q -O - http://pkg.jenkins-ci.org/debian/jenkins-ci.org.key | sudo apt-key add -
sudo sh -c 'echo deb http://pkg.jenkins-ci.org/debian binary/ > /etc/apt/sources.list.d/jenkins.list'
sudo apt-get update
sudo apt-get install jenkins

* start jenkins service
sudo service jenkins start

* Change Jenkins HTTP Port
sudo vi /etc/default/jenkins
HTTP_PORT=<port>

* Open firewall using ufw
sudo ufw allow <port>

---

* set post scripts for deploy

$ sudo passwd jenkins
$ sudo vi /etc/sudoers
Defaults:jenkins !requiretty
jenkins ALL = NOPASSWD: /var/lib/jenkins/post_scripts/deploy_myapp.sh

$ sudo su - jenkins
jenkins$ mkdir /var/lib/jenkins/post_scripts
jenkins$ vi /var/lib/jenkins/post_scripts/deploy_myapp.sh
service tomcat6 stop
rm -rf /var/lib/tomcat6/webapps/huyang/
service tomcat6 start


http://localhost:8080/job/<myapp>/configure
Post Steps > Execute shell > Command
sudo /var/lib/jenkins/post_scripts/deploy_myapp.sh






2014년 6월 30일 월요일

[cloudv] Install subversion on ubuntu

$ sudo apt-get install subversion
$ sudo svnadmin create --fs-type fsfs /var/lib/subversion
$ sudo vi /var/lib/subversion/conf/svnserve.conf
anon-access = none
auth-access = write
password-db = passwd

$ sudo vi /var/lib/subversion/conf/passwd
[users]
<id> = <password>

$ sudo svnserve -d -r /var/lib/subversion --listen-port 443

$ sudo vi /etc/rc.local
# Subversion
svnserve -d -r /var/lib/subversion --listen-port 443

$ svn mkdir --parents svn://localhost/public/trunk --username <id>
$ svn mkdir --parents svn://localhost/public/branches --username <id>
$ svn mkdir --parents svn://localhost/public/tags --username <id>


* Subversion 종료
killall svnserve

* SVN 접속확인
svn://<ip>

* start svn subversion on OS starts
$ cd /etc/init.d
$ sudo vi svnserve
svnserve -d -r /var/lib/subversion
chmod a+x ./svnserve
$ sudo update-rc.d svnserve defaults