PowerShell Internal Repository 구성 및 서비스 방법에 대한 포스팅입니다.
PowerShell 모듈을 다운로드하기위해 PSGallery를 많이 사용하고 있습니다.
하지만 인터넷 연결이 불가능한 서버들의 경우 모듈설치를 위해 인터넷이 가능한곳에서 모듈파일을 다운로드 받아 서버로 복사하여 사용하는 방법밖에 없었습니다.
또한, 인터넷망의 Repository를 통해 인증/검증되지 않은 모듈을 설치 및 사용하여 여러 문제들이 발생되어 최소한 사용이 검증된 모듈들을 한곳(Internal Repository) 에 모아두고 배포하는것이 필요할수 있습니다.
이러한 문제들로인한 요구사항이 있다면, 외부에 공개되지 않은 내부 PowerShell Repository를 생성하여 서비스할 수 있습니다.
내부 PowerShell Repository는 크게 아래와 같은 2가지 형태로 구성/제공 할 수 있습니다.
1. SMB(공유폴더)를 이용하여 Repository 서비스
2. IIS를 이용하여 Repository 서비스
SMB의 경우 여러 보안상의 검토사항이 필요하기때문에 IIS를 통한 PowerShell Repository 서비스를 제공하는 방법을 알아보겠습니다.
- SMB를 통한 서비스의 경우 규모가 작은곳에서 간단히 서비스 하기에는 유용합니다. 구성도 간단하고요.
사전준비
1. OS: Windows Server 2016 (2008R2 이상가능)
2. .NET Framework 4.5 이상
3. 인터넷 연결 가능
설치방법
1. IIS 설치
IIS를 통해 PowreShell Repository를 구성하여 서비스할 예정이므로, 아래의 명령어를 통해 IIS의 구성요소를 설치합니다.
PS C:\> Install-WindowsFeature -Name Web-Server,Web-Default-Doc,Web-Static-Content,Web-Log-Libraries,Web-Stat-Compression,Web-Filtering,Web-Asp-Net45,Web-ISAPI-Filter,Web-ISAPI-Ext -IncludeManagementTools -Verbose
상기 설치를 완료하고 명령어를 통해 확인해보면 아래와 같은 역할/기능이 설치되었음을 알 수 있습니다.
PS C:\> Get-WindowsFeature -Name "web-*"
Display Name Name Install State
------------ ---- -------------
[ ] 웹 응용 프로그램 프록시 Web-Application-Proxy Available
[X] 웹 서버(IIS) Web-Server Installed
[X] 웹 서버 Web-WebServer Installed
[X] 보안 Web-Security Installed
[X] 요청 필터링 Web-Filtering Installed
[ ] IIS 클라이언트 인증서 매핑 인증 Web-Cert-Auth Available
[ ] IP 및 도메인 제한 Web-IP-Security Available
[ ] URL 권한 부여 Web-Url-Auth Available
[ ] Windows 인증 Web-Windows-Auth Available
[ ] 기본 인증 Web-Basic-Auth Available
[ ] 다이제스트 인증 Web-Digest-Auth Available
[ ] 중앙 SSL 인증서 지원 Web-CertProvider Available
[ ] 클라이언트 인증서 매핑 인증 Web-Client-Auth Available
[X] 상태 및 진단 Web-Health Installed
[X] HTTP 로깅 Web-Http-Logging Installed
[ ] ODBC 로깅 Web-ODBC-Logging Available
[X] 로깅 도구 Web-Log-Libraries Installed
[ ] 사용자 지정 로깅 Web-Custom-Logging Available
[ ] 요청 모니터 Web-Request-Monitor Available
[ ] 추적 Web-Http-Tracing Available
[X] 성능 Web-Performance Installed
[X] 정적 콘텐츠 압축 Web-Stat-Compression Installed
[ ] 동적 콘텐츠 압축 Web-Dyn-Compression Available
[X] 일반적인 HTTP 기능 Web-Common-Http Installed
[X] HTTP 오류 Web-Http-Errors Installed
[X] 기본 문서 Web-Default-Doc Installed
[X] 디렉터리 검색 Web-Dir-Browsing Installed
[X] 정적 콘텐츠 Web-Static-Content Installed
[ ] HTTP 리디렉션 Web-Http-Redirect Available
[ ] WebDAV 게시 Web-DAV-Publishing Available
[X] 응용 프로그램 개발 Web-App-Dev Installed
[ ] .NET 확장성 3.5 Web-Net-Ext Available
[X] .NET 확장성 4.6 Web-Net-Ext45 Installed
[ ] ASP Web-ASP Available
[ ] ASP.NET 3.5 Web-Asp-Net Available
[X] ASP.NET 4.6 Web-Asp-Net45 Installed
[ ] CGI Web-CGI Available
[X] ISAPI 필터 Web-ISAPI-Filter Installed
[X] ISAPI 확장 Web-ISAPI-Ext Installed
[ ] SSI(Server Side Include) Web-Includes Available
[ ] WebSocket 프로토콜 Web-WebSockets Available
[ ] 응용 프로그램 초기화 Web-AppInit Available
[ ] FTP 서버 Web-Ftp-Server Available
[ ] FTP 서비스 Web-Ftp-Service Available
[ ] FTP 확장성 Web-Ftp-Ext Available
[X] 관리 도구 Web-Mgmt-Tools Installed
[X] IIS 관리 콘솔 Web-Mgmt-Console Installed
[ ] IIS 6 관리 호환성 Web-Mgmt-Compat Available
[ ] IIS 6 메타베이스 호환성 Web-Metabase Available
[ ] IIS 6 WMI 호환성 Web-WMI Available
[ ] IIS 6 관리 콘솔 Web-Lgcy-Mgmt-Console Available
[ ] IIS 6 스크립팅 도구 Web-Lgcy-Scripting Available
[ ] IIS 관리 스크립트 및 도구 Web-Scripting-Tools Available
[ ] 관리 서비스 Web-Mgmt-Service Available
[ ] IIS 호스팅 가능한 웹 코어 Web-WHC Available
3. NuGet Server Web Application 다운로드
첨부된 파일을 다운로드 받아 아래의 경로로 복사합니다.
여기서는 생성할 웹사이트명인 'PSRepo.delmaster.net' 폴더를 아래와 같은 구조로 생성하고 다운받은 파일을 넣었습니다.
4. 퍼미션 설정
압축을 푼 파일에 대해 '우클릭' > '속성' 을 눌러 아래와 같이 '편집' 버튼을 누른 후 새롭게 열리는 창에서 '추가' 버튼을 클릭합니다.
'위치' 를 눌러 도메인이 아닌 로컬 컴퓨터를 선택해줍니다. 아래 이미지의 PSREPO는 테스트서버의 호스트명이므로 당연히 컴퓨터 마다 다릅니다.
이후, '2번 IIS 구성' 단계에서 확인했던 '응용프로그램풀' 이름을 이용하여 추가하고, 뒤에 IUSR도 같이 입력하여 다음과 같은 형태로 추가해줍니다. 'IIS APPPOOL\PSREPO.DELMASTER.NET; IUSR'
(다른이름으로 생성하였다면 그 이름을 적어줍니다.)
만약 이름을 다시 확인해야할 필요가 있으면 아래와 같이 확인 가능합니다.('더보기'클릭)
추가가 완료되면 아래와 같이 확인되며, 기본 선택된 '읽기 및 실행', '폴더 내용 보기', '읽기' 권한만 있으면 됩니다.
5. 실제 호스팅에 사용될 응용 프로그램 추가
생성한 웹사이트를 우클릭하여 '응용 프로그램 추가' 를 클릭합니다.
이후 아래와 같이 입력/선택해줍니다.
추가가 완료되면 아래와 같은 구조가 만들어집니다.
6. 서비스 확인
생성한 웹사이트 하위에 만들어진 'repo'를 선택한 뒤, 오른쪽 응용프로그램 찾아보기(PSRepo.delmaster.net on *:80(http)찾아보기) 를 통해 웹브라우저를 통해 사이트를 확인해봅니다.
여기까지 잘 구성되었으면 아래와같은 사이트가 확인되며, 'here' 링크를 클릭하면 배포 가능한 목록이 나옵니다.
'here' 아래에 있는 'Repository URLs'의 URL은 이후에 사용되니 기억해두면 좋습니다.
'here'를 클릭했을때 현재 PSRepository에서 제공되는 항목들이 나타납니다.
아직 Publish한 항목이 없으므로 빈 화면으로 나오는게 정상입니다.
7. 모듈/패키지 배포 구성
생성한 Repository에 사용자에게 제공할 모듈/패키지를 등록할 수 있도록 구성합니다.
먼저 아래와 그림과같이 응용프로그램 설정을 더블클릭합니다.
여러 설정들이 있는데 'apiKey'의 경우 구성한 Repository에 모듈/패키지를 등록할때 사용할 '암호' 라고 생각하면 됩니다. 해당 PSRepository의 관리자만 알고 있을 암호를 입력합니다. 권장되지는 않지만 만약 암호없이 누구나 업로드할 수 있도록 구성하려면 'requireApiKey'의 값을 'false'로 변경해주면 됩니다.
상기 작업이 완료되면 Powershell 창을 열어 아래와 같이 입력하여 패키지 제공자를 추가해줍니다.
Install-PackageProvider -Name NuGet -Verbose
Get-PackageProvider
이후, 아래의 내용을 ISE에서 입력하여 현재 컴퓨터의 Repository 리스트에 생성한 Repository 추가 작업을 진행합니다.
'Name' 부분에 입력한 'PSRepo' 가 우리가 IIS에 생성한 Repository를 인식할 이름이 됩니다.
8. 모듈 배포
배포할 모듈을 PSGallery에서 다운로드 받아 현재 컴퓨터에 설치 합니다.(여기서는 7Zip4PowerShell을 예제로 진행합니다.)
Install-Module -Name 7Zip4Powershell -Verbose
다운받은 '7Zip4PowerShell' 모듈을 우리가 생성한 Repository(PSRepo)에 배포 합니다.
Publish-Module -Name 7Zip4PowerShell -Repository PSRepo -NuGetApiKey delmaster.net -Verbose
최초 실행일때 아래와 같은 알람이 발생될 수 있으며, 해당 알람이 발생되면 'Y'를 눌러 해당 파일을 설치해주어야합니다.
상기 배포 작업이 완료된 후, 아래의 경로로 가보면 우리가 배포한 '7Zip4PowerShell' 이라는 이름의 폴더가 생성된것을 확인할 수 있습니다.
이 폴더 안으로 들어가면 .nupkg 확장자를 가진 NuGet 패키지가 보입니다.
또한, 웹브라우저에서 확인해보면 배포한 모듈명이 노출되는것을 확인할 수 있으며
PowerShell에서 아래의 명령을 통해 다운로드 설치가 가능함을 확인할수도있습니다.
9. 다른 서버(클라이언트)에서 생성한 Repository를 이용하여 모듈 설치
Repository를 구성한 서버가 아닌 다른 서버에 우리가 구성한 Repository를 추가하여, 조금전 배포한 7Zip4PowerShell을 설치해보겠습니다.
먼저 아래와 같이 NuGet 공급자를 설치해줍니다.
아래와 같이 Repository를 추가해줍니다.
추가한 Repository를 확인해보고, 배포된 7Zip4PowerShell을 설치해봅니다.
Get-PSRepository
Find-Module -Repository PSRepo
Install-Module -Name 7Zip4PowerShell -Repository PSRepo -Verbose
이상 PowerShell Repository를 생성하고, 생성된 Repository에 모듈을 배포하여 다른 서버에서 모듈을 설치하는 과정을 알아보았습니다.
'PowerShell' 카테고리의 다른 글
RDCMan 2.7 도메인 컴퓨터 원격데스크톱 연결 한방에 등록하기 (0) | 2016.05.03 |
---|---|
PowerShell 도메인에 가입된 컴퓨터 정보확인 (0) | 2016.04.26 |
PowerShell 도메인의 모든 컴퓨터에 GPUpdate 즉시 실행 (0) | 2016.04.20 |
PowerShell 원격데스크톱 포트 변경 (0) | 2016.04.20 |
PowerShell 호스트명 확인 (0) | 2016.04.20 |
PowerShell을 이용한 정책 확인 및 수정 (0) | 2016.03.30 |
PowerShell 조건문 Switch (0) | 2016.03.02 |
원격 Powershell 실행 (0) | 2016.03.02 |