'팁&테크/Linux'에 해당되는 글 69건
- 2019.11.18 apt-get 관련
- 2017.06.07 rewrite 리라이트룰
- 2017.03.02 zsh 또는 oh-my-zsh 사용 시 Home/End 키 동작안될때
- 2016.08.26 /usr/local/lib 를 라이브러리 경로에 추가
- 2016.04.06 Centos6에 Nginx+PHP7-FPM+MySQL Yum으로 설치
- 2016.04.06 Remi Repo 설치(PHP7)
- 2016.04.06 EPEL 패키지 설치
- 2016.03.29 리눅스에 스왑파일 생성하기
- 2016.01.15 Ubuntu(우분투) Linux, Nginx, MariaDB, PHP 설치
- 2015.11.13 리눅스 메모
apt-get 관련
패키지 인덱스 정보 업데이트 : /etc/apt/sources.list 이 파일에서 저장된 저장소에서 사용할 패키지의 정보를 얻습니다.
sudo apt-get update
설치된 패키지 업그래이드
sudo apt-get upgrade
의존성검사하며 설치하기
sudo apt-get dist-upgrade
패키지 설치
sudo apt-get install 패키지이름
패키지 재설치
apt-get --reinstall install 패키지이름
패키지 삭제 : 설정파일은 지우지 않음
sudo apt-get remove 패키지이름
설정파일까지 모두 지움
sudo apt-get --purge remove 패키지이름
패키지 소스코드 다운로드
sudo apt-get source 패키지이름
위에서 받은 소스코드를 의존성있게 빌드
sudo apt-get build-dep 패키지이름
패키지 검색
sudo apt-cache search 패키지이름
패키지 정보 보기
sudo apt-cache show 패키지이름
apt를 이용해서 설치된 deb패키지는 /var/cache/apt/archive/ 에 설치
rewrite 리라이트룰
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^/([a-zA-Z0-9\_]+)/?$ /home/계정/public_html/index.php?d=$1&f=index [L,QSA]
RewriteRule ^/([a-zA-Z0-9\_]+)/([a-zA-Z0-9\_]+)/?$ /home/계정/public_html/index.php?d=$1&f=$2 [L,QSA]
RewriteRule ^/([a-zA-Z0-9\_]+)/([a-zA-Z0-9\_]+)/([a-zA-Z0-9\_]+)/?$ /home/계정/public_html/index.php?d=$1&f=$2&p=$3 [L,QSA]
</IfModule>
http://도메인/d/f/p -> /index.php?d=d&f=f&p=p
zsh 또는 oh-my-zsh 사용 시 Home/End 키 동작안될때
1. zsh 설치되었는지 확인하고 yum등으로 설치
cat /etc/shells #설치된 쉘 목록 확인
echo $SHELL #현재쉘 확인
which zsh # 또는 whereis zsh 로 경로 확인
chsh -s /bin/zsh #기본쉘 변경 또는 /etc/passwd 파일에서 변경하고 재접속해도 됨
2. oh-my-zsh 설치
curl -L https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh | sh
3. /계정/.zshrc 에 아래 내용을 추가
#Rebind HOME and END to do the decent thing:
bindkey '\e[1~' beginning-of-line
bindkey '\e[4~' end-of-line
case $TERM in (xterm*)
bindkey '\eOH' beginning-of-line
bindkey '\eOF' end-of-line
esac
#To discover what keycode is being sent, hit ^v
#and then the key you want to test.
#And DEL too, as well as PGDN and insert:
bindkey '\e[3~' delete-char
bindkey '\e[6~' end-of-history
bindkey '\e[2~' redisplay
#Now bind pgup to paste the last word of the last command,
bindkey '\e[5~' insert-last-word
/usr/local/lib 를 라이브러리 경로에 추가
boost 같은걸 설치하게 되면 기본적으로 /usr/local/lib 에 설치가 되고 이곳에 설치되는 lib가 제법 된다.
/usr/local/lib 패스는 기본 라이브러리 경로에 포함되지 않기 때문에 컴파일을 할때 .so 파일을 찾지 못하는 경우가 생긴다.
그러니 lib path에 추가를 하자.
Example (/etc/environment) 전체 사용자
LD_LIBRARY_PATH=/lib:/usr/lib:/usr/local/lib
Example (~/.bashrc) 개별사용자
export LD_LIBRARY_PATH="/lib:/usr/lib:/usr/local/lib"
Centos6에 Nginx+PHP7-FPM+MySQL Yum으로 설치
요 근래 Nginx + PHP-FPM 글을 몇개 번역한걸 올렸더니 갑자기 궁금해져서 설치를 해보고 메모해둠
1. MySQL 설치
별로 신경을 안쓰고 있었는데 MySQL쪽에도 Yum Repo를 제공하고 있었다...
http://dev.mysql.com/downloads/repo/yum/
이 링크에서 버전에 맞게 설치하면 된다. Centos6은 Red Hat Enterprise Linux 6을 다운 받으면 됨.
2.PHP7 설치
아래 링크를 참고해서 설치
https://webtatic.com/packages/php70/
또는
http://wyseburn.tistory.com/entry/Remi-Repo-%EC%84%A4%EC%B9%98PHP7
다만 이걸로 설치를 하면 경로가 좀 요상해진다.
환경관련파일은 /etc/opt/remi/php70/ 에 있고 로그는 /var/opt/remi/php70/ 에 있으니 주의.
그리고 실행파일을 /usr/bin/php70 이런식인데 실제로는 /opt/remi/php70/root/usr/bin 에 php, php-config, phpize 등이 있으니 주의, 소프트링크를 하면 좀 나을꺼다.
그리고 php70.x86_64 와 php70-php.x86_64 같이 똑같을꺼 같은 패키지가 있는데 버전을 보면 다르니
php70-php 로 시작하는 것들(현재 버전 7.0.5)로 깔면 된다. 물론 FPM으로 돌릴꺼니 php70-php-fpm.x86_64은 꼭 받아야겠지. 아래는 설치패키지.
php70-php-bcmath.x86_64
php70-php-cli.x86_64
php70-php-common.x86_64
php70-php-devel.x86_64
php70-php-fpm.x86_64
php70-php-gd.x86_64
php70-php-json.x86_64
php70-php-mbstring.x86_64
php70-php-mcrypt.x86_64
php70-php-mysqlnd.x86_64
php70-php-opcache.x86_64
php70-php-pdo.x86_64
php70-php-suhosin.x86_64
php70-runtime.x86_64
/etc/opt/remi/php70/php-fpm.d/www.conf 파일을 열어 수정하자.
user = apache #사용자는 일반계정을 만들어 사용할 것. apache는 이미 있어서 사용
group = apache
listen = /var/run/php7-fpm.sock #처음에는 127.0.0.1:9000 인데 서버가 하나면 unix socket로 바꾸는게 났다.
listen.owner = apache #권한도 맞춰줘야함, 계정은 nginx의 user와 같아야 한다.
listen.group = apache
listen.mode = 0660
service php70-php-fpm start #fpm 데몬이름도 거시기 하다.
php를 fpm으로 실행할 경우 php.ini 파일에 cgi.fix_pathinfo = 1 인 경우 http://localhost/bad.hack/aa.php 와 같이 bad.hack 을 실행 가능하게 하므로 cgi.fix_pathinfo = 0 으로 하자.
3. Nginx 최신버전 설치
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/6/$basearch/
gpgcheck=0
enabled=1
이 내용을 /etc/yum.repos.d/nginx.repo 파일로 만들어주면 최신버전을 yum으로 관리할 수 있게된다.
baseurl에 /6/ 은 리눅스 버전을 의미하니 다른 버전이라면 바꿔도 된다.
어떤게 있는지 궁금하면 브라우저로 http://nginx.org/packages 로 들어가보면 리눅스 배포판별로 확인할 수 있으니 들어가보는것도 나쁘지 않다.
주의 : epel Repo에도 Nginx 가 있는데 버전이 낮으니 사용하지 말것.
/etc/nginx/nginx.conf 수정
수정할꺼는 많겠지만 간단하게 몇가지만 수정하거나 추가한다.
user apache; #php-fpm 에 user와 동일해야 한다.
worker_processes 1; #cpu core 갯수
http {
access_log off; #로그는 끄자
server_tokens off; #서버정보를 표시하는거도 끄자
fastcgi_hide_header X-Powered-By; #불필요한 정보표시 끄기
fastcgi_hide_header X-Pingback;
fastcgi_hide_header Link;
proxy_hide_header X-Powered-By;
proxy_hide_header X-Pingback;
proxy_hide_header X-Link;
add_header X-Frame-Options SAMEORIGIN; #아이프래임 사용 SAMEORIGIN 같은도메인 가능, DENY 불가, ALLOW 모두가능
add_header X-Content-Type-Options nosniff; #잘못된 MIME에는 응답거부
add_header X-XSS-Protection "1; mode=block"; #XSS 세션 하이재킹 방지
include /etc/nginx/sites-enabled/*.conf #vhost 를 sites-enabled 디렉토리에서 관리
}
vhost설정은 대충 conf.d/default.conf 를 새로만든 sites-enabled 디렉토리에 다른이름으로 복사해서 관리한다.
수정할 부분은 밑에 몇개정도.
server_name domain.com *.domain.com;
root /home/sms/public_html; #root는 location /와 location ~\.php 블럭안에 각각정의되 있는데 밖으로 뺀다.
location ~ \.php$ {
fastcgi_pass unix:/var/run/php7-fpm.sock; #/etc/opt/remi/php70/php-fpm.d/www.conf listen 부분과 일치해야된다.
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
특정 디렉토리에 PHP 파싱을 차단하려면(예 data, upload, files/my) 아래 내용을 반드시!! location ~ \.php$ {} 블럭 앞에 정의해야 한다.
location ~ /(data|upload|files/my)/.*\.(php\d?|p?html?|pl|cgi) {
return 403;
}
/etc/nginx/fastcgi_params 파일 맨위에 추가
set $fastcgi_script_realname $fastcgi_script_name;
if ( $fastcgi_script_name ~ ^(.*\.php)(/.*)$ ) {
set $fastcgi_script_realname $1;
set $path_info $2;
}
if (!-f $document_root$fastcgi_script_realname) {
return 404;
}
이부분은 http://도메인/aaa.gif/aaa.php 와 같이 호출될때 aaa.gif에 php코드가 있으면 실행되는데 그걸 방지
service nginx start
이걸로 끝. 보안설정이나 튜닝관련은 다른 문서를 찾아봐야할듯.
4. 아래와 같은 오류가 발생할 경우(/var/lib/nginx/tmp/fastcgi 퍼미션오류)
2016/04/08 08:26:48 [crit] 1967#0: *1 open() "/var/lib/nginx/tmp/fastcgi/1/00/0000000001" failed (13:
Permission denied) while reading upstream, client: 1.2.3.4, server: localhost, request: "GET / HTTP/1.1", upstream: "fastcgi://unix:/var/run/php-fpm.sock:", host: "domain.com"
아마존 ec2 에서는 최신버전을 yum으로 설치가능하길래 그냥 설치를 했다.
설치하다 nginx.conf 에 user가 nginx로 되있는 걸 무심결에 apache로 고쳤는데 이게 원인이 되었다.
문제는 /var/lib/nginx 소유자가 nginx.nginx 여서 발생하는 문제.... apache 로 수정하면 오류가 발생하지 않는다.
안된다면 /var/lib/nginx/tmp/fastcgi 의 권한을 777 로도 해볼것.
또 /etc/php-fpm.d/www.conf 에 보면 세션 저장 디렉토리가 별도로 설정되있다.
기본경로 : /var/lib/php/session
사용자를 변경할 경우 반드시 위 디렉토리의 소유 그룹도 변경해야 세션에 문제가 없다.
추가로 /var/lib/php/wsdlcache 의 소유 그룹도 변경하자.
/var/lib/php는 remi repo를 사용할 경우 /var/opt/remi/php70/lib/php 이니 주의.
.... an upstream response is buffered to a temporary file ....
오류가 발생한다면
fastcgi_max_temp_file_size 0; 을 추가
POST 메소드로 정적페이지(아무 값도 없이) 호출하는 경우 405 오류가 발생한다.
당연히 POST 는 값을 전송할떄 쓰는건데 잘못된 사용이니 오류나는게 맞지만 대부분 대충 쓰기때문에..
아래 내용을 추가하면 405 오류를 200(OK)로 바꿔준다.
error_page 405 =200 $uri;
5. /home/계정 디렉토리 퍼미션은 701로 해야한다. 자꾸 까먹네.
..
Remi Repo 설치(PHP7)
Remi repository 설치
Remi는 LAMP 기반의 최신 패키지를 제공하는 repository이다. Remi 저장소를 사용하기 위해서는 epel 저장소가 설정되어야 한다.
RHEL 7/CentOS 7
RHEL 6/CentOS 6
RHEL 5/CentOS 5
다만 이걸로 설치를 하면 경로가 좀 요상해진다.
환경관련파일은 /etc/opt/remi/php70/ 에 있고 로그는 /var/opt/remi/php70/ 에 있으니 주의.
그리고 실행파일이 /usr/bin/php70 이런식인데 실제로는 /opt/remi/php70/root/usr/bin 에 php, php-config, phpize 등이 있으니 주의
EPEL 패키지 설치
CentOS 7 / RHEL 7
CentOS 6 / RHEL 6
CentOS 5 / RHEL 5
Useful packages from the EPEL repo that I commonly use:
package | description | |
---|---|---|
apachetop | ApacheTop watches a logfile generated by Apache (in standard common or | |
atop | An advanced interactive monitor for Linux-systems to view the load on | |
munin | Munin is a highly flexible and powerful solution used to create graphs | |
ntop | ntop is a network traffic probe that shows the network usage, similar to what |
리눅스에 스왑파일 생성하기
간혹 스왑파티션을 만들지 않았거나 클라우드에서 서버를 설치하는 경우 스왑파티션이 없는 경우가 있음.
스왑파티션을 만들면 fdisk 를 사용해야 하기때문에 잘못될 위험이 있으니 그냥 스왑파일을 만듭니다.
1. 스왑으로 사용할 파일 생성
dd if=/dev/zero of=/경로/swapfile bs=1024 count=16000000 //1024크기의 블럭 16000000 생성(=대략 16기가)
dd if=/dev/zero of=/경로/swapfile bs=1024M count=16
2. 스왑파일로 포맷
mkswap /경로/swapfile
3. 스왑활성화
swapon /경로/swapfile
4. 스왑확인
swapon -s, free
5. 3번의 명령을 rc.local 에추가
6. 불필요 시 swap 파일 삭제
swapoff /경로/swapfile
rm /경로/swapfile
스왑파티션을 만들경우 아래 명령사용. 다만 테스트해보지는 않으니 주의할 것.
#fdisk -cu /dev/sda
#n->e->4->enter->n->enter->+50M->t->82->w
#새로만들기(n)->확장파티션(e)->파티션번호(4)->엔터->새로만들기(n)->엔터->용량(+XXM)->타입설정(t)->스왑(82)->저장(w)
#reboot
#mkswap /dev/sda5
#swapon -a =>스왑파티션 활성화
#swapon -s => 스왑파티션 확인.
#vi /etc/fstab
/dev/sda5 swap swap defaults 0 0 =>부팅시활성화
#mount -a
Ubuntu(우분투) Linux, Nginx, MariaDB, PHP 설치
#NGINX 설치
-최신 버젼 nginx-stable 설치
sudo add-apt-repository ppa:nginx/stable
sudo apt-get update
sudo apt-get install nginx-full
nginx 설정 파일 위치 : /etc/nginx/nginx.conf
#MariaDB 리포지터리 설정
sudo apt-get install software-properties-common
sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xcbcb082a1bb943db
sudo add-apt-repository 'deb http://ftp.kaist.ac.kr/mariadb/repo/10.0/ubuntu trusty main'
#MariaDB 설치
sudo apt-get update
sudo apt-get install mariadb-server
#PHP설치
-5.4 버젼 php 설치
sudo add-apt-repository ppa:ondrej/php5-oldstable
sudo apt-get update
sudo apt-get install php5-fpm php5-common php5-gd php5-mcrypt php5-mysqlnd php5-cli
-5.5 버젼 php 설치
sudo add-apt-repository ppa:ondrej/php5
sudo apt-get update
sudo apt-get install php5-fpm php5-common php5-gd php5-mcrypt php5-mysqlnd php5-cli
*php5-mysqlnd는 php만을 위한 mysql 및 mariadb 드라이버로, php5-mysql,php5-mysqli에 비해 성능 향상, 기존에 많이 쓰는 php5-mysql을 대체설치해도 됨.
-5.6 버전 php 설치
sudo add-apt-repository ppa:ondrej/php5-5.6
sudo apt-get install python-software-properties
sudo apt-get update
sudo apt-get install php5-fpm php5-common php5-gd php5-mcrypt php5-mysqlnd php5-cli
/etc/nginx/nginx.conf 에서 php5-fpm과 연결(unix socket 방식으로 연결)
-7.0 버전 php 설치
sudo apt-get install python-software-properties
sudo add-apt-repository ppa:ondrej/php-7.0
sudo apt-get install php7.0-curl php7.0-cli php7.0-fpm php7.0-gd php7.0-json php7.0-mcrypt php7.0-mysql
Nginx php fpm 세팅
#PHP 세팅
location ~ \.php$ {
# 해킹대비 try_files $uri=404
try_files $uri=404;
fastcgi_pass unix:/var/run/php5-fpm.sock; //PHP 5.x버전
fastcgi_index index.php;
fastcgi_intercept_errors on;
fastcgi_ignore_client_abort on;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
fastcgi_pass unix:/run/php/php7.0-fpm.sock; //PHP 7.0 버전
리눅스 메모
VM웨어등에서 아래 오류가 발생하고 랜카드가 잡히지 않는 경우
device eth0 does not seem to be present delaying initialization
udev 룰을 삭제하고 다시 생성하면 된다.
service network stop
rm /etc/udev/rules.d/70-persistent-net.rules
start_udev
service network start
포트 접속 가능 여부 확인
nc -z -v localhost 8001
메모리릭 체크(다른 옵션은 help확인)
valgrind --tool=memcheck --leak-check=yes --show-reachable=yes --log-file=../logfile.log
---