기본 콘텐츠로 건너뛰기

Rasbperry Pi Zero W 에 Docker 설치함. (/w raspbian)

w3c 컨퍼 갔다왔더니 docker를 다시 잘 써보고 싶어졌다.

귀염둥이 Raspberry Pi Zero W를 꺼내서 ssh 접속하고 docker-ce를 설치해본다.
$ echo "deb [arch=armhf] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list
deb [arch=armhf] https://download.docker.com/linux/debian jessie stable

$ sudo apt update && sudo apt install docker-ce -y --force-yes
Get:1 https://download.docker.com jessie InRelease [20.2 kB]                                 
Hit http://mirrordirector.raspbian.org jessie InRelease                                       
Ign https://download.docker.com jessie InRelease                         
Hit https://download.docker.com jessie/stable armhf Packages
Hit http://archive.raspberrypi.org jessie InRelease
Hit http://mirrordirector.raspbian.org jessie/main armhf Packages                       
Get:2 https://download.docker.com jessie/stable Translation-en [584 B]
Hit http://archive.raspberrypi.org jessie/main armhf Packages                                 
Get:3 https://download.docker.com jessie/stable Translation-en [584 B]                       
Hit http://mirrordirector.raspbian.org jessie/contrib armhf Packages                         
Hit http://archive.raspberrypi.org jessie/ui armhf Packages                                   
Get:4 https://download.docker.com jessie/stable Translation-en [584 B]                       
Hit http://mirrordirector.raspbian.org jessie/non-free armhf Packages                         
Hit http://mirrordirector.raspbian.org jessie/rpi armhf Packages                             
Get:5 https://download.docker.com jessie/stable Translation-en [584 B]                       
Get:6 https://download.docker.com jessie/stable Translation-en [584 B]                       
Ign https://download.docker.com jessie/stable Translation-en                                 
Ign http://archive.raspberrypi.org jessie/main Translation-en                                 
Ign http://archive.raspberrypi.org jessie/ui Translation-en                                   
Ign http://mirrordirector.raspbian.org jessie/contrib Translation-en                         
Ign http://mirrordirector.raspbian.org jessie/main Translation-en                             
Ign http://mirrordirector.raspbian.org jessie/non-free Translation-en                         
Ign http://mirrordirector.raspbian.org jessie/rpi Translation-en   
Fetched 20.2 kB in 20s (968 B/s)                                                             
Reading package lists... Done
Building dependency tree     
Reading state information... Done
85 packages can be upgraded. Run 'apt list --upgradable' to see them.
W: GPG error: https://download.docker.com jessie InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 7EA0A9C3F273FCD8
Reading package lists... Done
Building dependency tree     
Reading state information... Done
Selecting previously unselected package libltdl7:armhf.
(Reading database ... 31449 files and directories currently installed.)tdl7 rsync
Preparing to unpack .../libltdl7_2.4.2-1.11_armhf.deb ...
  git-daemon-run git-daemon-sysvinit git-doc git-el git-email git-gui gitk gitweb git-arch
  git-cvs git-mediawiki git-svn
The following NEW packages will be installed:
  aufs-tools cgroupfs-mount docker-ce git git-man libapparmor1 liberror-perl libltdl7 rsync
0 upgraded, 9 newly installed, 0 to remove and 85 not upgraded.
Need to get 22.4 MB of archives.
After this operation, 104 MB of additional disk space will be used.
WARNING: The following packages cannot be authenticated!
  docker-ce
Get:1 https://download.docker.com/linux/debian/ jessie/stable docker-ce armhf 17.09.1~ce-0~debian [17.8 MB]
Get:2 http://mirrordirector.raspbian.org/raspbian/ jessie/main libltdl7 armhf 2.4.2-1.11 [42.5 kB]
Get:3 http://mirrordirector.raspbian.org/raspbian/ jessie/main aufs-tools armhf 1:3.2+20130722-1.1 [91.0 kB]
Get:4 http://mirrordirector.raspbian.org/raspbian/ jessie/main cgroupfs-mount all 1.1 [4572 B]
Get:5 http://mirrordirector.raspbian.org/raspbian/ jessie/main libapparmor1 armhf 2.9.0-3 [58.1 kB]
Get:6 http://mirrordirector.raspbian.org/raspbian/ jessie/main liberror-perl all 0.17-1.1 [22.4 kB]
Get:7 http://mirrordirector.raspbian.org/raspbian/ jessie/main git-man all 1:2.1.4-2.1+deb8u5 [1268 kB]
Get:8 http://mirrordirector.raspbian.org/raspbian/ jessie/main git armhf 1:2.1.4-2.1+deb8u5 [2689 kB]
Get:9 http://mirrordirector.raspbian.org/raspbian/ jessie/main rsync armhf 3.1.1-3 [373 kB]   
Fetched 22.4 MB in 26s (855 kB/s)                                                             
Can't set locale; make sure $LC_* and $LANG are correct!
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = (unset),
LC_ALL = (unset),
LC_CTYPE = "UTF-8",
LANG = "en_GB.UTF-8"
    are supported and installed on your system.
perl: warning: Falling back to a fallback locale ("en_GB.UTF-8").
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
Processing triggers for man-db (2.7.0.2-5) ...##################..............................] 
여기서 한참 걸린다.
sudo dpkg-reconfigure locales 하는 거 깜빡했네;;
W: GPG error: https://download.docker.com jessie InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 7EA0A9C3F273FCD8
Reading package lists... Done
Building dependency tree     
Reading state information... Done
E: Sub-process /usr/bin/dpkg returned an error code (1)
이렇게 끝나버렸 ㅜㅜ
$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 7EA0A9C3F273FCD8
Executing: gpg --ignore-time-conflict --no-options --no-default-keyring --homedir /tmp/tmp.JOozHjzEhw --no-auto-check-trustdb --trust-model always --keyring /etc/apt/trusted.gpg --primary-keyring /etc/apt/trusted.gpg --keyserver keyserver.ubuntu.com --recv-keys 7EA0A9C3F273FCD8
gpg: requesting key F273FCD8 from hkp server keyserver.ubuntu.com
gpg: key 0EBFCD88: public key "Docker Release (CE deb) <docker@docker.com>" imported
gpg: Total number processed: 1
gpg:               imported: 1  (RSA: 1)
키 등록하고 재시도 해볼까나
E: Sub-process /usr/bin/dpkg returned an error code (1)
뜨지만 docker-ce가 이미 설치되있다고 해서.
docker 쳐봤더니
Segmentaion fault
어질;;;;
아 이건 안되겠네. oTL


이걸로 해봐야겠다. ARMv6 만만하지 않군;
sudo apt-get -y remove `sudo dpkg --get-selections | grep -v "deinstall" | grep sound | sed s/install//`
sudo apt-get -y remove `sudo dpkg --get-selections | grep -v "deinstall" | grep gnome | sed s/install//`
sudo apt-get -y remove `sudo dpkg --get-selections | grep -v "deinstall" | grep lxde | sed s/install//`
sudo apt-get -y remove `sudo dpkg --get-selections | grep -v "deinstall" | grep gtk | sed s/install//`
sudo apt-get -y remove `sudo dpkg --get-selections | grep -v "deinstall" | grep desktop | sed s/install//`
sudo apt-get -y remove `sudo dpkg --get-selections | grep -v "deinstall" | grep gstreamer | sed s/install//`
sudo apt-get -y remove `sudo dpkg --get-selections | grep -v "deinstall" | grep avahi | sed s/install//`
sudo apt-get -y remove `sudo dpkg --get-selections | grep -v "deinstall" | grep dbus | sed s/install//`
sudo apt-get -y remove `sudo dpkg --get-selections | grep -v "deinstall" | grep freetype | sed s/install//`
sudo apt-get -y autoremove
sudo apt-get clean
샤악 날리고.
sudo sed -i 's/wheezy/jessie/' /etc/apt/sources.list
sudo sed -i 's/wheezy/jessie/' /etc/apt/sources.list.d/raspi.list
sudo apt-get update && sudo apt-get -y upgrade # answer 'y' to upcoming questions
sudo apt-get -y dist-upgrade
sudo init 6
sudo apt-get -y dist-upgrade 요기서 쫌 오래걸림
여튼 재부팅 뒤 다시 접속
sudo apt-get -y autoremove
sudo apt-get -y purge $(dpkg -l | awk '/^rc/ { print $2 }')
sudo init 6
또 재접속.

Hypriot team 님들걸로 설치 시도.
curl -ks https://packagecloud.io/install/repositories/Hypriot/Schatzkiste/script.deb.sh | sudo bash
sudo apt-get install docker-hypriot=1.10.3-1
sudo sh -c 'usermod -aG docker $SUDO_USER'
sudo systemctl enable docker.service
데몬이 안뜨니까 리붓하고 확인해보자. 결과는?
$ sudo docker info
Containers: 0
 Running: 0
 Paused: 0
 Stopped: 0
Images: 0
Server Version: 1.10.3
Storage Driver: overlay
 Backing Filesystem: extfs
Execution Driver: native-0.2
Logging Driver: json-file
Plugins:
 Volume: local
 Network: null host bridge
Kernel Version: 4.9.35+
Operating System: Raspbian GNU/Linux 8 (jessie)
OSType: linux
Architecture: armv6l
CPUs: 1
Total Memory: 434.1 MiB
Name: sprpi0
ID: KI4Y:B5FO:6MMS:J4PE:7EGH:TJDK:FTBC:RXJN:QTNZ:7XVS:YXYW:UJNR
Debug mode (server): true
 File Descriptors: 11
 Goroutines: 20
 System Time: 2017-12-09T16:39:46.019045602Z
 EventsListeners: 0
 Init SHA1: 0db326fc09273474242804e87e11e1d9930fb95b
 Init Path: /usr/lib/docker/dockerinit
 Docker Root Dir: /var/lib/docker
WARNING: No swap limit support
WARNING: No cpu cfs quota support
WARNING: No cpu cfs period support
WARNING: No cpuset support
꺄하하하하하!
$ docker version
Client:
 Version:      1.10.3
 API version:  1.22
 Go version:   go1.4.3
 Git commit:   20f81dd
 Built:        Thu Mar 10 22:23:48 2016
 OS/Arch:      linux/arm
Server:
 Version:      1.10.3
 API version:  1.22
 Go version:   go1.4.3
 Git commit:   20f81dd
 Built:        Thu Mar 10 22:23:48 2016
 OS/Arch:      linux/arm
씐난다!
오우!

hypriot님들 잘하시네. $SUDO_USER라는 게 없어서 그냥 pi 기본 유저 적어줌.
sudo sh -c 'usermod -aG docker pi'
블로그도 읽어보고 좀 배워야겠다.

댓글

이 블로그의 인기 게시물

MQTT 접속해제 - LWT(Last will and testament)

통신에서 중요하지만 구현이 까다로운 문제로 "상대방이 예상치 못한 상황으로 인하여 접속이 끊어졌을때"의 처리가 있다. 이것이 까다로운 이유는 상대방이 의도적으로 접속을 종료한 경우는 접속 종료 직전에 자신의 종료 여부를 알리고 나갈 수 있지만 프로그램 오류/네트웍 연결 강제 종료와 같은 의도치 않은 상황에선 자신의 종료를 알릴 수 있는 방법 자체가 없기 때문이다. 그래서 전통적 방식으로는 자신의 생존 여부를 계속 ping을 통해 서버가 물어보고 timeout 시간안에 pong이 안올 경우 서버에서 접속 종료를 인식하는 번거로운 방식을 취하는데 MQTT의 경우 subscribe 시점에서 자신이 접속 종료가 되었을 때 특정 topic으로 지정한 메시지를 보내도록 미리 설정할 수 있다. 이를 LWT(Last will and testament) 라고 한다. 선언을 먼저하고 브로커가 처리하게 하는 방식인 것이다. Last Will And Testament 라는 말 자체도 흥미롭다. 법률용어인데  http://www.investopedia.com/terms/l/last-will-and-testament.asp 대략 내가 죽으면 뒷산 xx평은 작은 아들에게 물려주고 어쩌고 하는 상속 문서 같은 내용이다. 즉, 내가 죽었을(연결이 끊어졌을) 때에 변호사(MQTT Broker - ex. mosquitto/mosca/rabbitMQ등)로 하여금 나의 유언(메시지)를 상속자(해당 토픽에 가입한 subscriber)에게 전달한다라는 의미가 된다. MQTT Client 가 있다면 한번 실습해보자. 여러가지가 있겠지만 다른 글에서처럼  https://www.npmjs.com/package/mqtt  을 사용하도록 한다. npm install mqtt --save 로 설치해도 되고 내 경우는 자주 사용하는 편이어서 npm install -g mqtt 로 전역설치를 했다. 호스트는 무료 제공하고 있는 test.mosquitto.o...

cURL로 cookie를 다루는 법

http://stackoverflow.com/questions/22252226/passport-local-strategy-and-curl 레거시 소스를 보다보면 인증 관련해서 cookie를 사용하는 경우가 있는데 가령 REST 서버인 경우 curl -H "Content-Type: application/json" -X POST -d '{"email": "aaa@bbb.com", "pw": "cccc"}' "http://localhost/login" 이렇게 로그인이 성공이 했더라도 curl -H "Content-Type: application/json" -X GET -d '' "http://localhost/accounts/" 이런 식으로 했을 때 쿠키를 사용한다면 당연히 인증 오류가 날 것이다. curl의 --cookie-jar 와 --cookie 옵션을 사용해서 cookie를 저장하고 꺼내쓰자. 각각 옵션 뒤엔 저장하고 꺼내쓸 파일이름을 임의로 지정하면 된다. 위의 과정을 다시 수정해서 적용하면 curl -H --cookie-jar jarfile "Content-Type: application/json" -X POST -d '{"email": "aaa@bbb.com", "pw": "cccc"}' "http://localhost/login" curl -H --cookie jarfile "Content-Type: application/json" -X GET -d '' "http://localhost/accounts/" 이렇게 사용하면 ...

Renoise로 바닥부터 Sound Design (No Sample/No VST)

Renoise는 Ableton Live Standard 버전처럼 기본적으로 아무 악기가 없고 달랑 샘플러 하나가 전부인데 그마나 다행인건 멀티레이어라고나 할까. 샘플러만 있으면 사실 다 되지. 아날로그 웨이브 테이블을 최소단위로 넣어서 루프를 돌리면  되니까. 근데 그러면 무조건 폴리포니가 되어서 구조적으로 모노 신스는 구현이 불가능하다. 그것도 방법이 없는 건 아닌데 Bend 라든가 Glide 등등으로 하면 되니까. 그래도 모노 신스가 있었으면 좋겠는데 방법이 있더라. http://forum.renoise.com/index.php?/topic/27225-renoise-native-monophonic-synthesiser/  이 글을 보고 약간 충격을 받음. 이펙터만 있으면 역시 소리를 만들 수 있구나! 바로 시도에 들어감. 처음은 이런 상태. 나는 누군가. 여긴 어딘가. 키보드를 눌러도 아무 소리가 안난다. ESC 눌러서 첫번째 트랙 맨위에 Z(C-4 00) 하나 눌러 놓고 일단 플레이. 일단 이렇게 해놓고 소리가 날 수 있게 한단 말이지. 그럼 먼저 제네레이터. 일단 1byte짜리라도 뭐가 있어야 시작을 할 수 있으니 빈 샘플을 만들자. 1byte 짜리 빈 샘플을 만든다. 당연히 소리가 안난다. DC Offset을 만들어 00 인 상태를 바꿔보자. 퍽하고 클릭음이 생기면서 Master Scope 에 변화가 생겼다. Meter도 생겼다. 그런데 이건 소리라고 할 수 없다. RingMod(Ring Modulator)를 추가해보자. 오오 소리가 난다. 0인 경우엔 Ring Modulator를 적용해도 0으로 소용이 없지만 DC Offset으로 값을 변경한 후부터 Oscillator에 따라 파형이 생긴다. 기본적으로 440Hz의 음을 들을 수 있다. 무에서 유를 만들기는 했는데 Pitch도 Volume도 없다. 일단 Pitch부터 해보자. Key Tracker로 Dest...