도커 파일을 빌드할 때 패키지 관리자와 interative하게 제어할 수 없다..



yum을 사용할 때는 어떠한 interative 입력을 받지 않도록 -y를 사용하는 반면,


apt-get은 interactive 입력을 받지 않도록 다음과 같이 사용해야 한다. 

DEBIAN_FRONTEND=noninteractive




예)

FROM ubuntu:18.04

RUN apt-get update -q \

&& DEBIAN_FRONTEND=noninteractive apt-get install -qy mysql-client


Posted by 김용환 '김용환'



centOS 리눅스에서 pip를 설치할 때 단순하게 다음과 같이 실행하면 된다고 하나..



$  yum update


$ yum install epel-release


$ sudo yum install python-pip 




내 환경에서는 계속 에러가 난다.


Cannot retrieve metalink for repository: epel/x86_64. Please verify its path and try again




그래서 epel과 관련된 인증 이슈인데.. 다음과 같이 실행하면 잘 동작한다.


$ yum clean all


$ yum --disablerepo=“epel” update nss


$ yum remove epel-release --disablerepo=epel


$ yum -y upgrade ca-certificates


$ yum -y upgrade ca-certificates --disablerepo=epel


이제 가상환경과 패키지 설치를 동시에 지원하는 pipenv를 설치한다.


$ sudo -H pip install pipenv --proxy="proxy.google.io:3128"





pip 중요 참고 내용..

sudo pip install pipenv 을 실행할 때 다음과 같은 에러가 발생할 수 있다.


Starting new HTTPS connection (1): pypi.python.org

Incremented Retry for (url='/simple/pip/'): Retry(total=4, connect=None, read=None, redirect=None)

Retrying (Retry(total=4, connect=None, read=None, redirect=None)) after connection broken by 'NewConnectionError('<pip._vendor.requests.packages.urllib3.connection.VerifiedHTTPSConnection object at 0x7fe8adb61310>: Failed to establish a new connection: [Errno 101] Network is unreachable',)': /simple/pip/


이럴 때는 환경변수와 proxy 환경 변수에 영향을 받을 수 있으니..아래와 같이 사용하길 바란다.


$ sudo -H pip install pipenv --proxy="proxy.google.io:3128"

Posted by 김용환 '김용환'


늘 자주 사용하긴 하지만 


kafka-01.internal.google.com에서 kafka-20.internal.google.com까지의 ip 주소를 얻고 싶다면 



number=0; for i in $(seq 1 20); do if [ $i -le 9 ]; then number=0$i ; else number=$i  ; fi ; ping -c1 -t 1 kafka-$number.internal.google.com  ; done



결과는 나오지만 지저분하게 나오려면 다음처럼 awk를 써서 처음 라인의 호스트와 ip만 나오게 한다.




number=0; for i in $(seq 1 20); do if [ $i -le 9 ]; then number=0$i ; else number=$i  ;fi ; ping -c1 -t 1 kafkatest-$numberr.internal.google.com | awk 'NR==1{print $2$3 ; exit}'  ; done



kafkatest-17.internal.google.com(1.1.1.1

...

Posted by 김용환 '김용환'


스크립트에서 현대 디렉토리를 지정하기 위해 다음과 같은 스크립트를 많이 사용한다. 


my_root=$(cd $(dirname $(readlink $0 || echo $0))/../;/bin/pwd)



그런데 맥에서 이런 에러가 발생했다.


dirname: illegal option -- b




bash에서 $0이 스크립트 경로를 알려주는 것이라 알고 있긴 하지만... 사실 보장하지 않는다.

완벽히 보장하는 bash script를 개발하려면 BASH_SOURCE를 사용하길 바란다.



SCRIPT_PATH=${BASH_SOURCE[0]}

my_root=$(cd $(dirname $(readlink ${SCRIPT_PATH} || echo ${SCRIPT_PATH}))/../;/bin/pwd)




Posted by 김용환 '김용환'



디스크 볼륨을 추가한 뒤


 재부팅되더라도 계속 디바이스에 잘 연결되도록 하려면.. /etc/fstab을 사용해야 한다. 





먼저 특정 디바이스를 xfs로 파일 시스템을 구축하고 mount 한다. 그리고 잘 붙는지 확인한다.


$ mkfs.xfs -f /dev/sdc 

$ mount -t xfs /dev/sdc /home/file3

$ df

/dev/sdc       2928835792     32944 2928802848   1% /home/file3

 



block id를 구한다.


$ sudo blkid -pi /dev/sdc

DEVNAME=/dev/sdc

UUID=df556bd3-da08-4642-a2cd-179f34c603a6

TYPE=xfs

USAGE=filesystem

MINIMUM_IO_SIZE=512

PHYSICAL_SECTOR_SIZE=512

LOGICAL_SECTOR_SIZE=512






재부팅되더라도 df 커맨드를 사용하면 항상 운영체제와 연결될 수 있도록 /etc/fstab에 추가한다.


UUID=df556bd3-da08-4642-a2cd-179f34c603a6    /               xfs    errors=remount-ro 0       1









만약 아래와 같이 uuid가 나오지 않는 다면 디스크 볼륨이 없거나 문제가 있는 것이다.


# sudo blkid -ip /dev/sdc

DEVNAME=/dev/sdc

MINIMUM_IO_SIZE=512

PHYSICAL_SECTOR_SIZE=512

LOGICAL_SECTOR_SIZE=512



참고


http://faq.hostway.co.kr/Linux_ETC/7437

http://nan1004au.tistory.com/entry/Linux-%EB%94%94%EC%8A%A4%ED%81%AC%EC%9D%98-UUID%EB%A5%BC-%EC%95%8C%EC%95%84%EC%98%A4%EA%B8%B0-ntfs-ext3-%EB%A7%88%EC%9A%B4%ED%8A%B8


Posted by 김용환 '김용환'


ssh tunning하고 rsync를 하다가 아래와 같은 에러를 보게 되었다. (필요하다면 strace를 보면 된다)




channel 1: open failed: administratively prohibited: open failed




/etc/ssh/sshd_config 파일에 포워딩 기본 설정이 no로 되어 있다. yes로 바꾸면 동작한다.




AllowTcpForwarding no

->

AllowTcpForwarding yes


Posted by 김용환 '김용환'

리눅스 패치시 cpu 타입 확인하기



예를 들어 보안 취약점 공개로 문제가 발생했을 때. cpu가 i386인지, x86_64인지 모를 수 있다


https://access.redhat.com/errata/RHSA-2017:1100



이 때는 uname -a 또는 uname -m으로 cpu계열을 확인할 수 있다.


$ uname -m

x86_64





Posted by 김용환 '김용환'

shell script에서 간단하게 한 줄로 표현하고 싶은 line이 있을 수 있다. 


$ echo  xxx: ; printf "mm"

xxx:

mm




echo 매개 변수에 -n을 추가하면 원하는 대로 한 줄로 표현할 수 있다. 


$ echo -n xxx: ; printf "mm"

xxx:mm


Posted by 김용환 '김용환'


맥 OS에서는 zcat을 사용하면 파일이 없다는 에러가 나온다. 


$ zcat ../$dump 

zcat: can't stat: ../file.json.gz (../files.gz.Z): No such file or directory



zcat 대신 gzcat을 사용하면 잘 동작한다. 

Posted by 김용환 '김용환'



리뉵스에서 netstat -o 또는 netstat --timers 명령을 사용하는 경우, keepalive 사용 여부와, 상태를 볼 수 있다. 



ESTABLISHED off (0.00/0/0)

ESTABLISHED keepalive (239.12/0/0)





Posted by 김용환 '김용환'