카테고리 보관물: Linux

WordPress permalink(고유주소) 변경

WordPress의 permalink(고유주소) 형식을 변경하면 검색 엔진을 포함해서 외부에서 들어 오는 링크가 동작하지 않는다. 서버에 대한 root권한이 없다면 .htaccess file에, 권한이 있다면 apache2.conf에 새로운 형식의 permalink로 연결되도록 설정해 주는 것으로 이 문제를 해결 할 수 있다.

처음에는 서버를 재시작 할 필요가 없는 .htaccess에 관련 설정을 했었는데,  아파치 튜토리얼: .htaccess 파일 문서에 .htaccess file 설정은 성능에 영향을 미칠 수 있으므로 권한이 있는 경우라면 apache2.conf에 설정하라는 이야기가 있어서 이것을 수정했다.

먼저 Apache2의 rewrite module을 enable한다.

$ sudo a2enmod rewrite

그다음 apache2.conf에 관련 설정을 추가한다.

#
# Rewrite settings.
#
# Articles
#    e.g) ~/archives/1234 -> ~/?p=1234
# Tags/Categories
#    e.g) ~/archives/tag/database -> ~/?tag=database
# Dates
#    e.g) ~/archives/date/2013/02 -> ~/?m=201302
<IfModule mod_rewrite.c>
    RewriteEngine On
    RedirectMatch 301 ^/archives/(\d+)$ http://54.179.110.104/?p=$1
    RedirectMatch 301 ^/archives/(\w+)/(\w+)$ http://54.179.110.104/?$1=$2
    RedirectMatch 301 ^/archives/date/([0-9]{4})/([0-9]{2})$ http://54.179.110.104/?m=$1$2
</IfModule>


이 설정은 이전의 /archives/xxxx 형식의 글이나, /archives/tag/xxxx 형식의 tag, /archives/yyyy/mm 형식의 날짜를 “Ugly”한 기본 형식으로 변경하기 위한 것이다.

마지막으로 Apache2 서버를 재시작해준다.

$ sudo service apache2 restart

MinnowboardMAX에 Yocto 올려본 내용 정리

Yocto는 embedded 환경에 Linux를 편리하게 적용하기위한 목적의 프로젝트로 보다 자세한 내용은 project home page인 https://www.yoctoproject.org에서 확인할 수 있다. 이 글에서는 Intel Baytrail을 사용하는 MinnowboardMAX에  Yocto linux를 올리는 과정을 설명한다.

환경설정

  • Ubuntu 14.04 (64bit)
    sudo apt-get install gawk wget git-core diffstat unzip texinfo gcc-multilib build-essential chrpath socat libsdl1.2-dev xterm
  • 64bit firmware가 설치된 MinnowBoardMax: Firmware update에 대한 자세한 내용은 MinnowboardMax에 대한 Intel의 문서를 참조.
  • Yocto build system (poky)와 Intel corei64 BSP
    :2016년 현재의 최종 stable release인 Jethro branch를 받는다.
    • Poky build system
      git clone -b jethro git://git.yoctoproject.org/poky.git 
    • Intel core-i7 64 BSP
      git://git.yoctoproject.org/meta-intel -b jethro

Build

Poky는 build system이고 meta-intel은 Intel core-i7 64를 위한 BSP이다. Poky에서 meta-intel BSP를 build할 수 있도록 약간의 수정이 필요 하다. bblayers.conf file에 meta-intel BSP를 build에 포함하도록 BBLAYERS에 추가하고, local.conf file에는 MACHINE을 intel-corei7-64로 설정해 준다.

$> cd poky
poky$> source oe-init-build-env
build$> echo "BBLAYERS += \"$HOME/Yocto/meta-intel\"" >> conf/bblayers.conf
build$> echo "MACHINE = \"intel-corei7-64\"" >> conf/local.conf
build$> bitbake core-image-sato
yocto_sato_running

Flashing

Build가 완료되면 build/tmp/deploy/images/intel-corei7-64/core-image-minimal-intel-corei7-64.hddimg에 image가 만들어지는데 이것을 Yocto에서 지원하는 mkefidisk.shscript 를 이용해서 USB drive 혹은 SDcard에 flash한다.

sudo $HOME/Yocto/poky/scripts/contrib/mkefidisk.sh /dev/sdb tmp/deploy/images/intel-corei7-64/core-image-minimal-intel-corei7-64.hddimg /dev/sda

이 예제에서 사용된 /dev/sdb는 build machine에 연결된 USB drive의 경로로 device 연결 후 dmesg 혹은 mount command로 확인할 수 있고 가장 마지막에 있는 /dev/sda는 target device에서의 경로라고 하는데 명확한 내용을 찾기 힘들어서 그냥 /dev/sda로 설정했더니 별 문제는 없었다.  😉

Booting-up

Flashing한 USB drive를 연결한 상태에서 booting을 완료하면 UEFI shell로 진입하는데 다음의 command로 Yocto를 실행시킬 수 있다.

Shell> fs0:
Shell> bootx64

Build 환경에 대한 정보표시

현재의 layer들 보기

$> bitbake-layers show-layers
layer path priority
==========================================================================
meta /home/XXX/Yocto/poky/meta 5
meta-yocto /home/XXX/Yocto/poky/meta-yocto 5
meta-yocto-bsp /home/XXX/Yocto/poky/meta-yocto-bsp 5
meta-intel /home/XXX/Yocto/meta-intel 5

Overlay된 recipe들 보기

$> bitbake-layers show-overlayed
Parsing recipes..done.
=== Overlayed recipes ===
xf86-input-evdev:
meta 2:2.8.2
meta-intel 2:2.6.0
xf86-input-synaptics:
meta 2:1.7.3
meta 2:0.15.2+gitAUTOINC+934bc0012f
meta-intel 2:1.6.3
xserver-xorg:
meta 2:1.15.0
meta-intel 1:1.9.3

적용된 BB appends 보기

$> bitbake-layers show-appends
Parsing recipes..done.
=== Appended recipes ===
alsa-state.bb:
/home/XXX/Yocto/poky/meta-yocto-bsp/recipes-bsp/alsa-state/alsa-state.bbappend
formfactor_0.0.bb:
/home/XXX/Yocto/poky/meta-yocto-bsp/recipes-bsp/formfactor/formfactor_0.0.bbappend
linux-yocto_3.14.bb:
/home/XXX/Yocto/poky/meta-yocto-bsp/recipes-kernel/linux/linux-yocto_3.14.bbappend
/home/XXX/Yocto/meta-intel/common/recipes-kernel/linux/linux-yocto_3.14.bbappend
linux-yocto-rt_3.14.bb:
/home/XXX/Yocto/meta-intel/common/recipes-kernel/linux/linux-yocto-rt_3.14.bbappend
packagegroup-core-tools-profile.bb:
/home/XXX/Yocto/poky/meta-yocto-bsp/recipes-core/packagegroups/packagegroup-core-tools-profile.bbappend
psplash_git.bb:
/home/XXX/Yocto/poky/meta-yocto/recipes-core/psplash/psplash_git.bbappend
xserver-xf86-config_0.1.bb:
/home/XXX/Yocto/poky/meta-yocto-bsp/recipes-graphics/xorg-xserver/xserver-xf86-config_0.1.bbappend
linux-yocto_3.10.bb (skipped):
/home/XXX/Yocto/poky/meta-yocto-bsp/recipes-kernel/linux/linux-yocto_3.10.bbappend
uclibc_git.bb (skipped):
/home/XXX/Yocto/poky/meta-yocto-bsp/recipes-core/uclibc/uclibc_git.bbappend
linux-yocto-dev.bb (skipped):
/home/XXX/Yocto/meta-intel/common/recipes-kernel/linux/linux-yocto-dev.bbappend
linux-yocto_3.4.bb (skipped):
/home/XXX/Yocto/poky/meta-yocto-bsp/recipes-kernel/linux/linux-yocto_3.4.bbappen

Trouble shooting

“ERROR: No recipes available for:”

예전 버전의 Yocto (daisy)에서 kernel version과 다른 recipe가 포함되어 있는 경우 이와 같은 오류를 내면서 build를 멈추는 경우가 있다. 사용하지 않는 버전의 bbappend file을 삭제하고 재시도 해본다. 예를들어 Daisy version에서는 kernel version 3.14가 사용되는데, 3.10에 대한 bbappend file이 있으면 이런 문제가 생긴다. 이 떄는 다음과 같이 3.10에 해당하는 file들을 삭제한다.

$> rm yocto_i7_64/meta-intel/common/recipes-kernel/linux/linux-yocto_3.10.bbappend yocto_i7_64/meta-intel/common/recipes-kernel/linux/linux-yocto-rt_3.10.bbappend

“ERROR: Fetcher failure: Unable to find revision XXX in branch YYY even from upstream”

Git fetching에 실패하는 경우인데, git에 관련한 설정이 올바르게 되어 있는 경우에도 이 문제가 생기고 있는것이라면 사용중인 BSP와 Poky의 version이 맞는지 다시한번 확인해 보자. Poky build system과 BSP의 version이 맞지 않는 경우에 특정 commit ID를 찾지 못해서 이러한 문제가 생기기도 한다.

...
ERROR: Function failed: Fetcher failure for URL: 'git://git.yoctoproject.org/yocto-kernel-cache;type=kmeta;name=meta;branch=yocto-3.14;destsuffix=kernel-meta'. Unable to fetch URL from any source.
ERROR: Logfile of failure stored in: /home/XXX/Yocto/poky-jethro-14.0.0/build/tmp/work/corei7-64-intel-common-poky-linux/linux-yocto/3.14.4+gitAUTOINC+62f236c734_cb22733185-r0/temp/log.do_fetch.3006
NOTE: recipe linux-yocto-3.14.4+gitAUTOINC+62f236c734_cb22733185-r0: task do_fetch: Failed
ERROR: Task 48 (/home/XXX/Yocto/poky-jethro-14.0.0/meta/recipes-kernel/linux/linux-yocto_3.14.bb, do_fetch) failed with exit code '1'
...

References

[Tip] PyDev plugin 설치후 동작하지 않을 때

Ubuntu용 Eclipse에 PyDev를 설치하고 program을 재실행 했는데도 *.py 확장자가 인식되지 않고 실행과 디버깅 메뉴에도  Python 항목이 나타나지 않는 것은 PyDev가 3.0 버전 부터는 Java7를 요구하기 때문이었다. (참조 기사)

pydev_py_file_not_recognized

같은 서버에서 Android를 build하고 있어서 Oracle JDK version을 올릴 수는 없기 때문에 옆에서 놀고 있던 Open JDK의 version을 7로 올려서 설정하기로 했다.

Open JDK는 Ubuntu software center에서 설치할 수 있고, eclipse.ini file을 편집해서 사용할 VM을 이것으로 지정해 주면 된다. 

...
-vm
/usr/lib/jvm/java-7-openjdk-amd64/bin/java
...

PlantUML war file 설치

그동안 UML을 그려야할 필요가 있을때 StarUML을 써왔는데, Windows만 지원하는 software라는 한계도 있고 해서 얼마 전 부터는 우연히 알게된 PlantUML을 사용하고 있다. 이 software는 마치 LaTex 처럼 text로 UML을 그리기 위한 description을 작성하면 이를 기반해서 UML을 그려준다. 문법도 그다지 어렵지 않고 직관적이어서 사용하기도 쉬운 편이다.

작성한 text를 UML로 그리기 위한 client program들은 여러가지 형태가 지원되는데 보다 자세한 목록은 여기에서  확인할 수 있다. 내가 그동안 사용하던 것은 Chrome extension이었는데 class diagram들이 조금씩 복잡해 지면서  여러개의 file로 쪼갤 필요가 있게 되니 ‘!include‘ directive를 사용할 수 없는 문제가 있었다. 아마도 Chrome이 보안 문제로 extension의 local file 간접 access하는 것을 막은게 아닐까 싶다. 그래서 servlet으로 설치하는 방법을 사용하기로 했다. 이전에 Opengrok을 설치한 적이 있으니 설치 환경은 ubuntu 12.04와 tomcat이 이미 설치된 상태 이다.

  • 필요한 package들의 설치
    : PlantUML servlet을 돌리려면 graphviz package가 필요한데 이것이 설치되어 있지 않으면 다음과 같은 오류가 발생한다. 그리고 war file을 쉽게 deploy하기 위해 tomcat-admin package를 설치했다.
    SC_plantuml_dot_file_not_exists_err
sudo apt-get install tomcat6-admin graphviz
  • PlantUML war file을 download 받기
    PlantUML download page에서 war file (Java J2EE WAR File)을 download 받는다.
  • Tomcat admin 설정
    : Tomcat admin으로 접속하려면 amdin 계정이 필요하니 만약 계정이 없다면 tomcat-users.xml file을 편집해서 계정을 추가해 준다. 이 파일에는 비밀번호를 평문으로 함께 기록해야 하기는 하지만, root와 tomcat외에는 read permission이 없으므로 다른 계정에 의해 이 파일이 읽히지는 않는다. 계정을 추가해준 이후에는 tomcat server를 재실행한다.

    sudo vi /var/lib/tomcat6/conf/tomcat-users.xml
 <!--
 NOTE: By default, no user is included in the "manager-gui" role required
 to operate the "/manager/html" web application. If you wish to use this a pp,
 you must define such a user - the username and password are arbitrary.
 -->
 <!--
 NOTE: The sample user and role entries below are wrapped in a comment
 and thus are ignored when reading this file. Do not forget to remove
 <!.. ..> that surrounds them.
 -->
 <role rolename="admin"/>
 <user username="admin" password="ADMIN_PASSWORD" roles="admin,manager,manager-gui"/>
 </tomcat-users>
  • Tomcat admin page로 부터 deploy: 모든 준비가 되었으니 tomcat admin page (http://SERVER:8080/manager/html) 에서 war file을 선택하고 deploy한다.
  • Service page 접속
    : Web browser에서 service page (http://SERVER:8080/plantuml)로 접속한다.

OpenGrok 0.11.1

Update 2020년 12월 26일.
다행히 OpenGrok project는 새 주인을 잘 만나 GitHub(https://github.com/oracle/opengrok)에서 배포되고 있어, 아래의 내용은 더 이상 유효하지 않습니다. GitHub로 부터 최신 버전을 설치하는 방법은 OpenGrok 최신버전 설치하기를 참고하세요.

언제 부턴가 Oracle에서 OpenGrok page가 없어졌다.
GitHub에 source로 배포하는 곳은 있는데 빌드된 버전에 대한 링크를 찾기 힘들어서 예전에 받아 두었던 0.11.1 version의 source와 binary를 올려 둔다.

  • Binary : <링크 삭제됨>
  • Source : <링크 삭제됨>