728x90
반응형

서버 자원 관리 방법에 대한 용어에 대해  알아 보겠습니다. 

클라우드 환경에서 자주 접하는 용어로 ,클라우드 

스케일 업(Sacle-Up) ? 

스케일 업이란 동일 서버의 용량을 증설 하는 목적에 있습니다. 

서버 스펙 업그레이드라고 볼수 있다.

기존 8G 메모리, 1T 하드디스크로 서버가 구성되었다고 한다면 메모리: 8G-> 16G, 하드디스크 1T-> 10T 로 하드웨어 사양을 업그레이드 하는것을 스케일 업이라고하며 ,서버의 사양을 높이는 것이기 때문에 수직 스케일링(vertical scaling) 이라고도 한다.

scale-up

 

스케일 아웃(Scale-Out) ? 

서버의 자원 사용량이 부족하여 비슷한 사양의 서버를 추가하는 작업을 말한다.

하나의 장비에서 서비스를 처리함에 있어 한계에 부딪힐 경우 비슷한 스펙의 서버를 추가함으로 서버의 부하를 분산하는데 목적이 있다.

 

scale-out

스케일 인(Scale-In) ?

스케일 아웃과 반대되는  개념으로서 스케일 인 작업은 서버 용량 부족으로 늘렸던 자원을 다시 회수 하는 작업을 의미한다. 서비스 사용량이 줄어 늘려놓았던 불필요한 서버 자원을 해제 하는 작업을 의미한다. 

scale-in

오토스케일(Auto-Scale)?

서비스 사용량에 따라서 스케일 인/ 스케일 아웃 작업을 알아서 자동으로 해주는 작업을 말합니다. 

 

728x90
반응형

'IT지식' 카테고리의 다른 글

[IT지식] REST FUL 이란?  (0) 2022.06.04
728x90
반응형

이번글에서는 STS(eclipse IDE) 개발환경에서 gitlab 에서 만든 프로젝트와 소스 연동하는 방법에 대해 알아보겠습니다. 

 

Git Repository 주소 복사 

  • gitlab 프로젝트에서 clone 버튼을 눌러서 주소를 복사합니다. 

 

STS 프로젝트 git repository 연동 

  1. 오른쪽 상단 git 버튼을 눌러서 Git Repositoryies 메뉴로 들어갑니다.
  2. Clone a Git repository 버튼을 누릅니다. 
  3. gitlab 에서 주소를 복사하셨다면 빨간 박스 이외 값들은 자동으로 채워지게 됩니다. 
  4. 프로 젝트 계정의 유저와 비밀번호를 누른 후 Next 버튼을 클릭합니다. 

gitlab repository 정보 입력

  • 완료 버튼을 누르면 gitlab 의 레파지토리가 STS 와의 연동이 활성화 됩니다. 

STS 프로젝트 소스 연동 

  • Team ->Share Project ->repository (book)선택
  • Team->Add to Index
  • Team->commit

 

아래 그림을 보며 천천히 따라가 보세요 금세 연동이 가능 합니다. 

프로젝트  우 클릭후 Team->Share Project 버튼을 클릭합니다. 

등록한 repository 를 선택후 완료 버튼을 클릭합니다. 

 

share project 선택
repository 선택

프로젝트로 다시 돌아오면 ? 표시로 바뀌어 있습니다.

프로젝트 우클릭후 Team->Add to Index 버튼을 클릭합니다.

이후 프로젝트 우클릭후 Commit 버튼 클릭하면 gitlab 저장소에 소스가 업로드 된다. 

 

gitlab 프로젝트 소스 커밋 확인 

  • gitlab 에 접속 해서 프로젝트 확인시 소스가 업로드 된것을 확인할수 있다. 

 

 

728x90
반응형
728x90
반응형

 

 

Gitlab 사용시 자주 사용하는 다양한 명령어 사용법에 대해 작성한 글입니다. 

 

Gitlab 버전 정보 확인

gitlab-rake gitlab:env:info

gitlab 서비스 상태 확인 

gitlab-ctl status
root@ubuntu2004:/var/log# gitlab-ctl status
run: alertmanager: (pid 1473216) 7764s; run: log: (pid 1440782) 14293s
run: gitaly: (pid 1442283) 14000s; run: log: (pid 1438105) 14970s
run: gitlab-exporter: (pid 1473228) 7764s; run: log: (pid 1440657) 14312s
run: gitlab-kas: (pid 1473230) 7764s; run: log: (pid 1438363) 14948s
run: gitlab-workhorse: (pid 1473241) 7763s; run: log: (pid 1438889) 14659s
run: grafana: (pid 1473251) 7763s; run: log: (pid 1441383) 14201s
run: logrotate: (pid 1493932) 562s; run: log: (pid 1438049) 14982s
run: nginx: (pid 1473268) 7762s; run: log: (pid 1438932) 14648s
run: node-exporter: (pid 1473276) 7762s; run: log: (pid 1440636) 14315s
run: postgres-exporter: (pid 1473282) 7761s; run: log: (pid 1440816) 14287s
run: postgresql: (pid 1442385) 13995s; run: log: (pid 1438227) 14959s
run: prometheus: (pid 1473290) 7761s; run: log: (pid 1440757) 14298s
run: puma: (pid 1473300) 7760s; run: log: (pid 1438854) 14671s
run: redis: (pid 1442415) 13994s; run: log: (pid 1438068) 14976s
run: redis-exporter: (pid 1473306) 7760s; run: log: (pid 1440682) 14303s
run: sidekiq: (pid 1473315) 7759s; run: log: (pid 1438872) 14665s

Gitlab Log 확인

gitlab 사용시 로그 확인 방법에 대해 알아봅니다. 

gitlab 웹 로그 확인 

/var/log/gitlab/gitlab-rails/production.log  에 로그가 남습니다. tail 로 실시간 로그를 확인 할수 있습니다. 

tail -f  /var/log/gitlab/gitlab-rails/production.log

 

root@ubuntu2004:~# tail -f  /var/log/gitlab/gitlab-rails/production.log
Completed 200 OK in 34ms (Views: 0.5ms | ActiveRecord: 0.0ms | Elasticsearch: 0.0ms | Allocations: 814)
Started GET "/api/v4/geo/proxy" for 127.0.0.1 at 2022-04-16 12:36:37 +0900
Started GET "/-/metrics" for 127.0.0.1 at 2022-04-16 12:36:44 +0900
Processing by MetricsController#index as HTML
Completed 200 OK in 33ms (Views: 0.4ms | ActiveRecord: 0.0ms | Elasticsearch: 0.0ms | Allocations: 814)
Started GET "/api/v4/geo/proxy" for 127.0.0.1 at 2022-04-16 12:36:47 +0900
Started GET "/api/v4/geo/proxy" for 127.0.0.1 at 2022-04-16 12:36:57 +0900
Started GET "/-/metrics" for 127.0.0.1 at 2022-04-16 12:36:59 +0900
Processing by MetricsController#index as HTML
Completed 200 OK in 32ms (Views: 0.4ms | ActiveRecord: 0.0ms | Elasticsearch: 0.0ms | Allocations: 814)
Started GET "/api/v4/geo/proxy" for 127.0.0.1 at 2022-04-16 12:37:07 +0900
Started GET "/-/metrics" for 127.0.0.1 at 2022-04-16 12:37:14 +0900
Processing by MetricsController#index as HTML
Completed 200 OK in 36ms (Views: 0.5ms | ActiveRecord: 0.0ms | Elasticsearch: 0.0ms | Allocations: 814)

 

gitlab 서비스 로그 확인 

gitlab-ctl tail 명령을 통해  gitlab 서버에서 남기는 각종 로그를 확인할수 있습니다. 

  • gitlab-ctl tail [service 명]
  • 서비스명은 gitlab-ctl status 로 확인되는 서비스명입니다. 
gitlab-ctl tail
gitlab-ctl tail postgresql
gitlab-ctl tail ngix

gitlab-ctl tail

728x90
반응형

'04.DevTools > Git&GitLab' 카테고리의 다른 글

[GitLab] 프로젝트 생성 및 관리  (0) 2022.04.17
[GitLab] GitLab 설치 방법 및 환경설정  (0) 2022.04.16
728x90
반응형

깃랩의 기본 사용 방법에 대해 알아보겠습니다. 

GitLab 그룹 만들기 

  • + 버튼 클릭후 New group 버튼을 클릭 합니다. 

  • Create group 을 선택 합니다. 

group 생성 화면이 나오면 group name 을  작성 합니다. 

그룹 접근 권한을 설정 설정합니다. 

Visibility Level 

  • Private :프로젝트 그룹 권한이 있는 유저만 접근 가능 합니다. 
  • Internal:Gilab 사용자 모두 접근 가능 합니다. 
  • Public : 접속 계정이 없어도 모두 사용 가능 합니다. 

Inviate another member

  • 작업을 함께할 유처를 초대합니다. 

 

위와 같이 기본 설정을 마치면 아래 화면 처럼 devOpsmini 로 그룹 이 생성 됩니다. 

gitlab group 생성 완료

GitLab User 만들기 

1.일반 사용자 계정 생성

gitlab user 유저를 등록 하기 위해서는 회원? 가입 철차가 필요 합니다. 

Register now 버튼을 누른후 사용자 계정을 만듭니다. 

gitlab 유저 계정 생성

2.Admin 계정에서 일반 사용자 접속 허용 

gitlab 계정에 등록만 해서는 일반유저가 gitlab 에 접속 할수 없습니다. 

Admin 계정에서 유저 계정에 대한 접속을 승인해주어야 합니다. 

gitlab Memu 버튼 클릭후 Admin 계정에서 일반 유저 생성 계정 접속을 허용해 줍니다. 

  • Admin(root)계정 접속 
  • Menu ->Admin 클릭 
  • Users 매뉴 클릭 후 등록된 사용자 접속 허용 처리 

gitlab admin 설정
접속 승인 화면
접속 승인 완료 처리 화면

3.일반 계정 재 접속 진행 

admin(root) 계정에 일반 유저 접속 허용 승인처리가 완료 되었다면 

일제 일반 유저 계정 으로 접속이 가능 합니다. 

 

 

4.Admin 계정에서 유저 계정생성 

User 접속 승인 화면을 유심히 보셨다면 파란색 New user 버튼을 보셨을 겁니다. 

해당 버튼을 클릭해서 유저를 만들수  있습니다. 

신규 생성된 유저의 비밀번호는 초기 비밀번호로 셋팅이 되고 

최초 접속시 사용할수 있습니다. 

추후 변경 하면 됩니다. 

 

GitLab 프로젝트 만들기 

테스할 목적으로 프로젝트를 만들어 보겠습니다. 

저는 게시판 개발 목적의 프로젝트를 만들어 보겠습니다. 

 

  • Create project ->Create blank project 

  • 프로젝트 명을 입력하고 프로젝트 접근 허용 범위를 설정 합니다. 

gitlab create project

sts-board 라는  이름으로 신규 프로젝트가 생성이 되었습니다. 

이제 개발하고 소스를 관리할 저장소가 생겼습니다. 

clone 버튼을 눌러서 git 레파지토리를 확인하세요 

추후 이클립스와 같은 개발 환경에서 git repository 와 연동 하시면 됩니다. 

728x90
반응형

'04.DevTools > Git&GitLab' 카테고리의 다른 글

[GitLab] Gitlab 명령어 모음  (0) 2022.04.17
[GitLab] GitLab 설치 방법 및 환경설정  (0) 2022.04.16
728x90
반응형

STS 란 ?

STS 란 Spring Tool Suit 약어 이며 , Spring FrameWork 을 지원하기 위해 최적화 된 IDE 개발 툴입니다. 
기존에 이클립스(Eclipse) 기반 환경에서 웹서비스를 개발 하기 위해서는 개발에 필요한 여러가지 필수 플러그인을 별도로 설치해야 했습니다. 
STS 는 Eclipse 환경에서는 기본 설치 되지 않은 내장 톰켓 서버나 , 빌드툴( gradle,maven) ,git 등이 기본으로 플러그인에 포함되어있어 보다 쉽고 간편하게 웹서비스를 개발 할수 있도록 도와주는 고마운 툴입니다. 

 

 

STS 다운로드

필자는 우분투 환경이라 리눅스 버전을 다운로드 받아 설치 하는 방법에 대해 소개 하겠습니다. 

  1. spring.io 사이트에서 리눅스 버전을 다운로드 받습니다. 
  2. 다운로드 받은 파일을 압축 해제 합니다. 
tar xvzf spring-tool-suite-4-4.14.0.RELEASE-e4.23.0-linux.gtk.x86_64.tar.gz​


https://spring.io/tools

 

Spring Tools 4 is the next generation of Spring tooling

Largely rebuilt from scratch, Spring Tools 4 provides world-class support for developing Spring-based enterprise applications, whether you prefer Eclipse, Visual Studio Code, or Theia IDE.

spring.io

STS download

STS 실행 

 

  • ./SpringToolSuite4 실행

dev@ubuntu2004:~/STS/sts-4.14.0.RELEASE$ ll
합계 1328
drwxr-xr-x  9 dev dev   4096  3월 14 01:20 ./
drwxrwxr-x  3 dev dev   4096  4월 16 22:32 ../
-rw-r--r--  1 dev dev     61  3월  9 01:22 .eclipseproduct
drwxr-xr-x  2 dev dev   4096  3월 14 01:18 META-INF/
-rwxr-xr-x  1 dev dev  86328  3월 14 01:16 SpringToolSuite4*
-rw-r--r--  1 dev dev    681  3월 14 01:20 SpringToolSuite4.ini
-rw-r--r--  1 dev dev 160278  3월 14 01:20 artifacts.xml
drwxr-xr-x  5 dev dev   4096  3월 14 01:18 configuration/
drwxr-xr-x  2 dev dev   4096  3월 14 01:18 dropins/
drwxr-xr-x 72 dev dev  12288  3월 14 01:20 features/
-rwxr-xr-x  1 dev dev 136129  3월 14 01:16 icon.xpm*
-rw-r--r--  1 dev dev  11522  3월 14 01:12 license.txt
-rw-r--r--  1 dev dev 845709  3월 14 01:20 open-source-licenses.txt
drwxr-xr-x  5 dev dev   4096  3월 14 01:19 p2/
drwxr-xr-x 24 dev dev  53248  3월 14 01:20 plugins/
drwxr-xr-x  2 dev dev   4096  3월 14 01:18 readme/

 

 

728x90
반응형
728x90
반응형

GitLab 설치 버전 확인 

Ubuntu 20.04.4 LTS 버전에서 에서 GitLab 설치하는 방법에 대해 알아보겠습니다. 

설치는 우분투 공식 홈페이지 자료를 이용해 설치 하는 내용을 담아 보겠습니다. 

우분투 GiltLab 설치 가이드 (공식)

 

GitLab 는 EE(Enterprise Edition)  버전과 CE(Community Edition) 버전은로 나뉘는데 EE 버전은 30일 무료 사용후 유료 정책으로 전환 된다고 합니다. 

 

다만 30일 이후 유료로 전환 하지 않으면 CE 버전으로 자동 전환 된다고 합니다. 

그래서 저는 그냥 EE 버전을 사용해서 30일 이후 CE 버전으로 변경되는지 확인해 보겠습니다. 

 

GitLab  라이센스 쟁책

  • GitLab CE : Core (무료)
  • GitLab EE : Core ->STARTER ->  PREMIUM ->  ULTIMATE

GitLab-ee 설치

GitLab-ee 버전 설치하는 방법에 대해 자세히 알아보겠습니다. 

잘따라오시면 쉽게 설치가 가능 합니다. 

1.GitLab dependencies 팩키지 설치 

sudo apt-get update
sudo apt-get upgrade -y

sudo apt-get install -y curl openssh-server ca-certificates tzdata perl

sudo apt-get install -y postfix

 

2.GitLab 팩키지 레파지토리 추가 및 설치

  • gitlab 레파지토리 추가
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.deb.sh | sudo bash
  • gitlab  설치
sudo apt-get install gitlab-ee

3.GitLab 환경파일 수정 (gitlab.rb)

/etc/gitlab/gitlab.rb 파일을 열어서 external_url 을 변경 합니다. 

해당 url 은 웹에서 접속할 URL 설정입니다. 

  • external_url 'http://116.121.154.196:6060'

4.GitLab 환경 파일 적용 및 상태 확인 

gitlab-ctl reconfigure 명령을 통해 환경파일을 재구성 하고 Gitlab 을 재시작 합니다. 

/etc/gitlab/gitlab.rb 파일이 변경 되었다면 gitlab-ctl reconfigure 명령을 수행해야만 적용이 됩니다. 

  • gitlab-ctl reconfigure :gitlab 변경 파일 재구성및 재기동 
  • gitlab-ctl stop :gitlab 중지
  • gitlab-ctl start :gitlab 시작
  • gitlab-ctl restart :gitlab 재시작 

gitlab-ctl status 명령으로 현재 gitlab 상태를 확인 합니다. 

웹서버 및 database 가 설치 되었습니다. 

gitlab 웹 접속이 안될때는 항상 상태를 먼저 확인해보세요 

gitlab 상태 확인

 

5.GitLab 접속

최초 설치 후 접속시 아래 initial_root_password 라는 파일에 패스워드가 작성됩니다.

  • root 접속 패스워드: /etc/gitlab/initial_root_password

external_url 에 설정했던 URL로 접속 합니다. 

접속은 root/[initial_root_password]파일 비밀번호 입니다. 

Ubuntu Gitlab connect

정상적으로 설치가 되고 접속이 된다면 이제 gitlab 을 사용할 준비가 끝났습니다. 

gitlab 접속화면

6.Gitlab 비밀번호 변경 

initial_root_password 를 기억하고 관리 하는 사람은 없겠죠?

마지막으로 root 비밀번호를 변경 하겠습니다. 

우측 상단 계정 관리 버튼을 눌러서 Edit Profile을 설정해서 비밀번호를 변경 합니다. 

관리계정 버튼 클릭 ->Edit Profile -> Password -> 비밀번호 변경 

 

7.GitLab 삭제 

Gitlab 재설치를 혹은 삭제를 하고자 할경우 사용하세요! 

sudo gitlab-ctl cleanse
sudo gitlab-ctl uninstall
sudo apt remove gitlab-ee
sudo apt purge gitlab-ee


rm -rf  /opt/gitlab 
rm -rf  /var/opt/gitlab 
rm -rf  /etc/gitlab 
rm -rf  /var/log/gitlab

 

 

728x90
반응형

'04.DevTools > Git&GitLab' 카테고리의 다른 글

[GitLab] Gitlab 명령어 모음  (0) 2022.04.17
[GitLab] 프로젝트 생성 및 관리  (0) 2022.04.17
728x90
반응형

과감하게 집에있는 오래된 윈도우 데스크탑을 밀어버리고 우분투로 설치 했습니다. 

윈도우만 사용하다가 리눅스로 사용하려니 필요한 유틸이 많습니다. 

 

이번 글에서는 우분투에서 gif 로 움짤을 만드는 프로그램에 대한  설치 및 활용 방법에 대해 알아보겠습니다. 

 

우분투 애니매이션(gif,움잘) Peek 설치 

peek 를 설치 하겠습니다. 

우분투 에서는 ctl+alt +t 키가 콘솔 단축 키입니다. 

## peek 레파지토리 추가 
sudo add-apt-repository ppa:peek-developers/stable
sudo apt update
#peek 설치 
sudo apt install peek -y

 

Peek 실행 

window 키 를 눌러서 peek 입력후  검색 실행 합니다. 

 

 

우분투 peek
peek 실행 화면

peek 을 이용한 녹화 

Jmeter 테스트 진행 사항을 녹화해보았습니다. 

Record as GIF버튼을 누르면  녹화가 실행 됩니다. 

녹화파일은 videos 폴더에서 확인 하세요 

장문에 글로 설명하는 것보다 녹화해서 내용을 이해시키는게 보다 효과적인 방법일수도 있겠습니다. 

 

peek 을 이용한 gif 애니 메이션 녹화

728x90
반응형
728x90
반응형

어플리케이션 부하 테스팅 툴의 한 종류인 Jmeter 사용법에 대해 설명합니다.

해당 자료는 우분투 20.04 LTS 버전 환경 기준으로 Jmeter 사용법에 대해  작성한 글입니다. 

Jmeter 란?

어플리케이션에 대한 부하 테스트를 진행함으로서 성능을 분석하고 측정하기 위한 부하 툴이디

부하를 줄수 있는 방법에는 대표 적으로 아래의 종류 가 있다 . 

  1. Jdbc DataBase 연결 
  2. FTP 
  3. LDAP
  4. Web Service
  5. JMS
  6. HTTP
  7. TCP

JMeter  다운로드

아래의 경로에서 Jmeter 를 다운로드 받습니다. 

2022.04 월 기준으로 현재 5.4.3 버전 까지 릴리즈되었습니다. 

Java 버전 이상에서 구동 되는 툴입니다. 

https://jmeter.apache.org/download_jmeter.cgi

 

Apache JMeter - Download Apache JMeter

Download Apache JMeter We recommend you use a mirror to download our release builds, but you must verify the integrity of the downloaded files using signatures downloaded from our main distribution directories. Recent releases (48 hours) may not yet be ava

jmeter.apache.org

 

apache JMeter 다운로드

JDK 8 설치 

  • open jdk8 install  
sudo apt install openjdk-8-jdk
  • 설치된 java 버전 확인
jmeter@ubuntu2004:~$ java -version
openjdk version "1.8.0_312"
OpenJDK Runtime Environment (build 1.8.0_312-8u312-b07-0ubuntu1~20.04-b07)
OpenJDK 64-Bit Server VM (build 25.312-b07, mixed mode)
jmeter@ubuntu2004:~$ javac -version
javac 1.8.0_312

 

JMeter 실행 

  1. 다운로드 바이너리 바일 압축 해제 
  2. jemeter.sh 실행 
jmeter@ubuntu2004:~$ tar xvzf apache-jmeter-5.4.3.tgz 
jmeter@ubuntu2004:~$ cd apache-jmeter-5.4.3/bin
jmeter@ubuntu2004:~/apache-jmeter-5.4.3/bin$ sh jmeter.sh 

JMeter  부하 테스트

JDBC 로 오라클 Database 접속 하여 DML 부하 테스트 하는 방법에 대해 알아보겠습니다. 

 

Thread Group 생성

File ->New  버튼을 눌러 테스트 계획을 만듭니다. 

Test Plan 우클릭 버튼을 눌러 쓰레드 그룹을 만듭니다. 

Jdbc Connection Configuration 생성 

설정 내용

Name :커넥션  명을 작성 한다. 

  • Variable Name for  create pool : 실제 테스트시 사용할 Connection pool 명이다 . 
  • Database URL : 오라클 접속 URL jdbc:oracle:thin:@116.121.154.196:1521:ORCLCDB
  • JDBC Driver Class :오라클 jdbc 드라이버 클래스 명을 선택 한다. 
  • UserName : 접속할 테스트 계정이다 . 
  • Password :접속할 테스트 계정의 비밀번호 이다. 

 

 

테스트 결과 Report  생성 

Test Plan ->Add ->Listener 선택후 확인하고자 하는 결과 리포팅 추가 작업 

  • ViewResult Tree 추가 
  • Summary Report 추가 

Test Plan 작성 내용 정리

  1. Test Plan 생성 
  2. Thread Group 생성
    • 오라클 connection 생성 
    • Jdbc 테스트 쿼리 작성 
  3. 테스트 결과 리포트 추가
    1. ViewResult Tree 추가(3-1 그림 참고)
    2. Summary Report 추가 (3-2 그림 참고)

 

Jmeter Test Plan
3-1.Jmeter Summary Report

 

3-2.Jmeter Result Tree

728x90
반응형
728x90
반응형

Python 이미지

파이썬 가상환경 왜 쓰지? 

파이썬은 현재 [2022.04.12] 기준으로 3.10 버전 까지 릴리즈가 되었습니다. 

파이썬 릴리즈 버전

 

버전 마다 파이썬 문법이 달라서 환경 구성을 별도로 해야 하는 경우가 종종 발생합니다. 

이럴때 python 에서 제공하는 virtualenv(venv) 기능을 사용함으로서 버전 별로 개발 환경을 달리하여 구성 할수 있습니다. 

 

예를 들어 각각 아래와 같은 환경에서 프로젝트가 환경이 구성되고 개발 되어질수 있습니다. 

  • app1 : venv1(파이썬 2.7 버전  + Django3.x)
  • app2 : venv2(파이썬 3.7 버전 + Django4.x )

 

파이썬 버전과 Django 버전별로 사용하는 팩키지(라이브러리)간 의존성으로 인해  호환이 되지 않는 문제가 종종 발생한다. 이러한 문제를 서로다른 동일한 PC 에 가상환경을 만들어 개발함으로서 문제를 해결 할수 있다 . 

 

 

virtualenv VS venv 언떤게 맞는거야? 

둘다 가상환경을 만들수 있다는 점에서 동일 하지만 사용방법및 용도에 따라서 차이가 있습니다. 

virtualenv 는 별도로 패키지를 설치해야(pip install virtualenv) 사용 가능 하다. 

Python3 버전에서는 기본제공하는 라이브러리로 Python3 버전을 사용중이라면 venv 명령을 사용해 가상환경 구성이 가능합니다. 

 

가상환경 생성 방법

이제 본격적으로 가상환경 생성 방법에 대해 알아 보겠습니다. 

python -m venv [가상환경이름] 명령을 통해 생성 할 수 있다. 

 

가상 환경 생성

우선 가상환경을 구성할 루트 디렉토리(venv) 를 만듭니다. 

그리고 해당 디렉토리로 들어가서 가상환경을 만들어 줍니다. 

파이썬 2.7 환경에 의미로 py27 가상환경 이름을 주었습니다. 

$ mkdir venv
$ cd venv
$ python -m venv py27

가상환경 생성 확인

py27 이라는 이름으로 폴더가 생기고 파이썬 관련한 파일과 디렉토리가 생겼습니다. 

하지만 파이썬 2.7 버전을 설치를 원했는데 3.7 버전으로 생성이 되었습니다.

생성시 사용자 환경 파이썬 버전으로 가상 환경이 생성이 되어 그렇습니다.

* 필자의 환경은  centos7 에 default 파이썬 2.7 환경 구성이었으나 파이썬 3.7을 별도로 설치해 주었습니다.

리눅스환경에서 파이썬 설치는 아래 글을 참고 하세요

파이썬3.7 설치 

 

[testuser1@centos7:/home/testuser1/venv]$ tree py27 -L 2
py27
|-- bin
|   |-- activate
|   |-- activate.csh
|   |-- activate.fish
|   |-- easy_install
|   |-- easy_install-3.7
|   |-- pip
|   |-- pip3
|   |-- pip3.7
|   |-- python -> /bin/python
|   `-- python3 -> python
|-- include
|-- lib
|   `-- python3.7
|-- lib64 -> lib
`-- pyvenv.cfg

 

파이선 3.7 환경에서 파이썬2.7 가상환경 생성 

python3 버전에서는 venv 로 파이썬2.7 전을 만들수 없는 것 같습니다. virtualenv  팩키지를 설치해서 가상환경을 만들어 보겠습니다. 

  •  pip install virtualenv 로 패키지를 설치합니다. 
  • virtualenv py27 --python=python2.7

원하는 파이썬2.7 버전으로 생성되는것을 확인할수 있습니다. 

[testuser1@centos7:/home/testuser1/venv]$ tree -a py27/  -L 2
py27/
|-- .gitignore
|-- bin
|   |-- activate
|   |-- activate.csh
|   |-- activate.fish
|   |-- activate.nu
|   |-- activate.ps1
|   |-- activate_this.py
|   |-- deactivate.nu
|   |-- easy_install
|   |-- easy_install-2.7
|   |-- easy_install2
|   |-- easy_install2.7
|   |-- pip
|   |-- pip-2.7
|   |-- pip2
|   |-- pip2.7
|   |-- python
|   |-- python2 -> python
|   |-- python2.7 -> python
|   |-- wheel
|   |-- wheel-2.7
|   |-- wheel2
|   `-- wheel2.7
|-- include
|   `-- python2.7 -> /usr/include/python2.7
|-- lib
|   `-- python2.7
|-- lib64
|   `-- python2.7
`-- pyvenv.cfg

7 directories, 24 files

가상환경 진입

 py27/bin/activate 실행하면 가상한경에 진입 할수 있습니다.

  • . py27/bin/activate
  • python -V 명령을 통해 설치된 버전 확인 
  • pip list 명령을 통해 설치된 버전 확인 (pip 를 통해 파이썬에서 필요로 하는 팩키지를 설치할수 있습니다.)
(py27) [testuser1@centos7:/home/testuser1/venv]$ python -V
Python 2.7.5
(py27) [testuser1@centos7:/home/testuser1/venv]$ pip --version
pip 20.3.4 from /home/testuser1/venv/py27/lib/python2.7/site-packages/pip (python 2.7)
(py27) [testuser1@centos7:/home/testuser1/venv]$ pip list
DEPRECATION: Python 2.7 reached the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 is no longer maintained. pip 21.0 will drop support for Python 2.7 in January 2021. More details about Python 2 support in pip can be found at https://pip.pypa.io/en/latest/development/release-process/#python-2-support pip 21.0 will remove support for this functionality.
Package    Version
---------- -------
pip        20.3.4
setuptools 44.1.1
wheel      0.37.1

python2.7 환경에서 개발 할수 있는 환경을 만들어 졌습니다. 

 

가상환경  나오기 / 삭제 

Ctrl +D 가상환경에  빠져 나올수 있습니다. 

가상환경이 삭제는 그냥 지우시면 됩니다. (py27 ) 삭제 

728x90
반응형
728x90
반응형

파이썬 expect 스크립트 실행 

리눅스에서는 expect 스크립트 언어를 통해 ftp 나 ssh 로 접속 하여 업무를 자동화 할 수 있습니다. 

* expect
CLI 상호작용 자동화 프로그램의로 특정 명령을 수행후 정해진 응답을 기대하면서 다음 작업 처리를 대기하는 방식으로 

코드를 작성합니다. 

 

파이썬에서도 해당 언어와 마찬가지로 pexpect 라이브러리를 활용해 보다 다양한 업무를 자동화 할수 있습니다. 

Python 프로그램을 통해 리눅스 사용자 계정을 일괄 변경 하는 테스트를 코드를 공유 합니다. 

Python2.7 환경에서 테스트 되었습니다. 

 

패스워드 변경할 사용자 파일(UserList.txt )

$cat UserList.txt 
testuser1
testuser2
testuser3
testuser4
testuser5

Python 코드

#!/usr/bin/python
# -*- coding:utf-8 -*-

import sys
import pexpect  
import subprocess
import tarfile
import sys
import re
import os
import getopt
import traceback
import shutil
import sys
reload(sys)
PROMPT = ['\# ','>>> ','> ','\$ ', '\] ']

USER_LIST_FILE='UserList.txt'
ROOT_ID = 'root'

class PsshConn:

    def __init__(self , ip , id , passwd, timeout):
        self.ip = ip
        self.id = id
        self.passwd = passwd
        self.timeout = timeout

    def show(self):
        print "ip : %s " % self.ip
        print "id : %s  passwd : %s" % (self.id, self.passwd)

    def sshconn(self):
        ssh_newkey = 'Are you sure you want to continue connecting'
        conn = 'ssh %s@%s' % (self.id , self.ip)
        print "conn : " + conn
        child = pexpect.spawn(conn ,timeout=self.timeout)
        ret = child.expect([pexpect.TIMEOUT, ssh_newkey, '[P|p]assword: '] )

        if ret == 0:
            print '[-] Error Connecting : 0 '
            return
        if ret == 1:
            child.sendline('yes')
            ret = child.expect([pexpect.TIMEOUT, \
                '[P|p]assword:'])
            if ret == 0:
                print '[-] Error Connecting : 1'
                return
        child.sendline( self.passwd )
        child.expect(PROMPT)
        return child


def usage():
    print "user password change Test [options]  "
    print "-h : help"
    print "-u : User List "
    print "-i : SERVER IP "
    print "-P : Root Password "
    print "-p : User Password "
    print "ex:User List get) ./ChangePassword.py -i localhost -P test -u  "
    print "ex:Change passwd) ./changepassd.py  -i localhost -P test  -p test  "


def userList() :
    with open(USER_LIST_FILE) as f:
        lines = f.read().split()
    #for line in lines:
    #    print(line)
    return lines


def mkUserList():

    conn = PsshConn(IP_ADDRESS , ROOT_ID , ROOT_PASSWD, 60).sshconn()
    conn.sendline('export LANG=en_US.UTF-8')
    conn.expect(PROMPT)
    conn.sendline('grep /bin/bash /etc/passwd | cut -f1 -d: ')
    conn.expect(PROMPT)

    #print "RECOMAND :<< %s >>" % conn.before
    users = conn.before

    with open(USER_LIST_FILE+'_tmp','w') as wfile:
        wfile.writelines(users)
    wfile.close()
 
    #file line count
    lineCnt = len(open(USER_LIST_FILE+'_tmp','r').readlines())   
     
    with open(USER_LIST_FILE+'_tmp','r') as rfile:
        with open(USER_LIST_FILE,'w') as rwfile:
            for i, line in enumerate(rfile):
                if (i > 1) & (i < lineCnt - 1) :
                    print "User :%s" % line.replace("\n","")
                    rwfile.writelines(line)
        rwfile.close()
    rfile.close()                           
    os.remove(USER_LIST_FILE+'_tmp')
                
                    

    
if __name__=="__main__":

    try:
        opts, args = getopt.getopt(sys.argv[1:],"i:P:p:hu")

    except IOError as e:
        usage()
        print ("[-] Error : "  + e)
        sys.exit(2)


    for o, a in opts:
        if o == "-h":
            print "======= options ========"
            usage()
            sys.exit(0)
        elif o == "-i":
            IP_ADDRESS = a
            print 'IP: %s' % [ IP_ADDRESS ]      
        elif o == "-P":
            ROOT_PASSWD = a
            print 'ROOT_PASSWD : %s' % [ ROOT_PASSWD ]
        elif o == "-p":
            USER_PASSWD = a
            print 'USER_PASSWD : %s' % [ USER_PASSWD ]
        elif o == "-u":
            mkUserList()
            print '[User List Search]'    
            sys.exit(0)             

    try:
        print " ==== change password  ==== "

        try:
            ssh = PsshConn(IP_ADDRESS , ROOT_ID , ROOT_PASSWD,60).sshconn()
            ssh.sendline('cd ')
            ssh.sendline('export LANG=en_US.UTF-8')

            for user in userList():
                print "USER : %s" % user
                ssh.sendline('passwd ' + user )
                ssh.expect("password:")
                ssh.sendline(USER_PASSWD )
                ssh.expect("password:")
                ssh.sendline(USER_PASSWD )
                ssh.expect(PROMPT)
        except Exception ,e:
             print "[-] Error       : %s " % e

    except Exception, e:
        exc_type, exc_value, exc_traceback = sys.exc_info()
        print "[-] Error       : %s " % e
        print "[-] line number :  " , exc_traceback.tb_lineno

실행

  • UserList.txt 파일에 등록된 testuser1~testuser5 까지 test 패스워드로 일괄 변경 합니다. 
  • 변경된 패스워드로(test) 로 변경 되었는지 확인하기 위해 SSH 로 접속 테스트를 진행 합니다.

728x90
반응형

+ Recent posts