[VSCode] NPM Rename Permission Error

NPM Rename permission error

VScode에서 WSL Remote를 지원하면서 NPM을 이용한 패키지 관리도 VSCode 상에서 진행을 하는중 https://github.com/Microsoft/WSL/issues/2097 이슈처럼 계속 Rename 권한 이슈때문에 npm install이 진행되지 않는다..

해결 방법은 단순한데 VSCode를 끄고 npm install을 진행하면 된다.
VSCode가 실행되는 중에 npm install을 사용하면 VSCode의 폴더를 캐싱하는 부분과 겹쳐지면서 파일 쓰기가 되지 않아 생기는 문제로 보여진다.

이 문제로 고생하는 사람이 꾀나 있는데 이 글이 도움이 되었으면 좋겠다.

Linux resource limit

현재 OS상의 제한이 걸려 있는 목록을 볼 수 있는 명령어
ulimit -a

core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 7799
max locked memory       (kbytes, -l) 16384
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 7799
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

위의 리스트 중에서 File open의 제약(Socket connect)을 걸고 있는 것이 바로
open files

ulimit -n 50000 혹은
/etc/security/limits.conf 파일에
* soft nofile 16384
* hard nofile 16384
을 추가후 껏다 키면 적용된다. (sysctl -p로도 적용될수도..?)

python에선 resourece 패키지를 통해 해당 스크립트가 실행되는 동안 변경할 수 있다.

import resource

soft, hard = 500000, 500000
resource.setrlimit(resource.RLIMIT_NOFILE, (soft, hard))

[ubuntu 18.04] install cockpit latest version

Cockpit Project?[link]


Cockpit은 ..

웹 브라우저 상에서 서버를 제어 할 수 있는 도구임과 동시에

단순한 서버 제어뿐만 아니라 다른 서버와 연결을 통해 여러대의 서버를 하나의 웹페이지에서 관리할 수 있게 해주는 프로젝트이다.

또한 다양한 플러그인을 제공해 확장성 또한 준수하다.

Install Cockpit on Ubuntu 18.04


Ubuntu에는 이미 cockpit이 패키지에 포함되어 있기때문에 apt명령어로 설치 할 수 있다.

sudo apt-get install cockpit

그리고 취향에 맞게 여러가지 플러그인들을 설치 할 수 있다.

sudo apt-get install cockpit-ws
sudo apt-get install cockpit-machines
sudo apt-get install cockpit-docker
sudo apt-get install cockpit-networkmanager ...

Done

Upgrade Cockpit to ver 183~


다만 apt 명령어로 설치할 경우 설치되는 cockpit의 버전이 164 으로 설치되어
한글화가 덜되어있고 firewall 등의 기능들이 없는 상태이다.

2018년 12월 27일 기준으로 가장 최신버전은 184 버전이지만, 일단 수동으로 설치는 많이 번거로우니
ubuntu backports에서 제공하는 가장 최신버전인 183-1 버전으로 쉽게 업그레이드가 가능하다.

sudo apt install cockpit/bionic-backports
sudo apt install cockpit-ws/bionic-backports
sudo apt install cockpit-docker/bionic-backports
sudo apt install cockpit-networkmanager/bionic-backports ...

Done

다만 설치한 모든 플러그인들도 각각 업그레이드 해줘야 제대로 작동하니 주의해야한다.

[Linux] Power management

우분투 서버 18.04에서 노트북 모니터를 닫아도 잠금 모드로 전환 되지 않는 설정


$ vi /etc/systemd/logind.conf

edit #HandleLidSwitch=suspend To HandleLidSwitch=ignore

sudo service systemd-logind restart

만약 화면을 닫았을 경우 자동으로 잠기길 원한다면

HandleLidSwitch=lock으로 변경하면 된다.

[Apache|Nginx] Reverse proxy Real IP

Front Nginx — Back Apache


Nginx

Setting Reverse Proxy with X-Real-IP

$ vi /etc/nginx/conf.d/<SomeReverseProxy>.conf

server {
    listen 80;

    server_name subdomain.silnex.kr;

    proxy_set_header X-Real-IP  $remote_addr;
    proxy_set_header X-Forwarded-For $remote_addr;
    proxy_set_header Host $host;

    proxy_pass http://127.0.0.1:8080;
}

 

Apache

Module Load

$ a2enmod remoteip

Create (or Edit) remoteip.conf 

$ vi /etc/apache2/conf-available/remoteip.conf

RemoteIPHeader X-Forwarded-For
RemoteIPTrustedProxy 127.0.0.1

than execute $ a2enconf remoteip

Edit apache2.conf(or httpd.conf)

$ vi /etc/apache/apache2.conf

## 수정 전 ##
#LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
#LogFormat "%h %l %u %t \"%r\" %>s %O" common 
## 수정 후 ##
LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %O" common

Restart apache service

$ service apache2 restart

[Linux-CMD] screen 사용법

Screen


screen 을 통해서 가장 많이 사용되는 명령어만 모아보았다.

시작. : screen -S 세션명

Ctrl+a A :현재 screen의 이름을 정한다. (나중에 Ctrl+a w 나 Ctrl+a “로 볼때 이름이 다 똑같아서 정의해 놓는게 좋다)
Ctrl+a c : screen에서 새창 띄우기
Ctrl+a K : 현재 screen 죽이기.

Ctrl+a a : 바로 전 창으로
Ctrl+a n : 다음 창으로
Ctrl+a p: 이전 창으로

Ctrl+a ” : 열린 screen list 을 보여줌.

Ctrl+a 0 : 0번째 창으로
Ctrl+a 1 : 1번째 창으로
Ctrl+a 9 : 10번째 창으로

Ctrl+a d : screen 때어내기 (현재 상태로 남겨두는거..)
Ctrl+a x : 이전에 남겨둔 screen에 다시 붙이기.

Ctrl+a ? : 도움말
Ctrl+a ESC, Ctrl+a [ : 화면 스크롤
Ctrl+a ] : 붙여넣기.

Ctrl+a S 화면 수평 분할
Ctrl+a | 화면 수직 분할
Ctrl + a :resize resize region
Ctrl + a :fit fit screen size to new terminal size
Ctrl +a :remove remove region
Ctrl+a Q 현재 region을 제외한 나머지 숨기기
Ctrl+ a tab 화면 분할 이동
Ctrl+a, : 명령행 모드로 전환

Ctrl+ X : 현재 화면 닫기

screen 세션 내에서의 “exit” : 세션을 종료함

screen을 사용할때 마우스 휠로 올리거나 내리는게 하는법,
~/.screenrc (없다면 생성해서) 아래 두줄을 추가하면 된다.
defscrollback 5000
termcapinfo xterm* ti@:te@

아래처럼 각 키를 넣어서 단축키를 마음대로 사용할 수 있다.
$ vi ~/.screenrc
bind j focus down
bind k focus up
bind t focus top
bind b focus bottom

ps -ef | grep -i screen : 열려진 Screen 프로세스 목록 (kill로 죽이면 깔끔)

screen -wipe : 죽은 세션 삭제
screen -r 세션명 : 강제로 종료된거에 다시 붙이기
screen -list : 현재 열려있는 리스트를 보여줌.
screen -X -S <세션명> kill : 세션을 죽임

screen에서 vim을 사용할 때 Ctrl + 방향키를 사용할 경우 삭제 되는 증상해결

bash 에서 export TERM=xterm 를 치거나, vim 명령 모드에서
:set term=xterm 혹은
:map <esc>[1;5D <C-Left>
:map <esc>[1;5C <C-Right>을 입력하면 된다.

[Linux-CMD] crontab 사용법

Crontab


Crontab(크론탭)[출처]

  • 프로세스 예약 데몬
  • 리눅스용 작업 스케줄러
  • 특정시각에 명령어가 수행되도록 등록가능
  • cronie(패키지) = crond(데몬) + crontab(크론 계획표[1])
  • 로그: /var/log/cron에 변경/수행 이력이 기록됨

등록방법

  • 수동 등록
crontab -e
  • 하단에 추가
cat <(crontab -l) <(echo "1 5 * * * /root/myscript.sh") | crontab -
  • 전부 새로 등록
echo -e "* * * * * 명령어1\n* * * * * 명령어2" | crontab

 

등록 형식

* * * * *  수행할 명령어
┬ ┬ ┬ ┬ ┬
│ │ │ │ │
│ │ │ │ │
│ │ │ │ └───────── 요일 (0 - 6) (0:일요일, 1:월요일, 2:화요일, …, 6:토요일)
│ │ │ └───────── 월 (1 - 12)
│ │ └───────── 일 (1 - 31)
│ └───────── 시 (0 - 23)
└───────── 분 (0 - 59)

Ex

* * * * * /root/every_1min.sh
→ 매 1분마다 /root/every_1min.sh 를 수행 (하루에 1440회[2])
15,45 * * * * /root/every_30min.sh
→ 매시 15분, 45분에 /root/every_30min.sh 를 수행 (하루에 48회[3])
*/10 * * * * /root/every_10min.sh
→ 10분마다 /root/every_10min.sh 를 수행 (하루에 144회[4])
0 2 * * * /root/backup.sh
→ 매일 02:00에/root/backup.sh 를 수행 (하루에 1회)
30 */6 * * * /root/every_6hours.sh
→ 매 6시간마다 수행(00:30, 06:30, 12:30, 18:30)
30 1-23/6 * * * /root/every_6hours.sh
→ 1시부터 매 6시간마다 수행(01:30, 07:30, 13:30, 19:30)
0 8 * * 1-5 /root/weekday.sh
→ 평일(월요일~금요일) 08:00
0 8 * * 0,6 /root/weekend.sh
→ 주말(일요일, 토요일) 08:00