snap 학습 패키지 Nginx 실천

11779 단어 Snap
snap 은 우 분투 모회사 카 노 니 컬 이 2016 년 4 월 우 분투 16.04 를 발표 하면 서 도입 한 안전 하고 관리 하기 쉬 우 며 샌 드 박스 화 된 패키지 형식 이다.    snap 패 키 지 는 squashFS 파일 시스템 에 기반 을 두 고 완전히 독립 되 고 운영 체제 입 니 다. 소프트웨어 운영 에 필요 한 라 이브 러 리 와 runtime 을 포함 하고 샌 드 박스 의 속성 을 가지 기 때문에 외부 자원 에 함부로 접근 할 수 없습니다. interfaces 체 제 를 통 해 인 터 페 이 스 를 설정 해 야 실현 할 수 있 습 니 다.    snapcraft 는 snap 패 키 지 를 구축 하고 발표 하 는 패 키 지 관리 시스템 입 니 다.개발 자 는 snapcraft. yaml 설정 파일 을 작성 하여 snap 패 키 지 를 정의 한 다음 snapcraft 도 구 를 통 해 snap 패 키 지 를 생 성하 고 발표 할 수 있 습 니 다.snapcraft. yaml 의 상세 한 정 의 는 참고 하 시기 바 랍 니 다.https://snapcraft.io/docs/snapcraft-overview관련 된 정의 가 많 기 때문에 일일이 설명 하지 않 습 니 다.Nginx 를 포장 하 는 실천 에서 우 리 는 사용 하 는 필드 에 대해 상세 하 게 설명 합 니 다.
    다음은 우 분투 16.04 에서 Nginx 포장 을 실천 하기 시작 합 니 다.
1. 소프트웨어 설치     Ubuntu 16.04 자체 snap 과 snapcraft, which 명령 으로 확인 할 수 있 습 니 다.만약 소프트웨어 가 설치 되 지 않 았 다 면, 직접 설치 해라.
  sudo apt install snap
  sudo apt install snapcraft  

    snapcraft 도구 도 snap 패키지 버 전 을 직접 설치 할 수 있 습 니 다.
  sudo snap install snapcraft --classic

    Ubuntu 16.04 자체 테이프 또는 apt 로 설 치 된 snapcraft 버 전이 오래 되 었 습 니 다. 기본적으로 snap base 를 사용 하 는 것 은 core 이 고 snap 로 설 치 된 snapcraft 버 전이 새 롭 습 니 다. 기본 으로 사용 하 는 snap base 는 core 18 입 니 다.실제 실천 에서 저 는 Ubutu 16.04 가 가 져 온 snapcraft 를 사 용 했 고 snap base 는 core 입 니 다.    snap base 는 snap 패키지 가 실 행 된 기본 환경 으로 snap 패 키 지 를 설치 할 때 로 컬 에 snap base 가 없 으 면 자동 으로 다운로드 합 니 다.우 리 는 snap 명령 으로 로 컬 이 존재 하 는 지 확인 할 수 있 습 니 다.
  pp@pp-ThinkPad-S2-2nd-Gen:~$ snap list
  Name       Version    Rev   Tracking  Publisher   Notes
  core       16-2.42.5  8268  stable    canonical✓  core
  core18     20200113   1650  stable    canonical✓  base

파일 은 보통 / snap 디 렉 터 리 에 있 습 니 다.
    snap 의 백 스테이지 서비스 snapd 가 시작 되 었 는 지 다시 확인 합 니 다.
  pp@pp-ThinkPad-S2-2nd-Gen:~$ ps -A | grep "snapd"
   5072 ?        00:00:36 snapd
  17926 ?        00:00:00 snapd

    snapd 가 시작 되 지 않 으 면 명령 으로 시작 해 야 합 니 다.
  service snapd start

2. nginx 소프트웨어 2.1 에 등록 하여 로그 인 합 니 다.이 를 위해, 우 리 는 도착 해 야 한다.https://snapcraft.io/account우 분투 원 계 정 을 신청 하고 로그 인 합 니 다.
  pp@pp-ThinkPad-S2-2nd-Gen:/snap$ snapcraft login
  Enter your Ubuntu One e-mail address and password.
  If you do not have an Ubuntu One account, you can create one at  https://snapcraft.io/account
  Email:

로그 인 후 snap store 에 발 표 된 가방 의 이름 을 만 들 수 있 습 니 다.
  pp@pp-ThinkPad-S2-2nd-Gen:~/snap$ snapcraft register ****
  
  We always want to ensure that users get the software they expect 
  for a particular name.
  
  If needed, we will rename snaps to ensure that a particular name
  reflects the software most widely expected by our community.
  ......

등록 을 다 한 후에 우 리 는 로그 인 할 수 있 습 니 다.https://snapcraft.io/snaps만 든 스냅 백 이름 을 봅 니 다.
2.2 snapcraft 프로젝트 초기 화pcraffile:///C:/Users/zhangjijin.ROGEN/Desktop/튜 토리 얼 / snap / snap hooks 설치 과정 에서 config 파일 복사. mdt. yaml 파일.
  pp@pp-ThinkPad-S2-2nd-Gen:~/nginx-snap$ snapcraft init
  Created snap/snapcraft.yaml.
  Go to https://docs.snapcraft.io/the-snapcraft-format/8337 for more 
  information about the snapcraft.yaml format.

『 8195 』 생 성 된 snapcraft. yaml 파일 의 내용 은 다음 과 같 습 니 다.
  name: my-snap-name # you probably want to 'snapcraft register '
  version: '0.1' # just for humans, typically '1.2+git' or '1.3.2'
  summary: Single-line elevator pitch for your amazing snap # 79 char long summary
  description: |
    This is my-snap's description. You have a paragraph or two to tell the
    most important story about your snap. Keep it under 100 words though,
    we live in tweetspace and your description wants to look good in the snap
    store.

  grade: devel # must be 'stable' to release into candidate/stable channels
  confinement: devmode # use 'strict' once you have the right plugs and slots

  parts:
    my-part:
      # See 'snapcraft plugins'
      plugin: nil

    snapcraft. yaml 파일 은 다음 필드 로 구성 되 어 있 습 니 다.     name - snap 가방 의 이름 은 8195;   version - snap 가방 의 버 전 번호 입 니 다.소스 코드 git 라 이브 러 리 의 분기 나 태그 일 수도 있 습 니 다. 현재 날짜 나 사용자 정의 일 수도 있 습 니 다.snap store 의 stable channel 에 snap 패 키 지 를 발표 하려 면 stable * 8195 °, confinement - snap 가 실 행 될 때 시스템 과 의 격 리 도 를 표시 해 야 합 니 다.3 개의 등급 이 있 습 니 다: devmode, strict, classic. 보통 개발 할 때 devmode 로 설정 합 니 다. snap 패키지 검증 이 완료 되면 classic * 8195 ° parts 로 바 꿉 니 다. snap 패키지 에서 코드 를 어떻게 가 져 오 는 지, 의존 관계 와 어떻게 컴 파일 하 는 지 설명 합 니 다. 다른 중요 한 필드 는 apps 입 니 다. snap 패키지 가 외부 에 호출 된 명령 이나 서비스 이름 을 설명 합 니 다.
2.3 nginx 소프트웨어 의 snap 패 키 지 는 8195 입 니 다. 다음은 nginx 의 실제 상황 과 결합 하여 snapcraft. yaml 파일 을 수정 하여 포장 을 완성 합 니 다.nginx 소스 코드 에서 다운로드 주소http://nginx.org/download/최신 nginx 소스 버 전 은 1.17.7 이 고 소스 코드 컴 파일 은 autotools 를 사용 하기 때문에 파일 은 다음 과 같이 수정 되 었 습 니 다.
  name: nginx
  version: '1.17.7'
  summary: nginx server
  description: |
      nginx is a free, open-source, high-performance HTTP server and reverse proxy, as well as an IMAP/POP3 proxy server.
  
  grade: stable
  confinement: devmode

  apps:
    nginx:
      command: nginx
      plugs: [home]
  
  parts:
  nginx:
      source: http://nginx.org/download/nginx-1.17.7.tar.gz
      source-type: tar
      plugin: autotools
      configflags:
          - --conf-path=/var/snap/nginx/common/conf/nginx.conf
          - --error-log-path=/var/snap/nginx/common/logs/error.log
          - --http-log-path=/var/snap/nginx/common/logs/access.log
          - --pid-path=/var/snap/nginx/common/run/nginx.pid
          - --lock-path=/var/snap/nginx/common/lock/nginx.lock
          - --http-client-body-temp-path=/var/snap/nginx/common/lib/nginx_client_body
          - --http-proxy-temp-path=/var/snap/nginx/common/lib/nginx_proxy
          - --http-fastcgi-temp-path=/var/snap/nginx/common/lib/nginx_fastcgi
          - --http-uwsgi-temp-path=/var/snap/nginx/common/lib/nginx_uwsgi
          - --http-scgi-temp-path=/var/snap/nginx/common/lib/nginx_scgi
          - --with-http_ssl_module

* 8195: 8195, configflags 필드 는 configure 명령 을 실행 하 는 인 자 를 설명 하고 구체 적 인 인 인 자 는 구체 적 으로 설명 하지 않 습 니 다.여기 서 / var / snap / nginx / common / 이 디 렉 터 리 를 중점적으로 설명 합 니 다.    저 희 는 nginx snap 패 키 지 를 예 로 들 면 snap 패 키 지 를 설치 한 후에 파일 시스템 은 읽 기와 쓰기 만 가능 한 두 가지 서로 다른 권한 의 구역 으로 나 뉘 어 집 니 다. 일반적인 상황 에서 읽 기 전용 구역 은 / snap / nginx 디 렉 터 리 입 니 다. 읽 기 전용 구역 은 / var / snap / nginx / common / 입 니 다. 사용자 가 nginx 의 설정 파일 을 수정 해 야 하기 때문에 nginx 서비스 도 각종 로 그 를 생 성 합 니 다.따라서 우 리 는 컴 파일 된 매개 변수 중의 디 렉 터 리 를 모두 이 읽 기 가능 한 디 렉 터 리 로 수정 해 야 한다. 이것 은 apt 에 설 치 된 nginx 서비스 와 큰 차이 가 있다.
    snapcraft. yaml 파일 을 수정 한 후에 우 리 는 스냅 백 을 치기 시 작 했 지만 포장 과정 에서 다음 과 같은 오류 가 발생 할 수 있 습 니 다.
  pp@pp-ThinkPad-S2-2nd-Gen:~/nginx-snap/snap$ sudo snapcraft
  ......  
  ./configure: error: the HTTP rewrite module requires the PCRE library.
  ......
  ./configure: error: the HTTP gzip module requires the zlib library.
  ......
  ./configure: error: SSL modules require the OpenSSL library.
  ......

    우 리 는 parts 에서 컴 파일 에 의존 하 는 가방 을 추가 합 니 다.
  build-packages: [ libpcre3, libpcre3-dev, zlib1g, zlib1g-dev,  openssl, libssl-dev ]

『 8195 』 가방 에 의존 하 는 가방 이름 은 apt 명령 을 통 해 찾 을 수 있 습 니 다. 예 를 들 어:
  pp@pp-ThinkPad-S2-2nd-Gen:~/nginx-snap/snap$ sudo apt-cache search PCRE
  ......
  libpcre3 - Old Perl 5 Compatible Regular Expression Library - runtime files
  libpcre3-dbg - Old Perl 5 Compatible Regular Expression Library - debug symbols
  libpcre3-dev - Old Perl 5 Compatible Regular Expression Library - development files
  libpcre32-3 - Old Perl 5 Compatible Regular Expression Library - 32 bit runtime files
  ......

    포장 과정 에서 문제 가 발생 하여 수정 한 후에 다시 포장 할 때 clean 을 제거 하고 다시 컴 파일 해 야 합 니 다.
  sudo snapcraft clean
  sudo snapcraft

    의존 가방 을 추가 한 후에 드디어 포장 에 성 공 했 습 니 다.
  pp@pp-ThinkPad-S2-2nd-Gen:~/nginx-snap/snap$ sudo snapcraft
  ......  
  usr/lib/x86_64-linux-gnu/libcrypto.so.1.1
  usr/lib/x86_64-linux-gnu/libssl.so.1.1
  Snapping 'nginx' /                                                                                                             
  Snapped nginx_1.17.7_amd64.snap
  pp@pp-ThinkPad-S2-2nd-Gen:~/nginx-snap/snap$ ls
  nginx_1.17.7_amd64.snap  parts  prime  snap  snapcraft.yaml  stage

3. 설치 검증 nginx 의 snap 이 완료 되 었 습 니 다. 인증 nginx snap 패 키 지 를 설치 하 겠 습 니 다.
  pp@pp-ThinkPad-S2-2nd-Gen:~/nginx-snap/snap$ sudo snap install ./nginx_1.17.7_amd64.snap --dangerous --devmode
  nginx 1.17.7 installed
  pp@pp-ThinkPad-S2-2nd-Gen:~/nginx-snap/snap$ which nginx
  /snap/bin/nginx

    nginx snap 패 키 지 를 설치 하면 snap 패키지 의 기본 설치 디 렉 터 리 가 / snap 아래 인 것 을 볼 수 있 습 니 다.nginx 가 정상적으로 작 동 할 수 있 는 지 검증 해 봅 시다.
  pp@pp-ThinkPad-S2-2nd-Gen:~/nginx-snap/snap$ sudo nginx
  nginx: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.27' not found (required by nginx)
  nginx: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.25' not found (required by /snap/nginx/x1/usr/lib/x86_64-linux-gnu/libcrypto.so.1.1)

『 8195 』 nginx 명령 을 실행 하여 정상적으로 실행 할 수 없습니다. libc. so 라 이브 러 리 가 없습니다. snapcraft. yaml 파일 을 수정 하고 stage - packages 필드 를 통 해 parts 에 실행 중인 의존 라 이브 러 리 를 추가 합 니 다.
  stage-packages: [ libc6, libc6-dev ]

snapcraft 명령 을 다시 실행 하고 nginx snap 패 키 지 를 다시 설치 합 니 다.
  pp@pp-ThinkPad-S2-2nd-Gen:~/nginx-snap/snap$ sudo snap remove nginx
  nginx removed
  pp@pp-ThinkPad-S2-2nd-Gen:~/nginx-snap/snap$ which nginx
  pp@pp-ThinkPad-S2-2nd-Gen:~/nginx-snap/snap$ sudo snap install ./nginx_1.17.7_amd64.snap --dangerous --devmode
  nginx 1.17.7 installed
  pp@pp-ThinkPad-S2-2nd-Gen:~/nginx-snap/snap$ nginx
  nginx: [alert] could not open error log file: open() "/var/snap/nginx/common/logs/error.log" failed (2: No such file or directory)
  2020/01/28 17:39:10 [emerg] 17947#0: open() "/var/snap/nginx/common/conf/nginx.conf" failed (2: No such file or directory)

    log 파일 을 열 수 없고 설정 파일 을 찾 을 수 없 는 오류 가 발생 했 습 니 다. nginx snap 패 키 지 를 설치 할 때 snapcraft. yaml 파일 에 정 의 된 파일 이 읽 기 가능 한 쓰기 영역 디 렉 터 리 에 복사 되 지 않 았 고 읽 기 전용 디 렉 터 리 에 있 기 때 문 입 니 다. 살 펴 보 겠 습 니 다.
  pp@pp-ThinkPad-S2-2nd-Gen:/snap/nginx/current/var/snap/nginx/common$ ls
  conf  logs  run
  pp@pp-ThinkPad-S2-2nd-Gen:/snap/nginx/current/var/snap/nginx/common$ cd /var/snap/nginx/common
  pp@pp-ThinkPad-S2-2nd-Gen:/var/snap/nginx/common$ ls
  pp@pp-ThinkPad-S2-2nd-Gen:/var/snap/nginx/common$ 

    읽 기 전용 common 디 렉 터 리 의 내용 을 읽 기 전용 디 렉 터 리 에 복사 하고 lib 디 렉 터 리 를 수 동 으로 만 들 며 nginx 명령 을 다시 실행 하 는 데 성공 하 였 습 니 다.
  pp@pp-ThinkPad-S2-2nd-Gen:~/nginx-snap/snap$ sudo nginx
  pp@pp-ThinkPad-S2-2nd-Gen:~/nginx-snap/snap$ ps -A | grep "nginx"
  18109 ?        00:00:00 nginx
  18110 ?        00:00:00 nginx

4. 후속 작업 은 81955 ℃ 이상 입 니 다. snapcraft 도 구 를 사용 하여 snap 가방 을 포장 하 는 과정 과 snap 가방 의 초기 검증 과정, 그리고 두 부분의 작업 을 잘 알 고 있 습 니 다. 저 희 는 후속 적 인 튜 토리 얼 에서 상세 하 게 설명 할 것 이 니 지속 적 으로 관심 을 가 져 주 십시오.    1) snap hooks 를 사용 하여 설치 할 때 자동 으로 설정 파일 을 읽 기 전용 영역 에서 읽 기 전용 영역 으로 복사 합 니 다.
nginx 패키지 의 snapcraft 프로젝트 파일 에 접근 하 십시오.https://github.com/dangelzjj/enjoy_snap.git
5. 참고 자료:    https://tutorials.ubuntu.com/tutorial/create-your-first-snap   https://snapcraft.io/docs/t/pre-built-apps/6739   https://snapcraft.io/docs/snapcraft-parts-metadata   https://snapcraft.io/docs/snapcraft-app-and-service-metadata   https://snapcraft.io/docs/supported-plugins   https://snapcraft.io/docs/autotools-plugin

좋은 웹페이지 즐겨찾기