웹사이트 검색

Ubuntu 20.04에서 CFEngine Community Edition을 설치하고 사용하는 방법


저자는 Write for DOnations 프로그램을 선택했습니다.

소개

사물 인터넷(IoT) 장치.

이 자습서에서는 Ubuntu 20.04에 CFEngine Community Edition 3.21을 설치하고 샘플 정책 파일을 작성하고 정책 실행을 자동화합니다.

전제 조건

이 자습서를 완료하려면 다음이 필요합니다.

  • 루트가 아닌 sudo 사용자가 있는 Ubuntu 20.04 서버 1대. 이를 설정하려면 Ubuntu 20.04로 초기 서버 설정 가이드를 따르세요.
  • ssh와 같은 셸 명령(sudo 포함)을 실행하는 방법입니다.
  • 텍스트 편집기. 이 자습서에서는 nano를 사용합니다.

1단계 - CFEngine 설치

이 단계에서는 apt 및 패키지 리포지토리를 사용하여 CFEngine을 설치합니다. 설치에 apt를 사용하는 주요 이점은 apt를 사용하여 나중에 CFEngine을 업데이트할 수 있다는 것입니다.

다양한 사용 사례에 대해 CFEngine을 설치하는 다른 방법이 있습니다.

  • cf-remote는 여러 컴퓨터, 다른 버전의 CFEngine 및 나이틀리 빌드에 설치를 처리하는 유연한 선택입니다.
  • 빠른 설치 셸 스크립트는 단일 시스템에 적합합니다. 단일 명령을 터미널에 복사하여 설치할 수 있습니다.
  • 웹사이트에서 직접 패키지를 다운로드할 수도 있습니다.

이러한 대안 중 하나를 사용하여 CFEngine Community 또는 Enterprise를 설치하는 경우 부트스트랩 후 3단계 - 첫 번째 정책 만들기로 건너뜁니다.

CFEngine의 공개 키 추가

apt를 사용하여 CFEngine을 설치하려면 저장소에 액세스할 수 있도록 apt가 필요합니다. 첫 번째 단계는 CFEngine 공개 GPG 키를 apt 키 컬렉션에 추가하여 apt가 저장소의 패키지를 신뢰할 수 있도록 하는 것입니다.

다음 명령으로 키를 다운로드합니다.

  1. wget https://cfengine.com/pub/gpg.key -O ~/cfengine-gpg.key

그런 다음 apt-key를 사용하여 추가합니다.

  1. sudo apt-key add ~/cfengine-gpg.key

CFEngine의 패키지 저장소 추가

다음으로 다음 명령을 사용하여 CFEngine 리포지토리를 apt에 소스로 추가해야 합니다.

  1. sudo sh -c "echo 'deb https://cfengine-package-repos.s3.amazonaws.com/pub/apt/packages stable main' > /etc/apt/sources.list.d/cfengine-community.list"

이 명령은 CFEngine 리포지토리를 apt 소스 목록 디렉터리의 파일에 추가합니다.

sh 인수 및 -c 옵션이 없으면 출력 리디렉션이 권한 거부됨 오류가 발생합니다. >스도. 이 문제를 해결하려면 sh를 사용하여 sudo로 셸을 실행하고 -c 옵션을 사용하여 명령을 제공합니다.

이제 apt가 CFEngine 리포지토리에서 새 패키지를 볼 수 있도록 update 명령을 실행합니다.

  1. sudo apt update

apt로 패키지 설치하기

CFEngine 패키지가 이제 apt에 등록되었으므로 apt를 사용하여 CFEngine을 설치할 수 있습니다.

  1. sudo apt install cfengine-community

패키지가 다른(이전) 운영 체제에서 빌드되고 있다는 경고가 표시되면 무시해도 됩니다. 패키지는 여전히 작동합니다.

설치 확인

설치가 완료되면 /var/cfengine/bin에 CFEngine을 구성하는 구성 요소가 표시됩니다. 이 중에서 에이전트(cf-agent)는 대부분의 시간 동안 상호 작용하는 에이전트입니다. 이 바이너리는 작성한 정책을 평가하고 시스템을 변경하며 수행한 작업에 대한 정보를 기록합니다. 기본적으로 에이전트는 5분마다 깨어나 필요한 경우 새 정책을 가져와 시행합니다.

다음 명령을 사용하여 에이전트가 성공적으로 설치되었는지 확인하십시오.

  1. sudo cf-agent --version

버전 번호가 화면에 인쇄됩니다.

Output
CFEngine Core 3.21.0

참고: 이 글을 쓰는 시점에서 현재 버전은 3.21.0입니다. 버전 번호가 다를 수 있습니다.

cf-agent 명령이 작동하지 않으면 /var/cfengine/bin/PATH 변수에 있고 >cf-agent가 해당 디렉토리에 있습니다.

2단계 - CFEngine 시작

CFEngine을 시작하려면 에이전트를 부트스트랩해야 합니다. 그렇게 하려면 다음 명령을 사용하십시오.

  1. sudo cf-agent --bootstrap 127.0.0.1

이 명령은 에이전트에게 CFEngine 구성 요소를 시작하고 이 시스템 127.0.0.1에서 정책을 가져오도록 지시합니다.

앞으로는 여러 시스템이 동일한 서버에서 정책을 가져오기를 원할 것입니다. 이 경우 127.0.0.1은 해당 서버의 IP 주소로 대체됩니다. 그러나 CFEngine을 시작하고 배우기 위해 이 자습서에서는 하나의 컴퓨터와 127.0.0.1을 사용합니다.

이제 CFEngine이 서버에 설치되어 실행 중입니다. 다음 단계는 정책 작성을 시작하는 것입니다.

3단계 - 첫 번째 정책 생성

CFEngine을 사용하여 시스템 관리 작업을 자동화하려면 CFEngine의 자체 CFEngine 참조 문서에 작성된 정책 파일을 만듭니다.

정책 파일은 선언적이라는 점에서 스크립트와 다릅니다. 원하는 시스템 상태를 설명하면 CFEngine은 이미 그러한 경우인지 확인하고 필요한 경우에만 변경합니다. 정책에서 표현하고 싶은 몇 가지 예는 다음과 같습니다.

  • 사용자 sammy가 존재하는지 확인합니다.
  • curl 패키지를 최신 상태로 유지하고 설치합니다.
  • telnet이 설치되어 있지 않은지 확인하십시오.
  • 템플릿과 일부 데이터에서 스크립트 파일을 렌더링합니다.
  • httpd와 같은 프로세스가 실행 중인 경우 중지합니다.
  • /usr/bin 폴더에 엄격한 권한을 적용합니다.

이러한 모든 경우에 정책을 작성하여 서버의 올바른 위치(/var/cfengine/masterfiles)에 배치합니다. 그런 다음 CFEngine은 다음을 수행합니다.

  • 정책 파일을 다른 부트스트랩 호스트로 전송하여 배포를 자동화합니다.
  • 요구 사항을 정기적으로 적용합니다(기본적으로 5분마다 정책 실행). 예를 들어 누군가 sammy 사용자를 삭제하거나 /usr/bin에 대한 권한을 변경한 경우 이러한 변경 사항은 5분 이내에 자동으로 복원됩니다.
  • 필요한 경우(즉, 상태가 원하는 대로 되지 않은 경우)에만 파일 쓰기와 같은 변경을 수행합니다.
  • 많은 플랫폼 차이점을 처리합니다(예: 패키지 설치, 사용자 생성 및 기타 작업에 사용되는 명령은 운영 체제에 따라 다름).

이 단계에서는 "Hello World\ 정책을 생성하여 "Hello!\ 텍스트를 출력합니다. 터미널로.

nano 또는 즐겨 사용하는 텍스트 편집기를 사용하여 ~/hello_world.cf라는 새 파일을 만듭니다.

  1. nano ~/hello_world.cf

파일 내에서 다음을 추가합니다.

bundle agent main
{
  reports:
    "Hello!";
}

CFEngine 정책은 선언적이며 위에서 아래로 평가되지 않습니다.

CFEngine 정책 언어에서는 관리 대상에 대한 각 진술을 번들이라고 합니다. 번들은 실행되는 정책 부분(및 실행되지 않는 부분)과 실행 순서를 선택할 수 있기 때문에 유용합니다.

이 정책에서 번들 순서는 평가할 번들을 지정합니다. 기본적으로 main 번들이 포함되어 있으므로 변경할 필요가 없습니다.

파일을 저장하고 닫습니다. nano를 사용하여 CTRL+X를 눌러 종료하고 Y를 눌러 저장하고 ENTER를 눌러 파일 이름을 확인하고 닫습니다. 파일.

CFEngine은 일반적으로 루트 사용자로 실행되기 때문에 정책 파일에 대한 엄격한 권한을 요구하여 시스템에 대한 무단 변경을 방지하려고 합니다. (다른 사용자가 정책 CFEngine 실행을 편집하도록 허용하면 권한이 있는 사용자로서 시스템을 변경할 수 있습니다.) chmod를 사용하여 파일 권한을 편집하여 다른 사용자가 이 파일을 편집하지 못하도록 할 수 있습니다.

  1. chmod 600 hello_world.cf

정책을 실행하려면 다음 명령을 사용하십시오.

  1. sudo cf-agent ~/hello_world.cf

CFEngine 에이전트는 번들을 찾고(main 이름 때문에) 내부의 약속을 보고 평가합니다. 약속을 평가할 때 에이전트는 시스템을 변경해야 하는지 여부를 확인합니다. 이 경우 단 하나의 약속이 있었고 에이전트는 이를 만족시키기 위해 터미널에 메시지를 인쇄해야 한다고 결정했습니다.

다음과 같은 결과가 표시됩니다.

Output
R: Hello!

기본적으로 CFEngine은 수행된 작업을 추적하고 최근에 평가된 약속을 건너뜁니다(마지막 1분 이내). 정책을 다시 실행하려고 하면 아무것도 인쇄되지 않습니다. --no-lock 명령줄 옵션을 사용하여 이 잠금을 비활성화할 수 있습니다.

  1. sudo cf-agent --no-lock hello_world.cf

첫 번째 정책을 만들고 실행했습니다. 콘솔에 출력할 수 있는 것이 유용하지만 이 정책은 실제로 시스템을 변경하지 않습니다. 다음 단계에서 그렇게 할 것입니다.

4단계 - 텍스트 파일의 내용을 관리하기 위한 정책 작성

이전 단계에서 터미널에 메시지를 인쇄하는 정책을 생성했습니다. 그러나 보다 현실적인 사용 사례는 일부 특정 콘텐츠가 포함된 파일이 인프라의 모든 호스트에 존재하도록 하는 것입니다. 이 단계에서는 Hello, CFEngine! 내용으로 텍스트 파일(/tmp/my_file.txt)을 생성하는 정책을 작성합니다.

새 정책 파일 ~/file_management.cf를 엽니다.

  1. nano ~/file_management.cf

다음 콘텐츠를 추가합니다.

bundle agent manage_my_file
{
  files:
    "/tmp/my_file.txt"
      content => "Hello, CFEngine!$(const.n)";
}

번들의 이름은 main 대신 manage_my_file입니다. 더 많은 정책을 작성할 때 각 번들에 고유하고 설명이 포함된 이름을 지정해야 합니다. main 번들은 하나만 있을 수 있습니다.

이 정책은 파일을 관리하므로 약속 유형은 files입니다. content 속성은 files 약속에 사용되며 해당 파일의 내용이 무엇인지 지정합니다. 문자열의 마지막 부분인 &#36 (const.n)은 특수 변수 const.n을 확장하여 파일 끝에 새 줄이 생깁니다. .

파일을 저장하고 닫습니다.

이전과 마찬가지로 정책 파일에 엄격한 권한을 설정합니다.

  1. chmod 600 file_management.cf

이제 몇 가지 추가 명령줄 옵션을 사용하여 파일을 실행합니다.

  1. sudo cf-agent --no-lock --info ~/file_management.cf --bundle manage_my_file

더 이상 main 번들이 없기 때문에 --bundle manage_my_file로 번들을 지정해야 합니다.

--info 옵션은 CFEngine이 시스템 변경 사항에 대한 정보 메시지를 인쇄하도록 합니다.

이 명령의 출력에는 다음 변경 사항에 대한 정보가 포함됩니다.

Output
info: Using command line specified bundlesequence info: Created file '/tmp/my_file.txt', mode 0600 info: Updated file '/tmp/my_file.txt' with content 'Hello, CFEngine!

이 출력은 CFEngine이 Hello, CFEngine! 콘텐츠가 있는 /tmp 디렉토리에 my_file.txt라는 텍스트 파일을 생성했음을 나타냅니다.

동일한 명령을 다시 실행하면 파일 생성 및 업데이트에 대한 메시지가 더 이상 표시되지 않습니다. CFEngine은 파일의 내용이 이미 올바른 것으로 인식하고 변경하지 않습니다.

참고: --no-lock--info는 일반적으로 정책 파일을 작성하고 테스트할 때 함께 사용됩니다. 일부 입력을 저장하기 위해 사용할 수 있는 단축키가 있습니다. -KI--no-lock --info와 동일합니다.

이제 작동하는 시스템 정책이 있으므로 감독 없이 실행할 수 있습니다. 다음 단계에서 그렇게 할 것입니다.

5단계 - 정책 실행 자동화

항상 명령줄에서 수동으로 정책을 실행하고 싶지는 않을 것입니다. CFEngine에는 이를 처리하는 자동화 기능이 포함되어 있습니다.

이 단계에서는 정책 파일을 예상 위치에 배치하고 JSON 파일을 업데이트하여 정책 실행을 자동화합니다. JSON 파일은 명령줄에서 명시적으로 수동으로 명령을 실행하지 않고도 백그라운드에서 수행할 작업을 CFEngine 구성 요소에 주기적으로 알려줍니다.

다음 명령을 사용하여 이전 단계에서 만든 정책 파일을 권장 위치에 복사합니다.

  1. sudo cp file_management.cf /var/cfengine/masterfiles/services/

모든 CFEngine 정책은 /var/cfengine/masterfiles/ 안에 있습니다. 여기에는 CFEngine과 함께 제공되는 작성하지 않은 정책이 포함됩니다. 사용자 지정 정책을 기본 정책과 별도로 유지하려면 정책 파일을 services/ 하위 디렉터리에 두는 것이 좋습니다.

CFEngine 에이전트가 새 정책 파일을 가져올 때 허브의 이 디렉터리에서 복사합니다. 하나의 시스템만 사용하는 경우에도 에이전트는 여전히 동일한 방식으로 작동합니다. /var/cfengine/masterfiles에서 파일을 찾아 /var/cfengine/inputs에 복사합니다. . 신규 사용자의 경우 이러한 경로를 사용하는 것이 가장 좋습니다. 경로를 사용자 지정하거나 정책 파일을 다른 위치에 배치하려면 권한과 파일 복사 및 찾기가 올바르게 작동하는지 확인해야 하므로 더 많은 작업이 필요합니다.

다음으로 정책 파일이 있는 위치와 실행할 번들이 지정되도록 Augments JSON 파일을 만듭니다.

  1. sudo nano /var/cfengine/masterfiles/def.json

해당 파일에 다음 콘텐츠를 추가합니다.

{
  "inputs": [ "services/file_management.cf" ],
  "vars": {
    "control_common_bundlesequence_end": [ "manage_my_file" ]
  }
}

정책을 정기적으로(5분마다) 실행하는 데 필요한 두 단계가 있습니다. 에이전트가 파일을 찾아서 읽는지 확인하고 에이전트가 번들을 실행하는지 확인합니다.

def.jsoninputs 키는 에이전트에게 읽을 정책 파일을 알려줍니다. 이 경우 에이전트는 마지막 단계인 file_management.cf에서 만든 정책을 읽습니다.

vars 키는 변수를 정의하는 데 사용할 수 있습니다. control_common_bundlesequence_end 변수는 기본 정책에서 사용되므로 거기에 넣은 번들 이름은 bundlesequence 끝에 추가되고 모든 기본 번들 이후에 평가됩니다. 이 두 가지 정보는 cf-agent가 읽을 정책 파일과 명령줄에서 이러한 항목을 지정하지 않고도 평가할 정책 파일을 알고 있음을 의미합니다.

이 시점에서 /var/cfengine/masterfiles/ 내에서 정책을 편집하고 자동화가 나머지를 처리합니다. 보다 구체적으로 cf-agent는 주기적으로 깨어나서 작성한 새 정책 파일을 가져옵니다. 에이전트는 정책을 읽고 평가하여 모든 약속을 시행하고 필요에 따라 시스템을 변경합니다(예: 파일 편집 및 사용자 생성).

이 자습서에서 작성한 정책에 따라 에이전트가 실행될 때마다 정책 파일에 지정한 콘텐츠와 함께 /tmp/my_file.txt가 존재하는지 확인합니다.

파일을 저장하고 닫습니다.

자동화가 작동하는지 확인하려면 파일 관리 정책을 처음 실행할 때 생성된 텍스트 파일을 삭제합니다.

  1. sudo rm /tmp/my_file.txt

5분 후에 CFEngine이 백그라운드에서 my_file.txt를 다시 생성했는지 확인할 수 있습니다.

  1. cat /tmp/my_file.txt
Output
Hello, CFEngine.

또는 파일 생성이 더 빨리 일어나도록 강제할 수도 있습니다.

  1. sudo rm /tmp/my_file.txt ; sudo cf-agent -Kf update.cf ; sudo cf-agent -KI

rm 명령은 파일을 삭제하므로 CFEngine은 변경이 필요한지 확인합니다.

첫 번째 cf-agent 명령은 정책 파일을 업데이트하여 /var/cfengine/masterfiles에서 /var/cfengine/inputs로 복사합니다.

마지막 cf-agent 명령은 정책을 적용하여 /tmp/my_file.txt 파일을 찾고 필요한 경우 만들고 편집합니다.

이 경우 파일을 삭제한 직후에 에이전트를 실행하고 있으므로 cf-agent는 파일을 생성했다고 출력해야 합니다. (이러한 명령 사이에 백그라운드에서 에이전트가 실행될 가능성은 거의 없습니다.)

참고: 명령 sudo cf-agent -Kf update.cf ; sudo cf-agent -KI는 CFEngine이 기본적으로 5분마다 실행하는 명령과 유사합니다. 따라서 이 명령을 실행하면 CFEngine이 올바르게 작동하는 경우 5분을 기다리는 것과 동일한 결과가 나타납니다. 첫 번째 에이전트 실행은 정책을 업데이트하고 두 번째 실행은 정책을 평가하고 시스템을 변경합니다.

이 단계에서는 CFEngine으로 첫 번째 시스템 관리 작업을 자동화했습니다. 이 예제는 파일 생성 및 편집에 중점을 두지만 다른 작업에 대한 프로세스는 동일합니다. 즉, 정책을 작성하고 올바른 디렉터리에 넣고 그에 따라 def.json 파일을 업데이트합니다.

결론

이제 단일 서버에 CFEngine을 설치하고 시작했습니다. 첫 번째 정책을 작성하고 자동으로 실행되도록 설정했습니다.

다음 단계로 파일 관리: 파일 만들기, 수정 및 삭제에 대한 이 자습서와 같은 CFEngine 공식 문서를 확인하십시오.

질문이 있거나 도움이 필요하면 CFEngine의 GitHub 토론의 Q&A 섹션에 자유롭게 게시하십시오.