Skip to main content

Alpine Linux

1. Installation

홈페이지에 가보면 여러 에디션이 있는 것을 볼 수 있다.

가장 쉬운 것은 Extended겠지만, 나는 ESXi에 올릴 것이기에 Virtual로 진행하며, VM 설정은 아래와 같다.

  • 기타 6.x 이상 Linux (64비트)
  • 빼먹지 말고 씬프로비저닝과 Service Network를 설정

부팅을 진행하면 메모리 위에 전부 올라가버린다. Ubuntu로 따지면 Live라고 해야할까.

root로 비밀번호 없이 로그인을 하고, 드라이브에 설치를 하기 위해 아래와 같은 명령어를 이용한다.

setup-alpine

키보드 레이아웃, IP주소, Time Zone, 미러 사이트 등에 대해서 설정을 해주고 설치를 한다. 차근차근 읽어보고 진행하도록 하자. 

중간에 디스크 설치는 sys를 지정하자.

설치가 종료되면 전원을 끈 다음 부팅 이미지를 제거하고 다시 부팅해 호스트 이름이 바뀐 것을 확인한다.

poweroff #서비스.. 종료다!
reboot   #재부팅

2. Settings

Update and Upgrade

Alpine Linux의 패키지 관리자는 apk다. 항상 하던 것처럼 패키지들을 최신버전으로 만들어주자.

apk update
apk upgrade

SSH access by root

관리의 편리함을 위해 root 계정으로 SSH 접근을 허용하자.

vi /etc/ssh/sshd_config

# 아래의 줄처럼 PermitRootLogin 옵션을 찾아서 바꾼다
# PermitRootLogin yes

service sshd restart

SSH 서비스를 재시작하면 이제 root로 SSH 접근이 가능하다.

VM Tools

Virtual 이미지 기준으로 커뮤니티 저장소를 허용해줘야 한다.

vi /etc/apk/repositories

# 아랫 줄의 주석을 제거한다.
# http://repo.jing.rocks/alpine/v3.20/community

설치하고 실행한 다음, 부팅 시 실행하도록 세팅한다.

apk add open-vm-tools open-vm-tools-guestinfo open-vm-tools-deploypkg
rc-service open-vm-tools start
rc-update add open-vm-tools boot

NFS Mount

Alpine Linux가 클라이언트인 시나리오를 가정한다. 어느쪽이든 nfs-utils를 설치해야한다.

apk update
apk add nfs-utils

서버측 설정이 완료되었다고 가정하고, 아래와 같은 명령어를 통해 기존 디렉토리에 NFS 마운트가 가능하다. 

mount -t nfs storage.lab:/mnt/... /opt/stacks/...

설정이 완료되면, 부팅 시에 자동으로 마운트되게 한다.

vi /etc/fstab

# Add line
# storage.lab:/mnt/... /opt/stacks/... nfs defaults 0 0

만약 재부팅을 해도 마운팅이 되지 않는다면 fstab이 정상적으로 작동하는지와 nfsmount 서비스를 정비한다.

# fstab is wrong?
mount -a

# nfsmount
rc-update add nfsmount
service nfsmount start

3. Troubleshotting

Limit of Docker Network

한창 Docker Compose를 이용해 컨테이너를 올리고 있는데... 어느 수를 기점으로 더 이상 올라가지 않는다. 아니, 정확히 말하자면 컨테이너가 실행은 되지만 다른 subnet에서 접근이 불가능하다. 

이는 Docker Network에서 각 컨테이너마다 별도의 Network를 만들도록 지정했으며, 해당 과정에서 기존에 접근하던 subnet의 ip를 덮어씌워(?) 그렇다고 예상한다. 원인은 정확하게 잘 모르겠지만 아무튼 Network의 수를 줄이면 된다는 것을 확인했다.

아래의 명령어를 참고해서 네트워크를 정리해주자. 물론, 컨테이너는 중지하고 진행했다.

# 현재 docker network의 목록을 전부 열람
docker network ls

# cont_0 컨테이너와 cont_net 네트워크의 연결을 절단
docker network disconnect cont_net cont_0

# new_net라는 새로운 네트워크를 생성
docker network create new_net

# cont_0 컨테이너와 new_net 네트워크를 연결
docker network connect new_net cont_0

# cont_net 네트워크를 제거
docker network rm cont_net

네트워크가 정리되었다면 다시 컨테이너를 실행시키기 전에 compose.yaml 파일을 수정하자.

# Heimdall의 compose.yaml 파일을 예시로 든다.
services:
  heimdall:
    image: lscr.io/linuxserver/heimdall:latest
    container_name: heimdall
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Asia/Seoul
    ports:
      - 80:80
      - 443:443
    volumes:
      - ./config:/config
    restart: unless-stopped

# 이 아래부터 변경 사항이다.
    networks:
      - lan_service
networks:
  lan_service:
    external: true

networks에 미리 사용할 docker network를 선언하고 external옵션을 붙혀준다. 이렇게하면 heimdall_defualt 등의 새로운 docker network가 생성되지 않는다.


Reference