레이블이 Linux인 게시물을 표시합니다. 모든 게시물 표시
레이블이 Linux인 게시물을 표시합니다. 모든 게시물 표시

2018년 5월 25일 금요일

우분투/페도라 런처 아이콘 생성하기 (X-Windows 계열 리눅스 공통)

아래는 우분투 페도라 등 X-Windows 계열 리눅스 Desktop 환경에서 런쳐아이콘 (윈도우에서 바로가기에 해당) 생성하는 방법이다.
예를 들면 이클립스 Linux 버전을 다운받은 후 실행아이콘이 없어서 매번 console 로 실행해야 하는 불편함을 제거 할 수 있다.
이클립스 실행 아이콘 생성을 예로 들면 아래와 같은 과정을 따라하면 된다.

1. 아래 명령어로 vi 편집 창을 연다.
$ vi /usr/share/applications/eclipse.desktop

2. 아래 텍스트를 입력 한다.
    (vi 사용법을 모르시는 분들은 다른 Editor 등을 통해 편집하셔도 당연히 됩니다.)
    (eclipse 의 설치 경로는 "/opt" 라고 가정 합니다.)
---------------- 아래 ----------------
[Desktop Entry]
Name=eclipse
Type=Application
Exec=/opt/eclipse/eclipse
Icon=/opt/eclipse/icon.png
---------------- 아래 끝 --------------

3. 패널등의 검색화면에서 eclipse 를 타이핑 하면 실행 아이콘을 볼 수 있다.

톰캣의 원리? - 작성중

"추상화 시켜서 하나하나 이해해 나가는데 효율적이다.
그렇다고 물론 무조건적으로 추상화 시키게 답은 아니다.
하층 구조를 어느 정도 염두하면서 추상화해 이해할 필요가 있다."


일단,

- 클라이언트에서 서버로의 html,jsp,servlet 페이지 호출

- 서버의 웹서버 프로그램(apache)에서 처음으로 처리

html페이지 요청일 경우, 그대로 클라이언트에게 html페이지 전송

html페이지가 아닌 jsp 나 servelt 일 경우, 웹컨테이너(tomcat) 에게 넘겨서 처리

- 웹컨테이너는 "jsp or servlet -> html" 변환시켜 웹서버 프로그램에게 다시 넘김

- 웹서버 프로그램은 변환된 html페이지를 클라이언트에게 전송





- 먼저 client 가 http://localhost:8080/index.jsp를 쳐서 요청을 한다고 하면

- 웹서버 프로그램(apache)에서 html이 아니기 때문에 jsp를 해석하기 위해서 tomcat의 common/lib 폴더를 뒤져서
해당 jsp파일을 servlet로 컴파일 합니다.

- 한번 컴파일 된 jsp파일은 다시 요청이 될 때, 변경사항이 없으면
기존에 컴파일된 서블릿을 그대로 사용하고 변동사항이 있으면 다시 컴파일하게됩니다.

- 오히려 JAVA application에서 컴파일 작업을 일일이 해주는것 대신에
jsp page를 호출하면 container가 자동으로 컴파일 작업을 해주는 것입니다.

텍스트파일 인코딩 바꾸기


for l in ./*.*
do
    iconv -c -f euc-kr -t utf-8 $l > $l.tmp
    mv $l.tmp $l
done

chmod -x conver.sh//파일 권한변경
sh conver.sh//쉘스크립트 파일 실행

vi 에서 hex 값 확인

%!xxd
%!xxd -r

우분투 우클릭 터미널 열기

sudo apt-get install nautilus-open-terminal

우분투원 삭제

sudo apt-get --purge remove .*ubuntuone.* .*couch.*

우분투에서 오른쪽 alt키한와 한/영키 동작 문제

오른쪽 alt키와 한/영키가 같이 있는 노트북의 경우, 한/영키가 오른쪽 alt기능을 하므로 번거로운 현상이 발생한다.
아래 명령어중 하나로 해결 가능하다.

xmodmap -e 'keycode 108 = Hangul'
xmodmap -e 'remove mod1 = Alt_R'
xmodmap -e 'remove mod1 = Hangul'

하지만 Lenovo-s405 모델의 경우
xmodmap -e 'remove mod1 = Alt_R'
xmodmap -e 'keycode 108 = Hangul'
두 명령을 연속으로 입력해야 잘 동작함.

압축한 파일들 파일명 깨짐 현상을 방지

# 윈도우에서 압축한 파일 우분투에서 풀 때
unzip -O CP949 압축파일명
주의: 대문자 O 입니다 숫자 0 아닙니다.

# 그외 나머지의 경우 7zip을 사용
sudo apt-get install p7zip

7zr a [파일명.7z] [폴더명]
7zr a hello.7z hello더 

7z a basic.7z basic
7z e basic.7z

우분투 런처 아이콘 생성하기

출처 : http://eiggerc.blogspot.kr/2012/08/eclipse.html

공식 사이트에서 받은 이클립스는 런처에 아이콘이 없어서 실행 하기 불편 하다

그래서 만들어 주면 되는데

공식 사이트에서 다운받은 이클립스를 런처 패널에 추가하는 방법은
(실행 파일 런처에 아이콘 추가)

[Desktop Entry]
Type=Application
Name=Eclipse
Comment=Eclipse Integrated Development Environment
Icon= /home/chs/develop/eclipse/icon.xpm                                아이콘 경로 설정
Exec= /home/chs/develop/eclipse/eclipse                                  실행 파일 경로 설정
Terminal=false
Categories=Development;IDE;Java;

*.desktop 으로 저장 ex) eclipse.desktop

저장된 파일을 런처로 드래그 하면 실행 아이콘 생성

리눅스 파일 인코딩 변환 명령어

# *.c 인 파일만 변경할 경우
find . -name '*.c' -type f -execdir iconv -f euckr -t utf-8 {} -o {}.tmp \; -execdir mv -f {}.tmp {} \;

Linux On USB : USB에서 리눅스 시스템 구축

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@
@@ TINY LFS ON USB
@@
@@ Host : ubuntu 13.04 64bit
@@ Target : linux kernel 3.11.0 / busybox-1.21.1
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

참고:
http://wiki.kldp.org/wiki.php/LinuxBasedOnUSB-StorageDevice
http://blog.naver.com/skkong89?Redirect=Log&logNo=90036081183 

사설:
처음에 위 두 사이트를 참고하여 syslinux를 부트로더로 사용하여 시스템을 만들어보려고 3일동안 머리를 싸맸지만 실패했다.
현재 syslinux의 최신 버전은 6.01인데 최신 pc에서는 잘 돌아가질 않는다. (물론 qemu에서는 돌아갔다.)
게다가 검색하다가 알게된 사실은 syslinux는 최신 하드웨어드를 잘 지원하지 않는다고 한다.
속도면에서는 grub보다 syslinux가 빠르다는 의견이 있어서 syslinux를 사용해보려 했으나, 결국은 grub으로 구축하였다.

뭐 어쨌거나, 앞으로 디스크포맷형식이 msdos에서 GPT로 바뀔것이고 결국은 GPT를 잘 지원하고 있는 GRUB으로 하는게 맞는 일인것도 같다.

밑으로 진행되는 설명에서, 쉘명령어의 경우에는 "###", "###" 으로 감쌌으며, 파일에 들어갈 내용의 경우에는 "<<<", ">>>" 으로 감쌌다.
그리고 주석은 "" 으로 처리 하였다.

// [1] 가상 루트 파일 시스템 이미지 생성
###
sudo su;
mkdir USBLFS;
cd USBLFS;

dd if=/dev/zero of=rootfs bs=1M count=100;
mkfs.ext2 -F -i 2000 rootfs;

mkdir rootfs_loop;
mount -o loop rootfs rootfs_loop/;
###

// [2] Busybox 설치
###
wget http://www.busybox.net/downloads/busybox-1.21.1.tar.bz2;
tar xvfz busybox-1.21.1.tar.bz2;
cd busybox-1.21.1;

make menuconfig;
make;
make CONFIG_PREFIX=../rootfs_loop install;
###

아래 옵션을 적용하여 Busybox패키지의 실행파일들 static으로 컴파일하여 [3]번 과정을 생략 하도록 한다.
"Busybox Settings -> Build Options -> [*] Build BusyBox as a static binary(no shared libs)"

// [3][Option] Busybox가 참조하는 라이브러리 복사 (아래 파일들은 정확하지 않다)
###
cd bin;
ldd busybox;
        linux-gate.so.1 =>  (0xffffe000)
        libcrypt.so.1 => /lib/tls/libcrypt.so.1 (0xb7ef9000)
        libm.so.6 => /lib/tls/libm.so.6 (0xb7ed6000)
        libc.so.6 => /lib/tls/libc.so.6 (0xb7dba000)
        /lib/ld-linux.so.2 (0xb7f31000)

cd ..;
mkdir -p lib/tls;
cp /lib/tls/libcrypt.so.1 lib/tls/;
cp /lib/tls/libm.so.6 lib/tls/;
cp /lib/tls/libc.so.6 lib/tls/;
cp /lib/ld-linux.so.2 lib/;
###

// [4] 나머지 루트 파일 시스템 디렉토리 생성
1) etc
###
mkdir etc;
vi etc/fstab;
###

<<<
proc    /proc    proc    defaults    0    0
>>>

###
vi etc/inittab;
###

<<<
::sysinit:/etc/init.d/rcS
tty1::askfirst:/bin/sh
::ctrlaltdel:/sbin/reboot
::shutdown:/sbin/swapoff -a
::shutdown:/bin/umount -a -r
::restart:/sbin/init
>>>



###
mkdir etc/init.d/;
vi etc/init.d/rcS;
###

<<<
#! /bin/sh
/bin/mount -a
>>>

###

chmod ugo+x etc/init.d/rcS
###



2) dev
###
mkdir dev;
vi mkdev.sh;
###

<<<
#! /bin/sh
#
# makedev.sh - creates device files for a busybox boot floppy image

# we do our work in the dev/ directory
if [ -z "$1" ]; then
echo "usage: `basename $0` path/to/dev/dir"
exit 1
fi

cd $1

# miscellaneous one-of-a-kind stuff
mknod console c 5 1
mknod full c 1 7
mknod kmem c 1 2
mknod mem c 1 1
mknod null c 1 3
mknod port c 1 4
mknod random c 1 8
mknod urandom c 1 9
mknod zero c 1 5
ln -s /proc/kcore core

# IDE HD devs
# note: not going to bother creating all concievable partitions; you can do
# that yourself as you need 'em.
mknod hda b 3 0
mknod hdb b 3 64
mknod hdc b 22 0
mknod hdd b 22 64

# loop devs
for i in `seq 0 7`; do
mknod loop$i b 7 $i
done

# ram devs
for i in `seq 0 9`; do
mknod ram$i b 1 $i
done
ln -s ram1 ram

# ttys
mknod tty c 5 0
for i in `seq 0 9`; do
mknod tty$i c 4 $i
done

# virtual console screen devs
for i in `seq 0 9`; do
mknod vcs$i b 7 $i
done
ln -s vcs0 vcs

# virtual console screen w/ attributes devs
for i in `seq 0 9`; do
mknod vcsa$i b 7 $i
done
ln -s vcsa0 vcsa
>>>

###
sh mkdev.sh ./dev/
###



3) proc
###
mkdir proc;
###

// [5] 루트 파일 시스템 이미지 생성
###
umount rootfs_loop;
gzip -9 rootfs;
###

// [6] 커널 이미지 생성
# make menuconfig
Block devices
[*] Loopback device support
...
[*] Network block device support
[*] RAM disk support
(4096) Default RAM disk size (kbytes)
[*] Inital RAM disk (initrd) support
# make bzImage

// [7] USB 포맷
###
fdisk -l;
umount /dev/sdc1;
parted /dev/sdc;

mklabel;
msdos;

mkpartfs
primary
ext2
1
-1


###

// [8] USB에 파일 복사
###
mount /dev/sdc1 /mnt;
mkdir /mnt/boot;
cp bzImage /mnt/boot;
cp rootfs.gz /mnt/boot;
###

// [9] GRUB 설치
###
mkdir /mnt/boot/grub;
vi /mnt/boot/grub/grub.cfg;
###

<<<
# Begin /boot/grub/grub.cfg
set default=0
set timeout=5

insmod ext2
set root=(hd0,msdos1)

menuentry "Linux 3.11.0" {
    linux   /boot/bzImage root=/dev/ram0 rw
    initrd  /boot/rootfs.gz
}       
>>>



###
grub-install /dev/sdc --boot-directory=/mnt/boot
umount /mnt
###

(미흡)리눅스에서 태스크, 프로레스, 스레드

커널 레벨에서는 모든 실행 흐름을 태스크(Task)로 정의하고 다룬다.
유저 레벨에서는 기준에 따라 프로세스, 스레드로 나누어 생각할 수 있다.

fork()는 부모프로세스(fork()를 호출한 프로세스)의 메모리상태와 레지스터상태를 그대로 copy-on-write 방식으로 복사하여 자식프로세스를 만든다.(copy-on-wirte방식은 최근에 개선된 fork()의 기능이다.)
반면에 스레드로 생성된 프로세스는 스택을 제외 하고 부모 프로세스와 상당부분을 공유하므로, 생성 속도가 fork에 비해서 빠르다.

*context : 태스크의 실행흐름과 관련있는 레지스터값의 집합

vdi mount

# VBoxManage clonehd xxx_2003.vdi dump -variant Fixed
0%..10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Clone hard disk created in format 'VDI'. UUID: 1c63f183-3dc4-46d3-9357-a161abe4c007
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%

# hexdump -C -v dump | grep -i ntfs
00012e00  eb 52 90 4e 54 46 53 20  20 20 20 00 02 08 00 00  |.R.NTFS    .....|
^C

# mount -o loop,offset=0x00012e00,umask=000 -o ro dump tmp/

# ls tmp
=> 폴더 내용이 보인다.

Gnome ubuntu 에서 root 로그인 추가

sudo passwd root
sudo sh -c 'echo "greeter-show-manual-login=true" >> /etc/lightdm/lightdm.conf'

리눅스에서 파일명 인코딩 변환

리눅스에서 파일명/디렉토리명에 대한 인코딩 변환(euc-kr과 utf-8 변환 등)은 convmv라는 프로그램을 이용하여 수행할 수 있다. 사용방법은 파일 내용에 대한 인코딩 변환에 사용되는 iconv와 유사하다.
  # convmv --notest -f euc-kr -t utf-8 -r 디렉토리명

convmv는 yum을 이용하여 다음과 같이 설치하면 된다.
  # yum install convmv

우분투 10.04 버전 시작프로그램, 키보드 쇼트컷 커맨드 입력관련 버그

sh -c "sleep 0.02; gnome-screenshot --area"

약간 실행전 갭을 줌으로써 해결 가능

페도라20 nabi 설치

# 참고
https://wiki.kldp.org/wiki.php/nabi
http://jabcholove.tistory.com/158
http://blog.daum.net/_blog/BlogTypeView.do?blogid=03lpI&articleno=15651560&categoryId=658837&regdt=20130216123329

# 1 - 기존거 지우기
su
yum erase ibus ibus-hangul libhangul
yum install glibc-devel gcc cpp gtk2-devel
yum groupinstall korean-support

# 2 - libhangul 0.1.0 설치하기
./configure --prefix=/usr
make
make install

설치되었는지 확인
pkg-config --list-all | sort | grep libhangul

만약 리스트에 libhangul이 안나와있을경우 아래명령 고고
export PKG_CONFIG_PATH=/usr/share/pkgconfig:/usr/lib64/pkgconfig:/usr/lib/pkgconfig

다시 확인 명령해보고 libhangul이 안나온다면 libhangul.pc 파일의 위치를 찾아내서 위와같은명령으로 응용해서 위치를 잡아줘야합니다. 그래야 나비 설치할때 오류가 안납니다.

# 3 - nabi 설치하기
./configure --prefix=/usr
make
make install

# 4 - 나비인식시키기
root 를 해제하고 진행
/etc/sysconfig/i18n 파일이 있지만, 여기에 nabi 설정을 저장해도 적용되지 않는다.

~/.bash_profile에
export XIM=nabi
export XMODIFIERS="@im=nabi"
export XIM_PROGRAM=/usr/bin/nabi
export GTK_IM_MODULE=xim
을 입력하면, 다음에 로그인 할 때 한글을 이용할 수 있다

# 5 - 시작프로그램등록

# 6 - 라이브러리 이동
sudo cp /usr/lib/libhangul* /usr/lib64/

Installing Quartus on a 64-bit Linux system

yum install libXext.i686 freetype.i686 fontconfig.i686 libpng.i686 libSM.i686

If you can't get window which is made by hot-key

== /usr/bin/lxterminal2 ========================
  1 lxterminal
  2 python getfocus.py
==========================================

== ~/getfocus.py ============================
  1 import os
  2 import subprocess
  3 batcmd="xdotool search lx"
  4 result = subprocess.check_output(batcmd, shell=True)
  5 result = result.split('\n')
  6 result.sort()
  7 target = result[len(result)-1]
  8 cmd = "xdotool windowactivate " + target
  9 os.system(cmd)
==========================================

and link hot-key command with "lxterminal2"

Linux tar utility split compress/decompress (리눅스 분할 압축)

1. Splite compress (분할 압축)
tar czvf - source | split -b 100m - source.tar.gz

2. Decompress (압축 해제)
cat source.tar.gz* | tar xzvf -