AttributeError: module 'tensorflow' has no attribute 'variable'


위의 에러가 나와서 현재 작업들을 진행 해봄



tensorflow 지우기


pip uninstall tensorflow


tensorflow 다시 설치하기


pip install tensorflow


설치중 


WARNING: You are using pip version 19.1.1, however version 19.2.3 is available.

You should consider upgrading via the 'python -m pip install --upgrade pip' command.


이게 떠서 다시 설치를 진행함



---------------------------------


문제는 keras와 tensorflow의 동일한 버전으로 구현이 안되는데 다시 설치하면 된다네요. 


저는 keras를 설치 안해서 그런것 같아요


pip install --upgrade pip setuptools wheel


pip install -I tensorflow


pip install -I keras


위와 같이 진행을 하고 있습니다...만


ERROR: astroid 2.2.5 requires typed-ast>=1.3.0; implementation_name == "cpython", which is not installed.


이게 나오고


Installing collected packages: gast, numpy, wheel, six, grpcio, werkzeug, setuptools, protobuf, absl-py, markdown, tensorboard, termcolor, h5py, keras-applications, wrapt, astor, google-pasta, tensorflow-estimator, keras-preprocessing, tensorflow


이게 나오고


ERROR: Operation cancelled by user


이렇게 나오네요....


  1. ㅇㅅㅇ 2020.01.13 16:16

    ㅇㅅㅇ??

qmail이 무엇인가?

큐메일은 기존의 sendmail 을 대체하는 메일 전송 에이전트( MTA )로써 보다 안정적이며 속도 향상을 가져다 줄 수 있습니다. 기존의 sendmail 에서 할 수 없었던 많은 기능이 포함되어 있습니다.

주요기능

- 무한정 도메인과 pop 메일 아이디를 발급 할 수 있습니다.

- 한 개의 시스템 계정생성으로 모든 버츄얼 도메인, pop 계정을 만들수 있습니다.

- 불필요한 유저 생성을 막을 수 있습니다. (보안적인 측면에 유리합니다.)

- 각 도메인마다 메일 계정, 메일링 리스트의 한계를 설정 할 수 있다.

- 웹인터페이스로 메일 추가, 삭제, 메일링 및 각 도메인에 대한 메일 관리가 가능합니다.

- 유저별 quota 설정이 가능합니다. 

- 각 도메인 관리자가 자기 도메인의 메일 계정 추가 삭제가 가능합니다.

- 가상 메일 없이도 도메인마다 똑같은 사용자 계정을 만들 수 있습니다.

위의 내용은 웹호스팅용 메일 시스템으로 아주 유리한 기능들이며 이밖에 다양한 기능들을 내포하고 있습니다.

필요한 프로그램 및 다운로드 사이트

qmail-1.03.tar.gz (http://cr.yp.to)

ucspi-tcp-0.88-man.tar.gz (http://cr.yp.to/ucspi-tcp/install.html)

daemontools-0.76-man.tar.gz (http://cr.yp.to/daemontools/install.html)

vpopmail-5.2.1.tar.gz (http://inter7.com/vpopmail)

qmailadmin-1.0.6.tar.gz (http://inter7.com/qmailadmin)

autorespond-2.0.2.tar.gz (http://inter7.com/qmailadmin)

ezmlm-0.53.tar.gz (http://www.ezmlm.org)

ezmlm-idx-0.40.tar.gz (http://www.ezmlm.org)

qmail-smtpd-auth-0.31.tar.gz (http://members.elysium.pl)

qmail-103.patch (http://cr.yp.to)

설치환경

버전 : CentOS 4.3

qmil 설치파일 다운로드 경로 : /root

( 1 ) 다운로드

qmail 설치에 필요한 파일들을 다운로드 합니다.

wget은 웹에서 자동적으로 파일을 받아오는데 사용되는 유틸리티이며 HTTP, HTTPS, FTP 프로토콜을 지원합니다.

① qmail-1.03.tar.gz 다운로드

[root@nextline ~]# wget http://cr.yp.to/software/qmail-1.03.tar.gz

 

② ucspi-tcp-0.88.tar.gz 다운로드

[root@nextline ~]# wget http://cr.yp.to/ucspi-tcp/ucspi-tcp-0.88.tar.gz

 

③ daemontools-0.76.tar.gz 다운로드

[root@nextline ~]# wget http://cr.yp.to/daemontools/daemontools-0.76.tar.gz

 

④ vpopmail-5.2.1.tar.gz 다운로드

[root@nextline ~]# wget http://www.inter7.com/vpopmail/vpopmail-5.2.1.tar.gz

 

⑤ qmailadmin-1.0.6.tar.gz 다운로드

[root@nextline ~]# wget http://www.inter7.com/qmailadmin/qmailadmin-1.0.6.tar.gz

 

⑥ autorespond-2.0.2.tar.gz 다운로드

[root@nextline ~]# wget http://www.inter7.com/devel/autorespond-2.0.2.tar.gz

 

⑦ ezmlm-0.53.tar.gz 다운로드

[root@nextline ~]# wget http://gd.tuwien.ac.at/infosys/mail/qmail/ezmlm-patches/ezmlm-0.53.tar.gz

 

⑧ ezmlm-idx-0.40.tar.gz 다운로드

[root@nextline ~]#wget http://gd.tuwien.ac.at/infosys/mail/qmail/ezmlm-patches/ezmlm-idx-0.40.tar.gz

 

⑨ qmail-smtpd-auth-0.31.tar.gz 다운로드

[root@nextline ~]# wget http://members.elysium.pl/brush/qmail-smtpd-auth/dist/qmail-smtpd-auth-0.31.tar.gz

 

⑩ qmail-1.03.patch 다운로드

[root@nextline ~]# wget http://www.ckdhr.com/ckd/qmail-103.patch

 

( 2 ) qmail 설치

① qmail-1.03.tar.gz 파일의 압축을 해제합니다.

[root@nextline ~]# tar zxvf qmail-1.03.tar.gz

 

② qmail-smtpd-auth-0.31.tar.gz 파일의 압축을 해제합니다.

[root@nextline ~]# tar zxvf qmail-smtpd-auth-0.31.tar.gz

 

③ qmail-stmp-auth-0.31 패치

qmail-smtpd-auth-0.31 디렉토리로 이동합니다.

[root@nextline ~]# cd qmail-smtpd-auth-0.31

qmail-smtpd-auth-0.31 패치 파일을 qmail-1.03 디렉토리로 복사합니다.

[root@nextline qmail-smtpd-auth-0.31]# cp README.auth base64.c

base64.h ../qmail-1.03

qmail-1.03를 패치합니다.

[root@nextline qmail-smtpd-auth-0.31]# patch -d ../qmail-1.03 < auth.patch

 

④ dns 패치

qmail-1.03 디렉토리로 이동합니다.

[root@nextline ~]# cd qmail-1.03

qmail-1.03.patch 패치를 적용합니다.

[root@nextline qmail-1.03]# patch -p1 < ../qmail-103.patch

 

⑤ qmail 디렉토리 및 INSTALL.ids 파일 편집

qmail이 설치될 디렉토리를 생성합니다.

[root@nextline qmail-1.03]# mkdir /var/qmail

vi 에디터 사용법

사용형식 : vi [옵션] [생성할 파일명/편집할 파일명]

vi 에디터는 입력모드, 명령모드, 실행모드로 구분됩니다.

입력모드 : vi 편집화면에서 문자를 입력할 수 있는 모드로서 입력모드로 진입하기 위해서는 i, a, o, I, A, O, R등이 있습니다. 즉 초기 vi 편집기 모드는 명령어 모드로 진입을 하기때문에 문자를 입력하기 전에 앞의 단축키 중 하나를 먼저 입력해야 원하는 문자를 입력할 수 있습니다.

명령모드 : 커서이동/문자삭제/문자()교체/문자열검색 등을 할수 있는 모드로서 입력모드에서 편집이 완료되면 Esc키를 눌러 명령모드로 진입하면 됩니다.

x : vi 명령모드에서 커서위치의 한 문자 삭제

dw : vi 명령모드에서 커서위치의 한단어 삭제

dd : vi 명령모드에서 커서위치의 행 삭제

Ndd : vi 명령모드에서 커서위치의 여러행 동시 삭제

실행모드 : 특별한 명령어를 실행하는 모드로서 명령어모드에서 ":"(콜론)를 누르면 vi 화면 하단 좌측에 vi 특수명령어를 입력할 수 있습니다.

실행모드의 일반적으로 쓰이는 특수 명령어

q : 수정 작업이 이루어지지 않은 상태에서 vi 편집기에서 빠져나옵니다.

q! : 수정 작업이 이루어진 부분을 적용시키지 않고 vi 편집기를 강제로 빠져나옵니다.

w : 수정된 작업을 저장합니다.

wq : 수정된 작업을 저장하고 vi 편집기에서 빠져나옵니다.

초기 명령어모드 -> 입력모드진입 -> 편집 -> 명령어모드 -> 실행모드 -> 종료

qmail 계정 및 그룹을 생성하기 위해 INSTALL.ids 파일을 편집합니다. 아래와 같이 리눅스에 해당하는 라인을 제외하고는 모두 삭제 합니다.

INSTLL.ids파일을 편집합니다. 아래와 같이 Linux 부분을 제외한 나머지 부분을 삭제한 후 저장하고 vi에디터를 빠져나옵니다.

[root@nextline qmail-1.03]# vi INSTALL.ids 

 

⑥ qmail 그룹 및 계정생성

sh INSTALL.ids 실행으로 위의 편집한 qmail 그룹 및 계정이 자동 생성됩니다.

[root@nextline qmail-1.03]# sh INSTALL.ids

 

컴파일

[root@nextline qmail-1.03]# make 

 

make 오류 발생시 qmail-1.03.errno.patch패치 파일을 다운로드 하여 패치를 합니다.

qmail 패치파일 다운로드

http://qmail.kldp.org/src/patches/glibc-2.3.1/

 

패치파일 다운로드

오류 해결을 위해 qmail-1.03.errno.patch 패치 파일을 다운로드 합니다.

[root@nextline qmail-1.03]# wget http://qmail.kldp.org/src/patches/glibc-2.3.1/?id=1687

 

⑨ qmail-1.03.errno.patch 파일로 패치를 적용합니다.

[root@nextline qmail-1.03]# patch –p1 < qmail-1.03.errno.patch

 

⑩ qmail-1.03.errno.patch 패치 후 재 컴파일 합니다.

[root@nextline qmail-1.03]# make

 

설치

[root@nextline qmail-1.03]# make setup check

 

⑫ ./config-fast 도메인

컴파일/설치가 끝나면 기본 control 파일들의 설정을 위해 다음 명령어를 실행합니다.

정상적으로 실행 되었다면 /var/qmail/control/ 안에는 qmail이 정상적으로 작동하기 위한 설정 파일들이 생기게 됩니다.

[root@nextline qmail-1.03]#./config-fast nextline.co.kr

 

⑬ /var/qmail/control 설정화일 확인

[root@nextline qmail-1.03]# ls /var/qmail/control/

 

( 3 ) ucspi-tcp 설치

tcpserver tcpclient TCP 클라이언트-서버 응용 프로그램을 만들기 위한 명령행

도구들의 모음입니다.

① ucspi-tcp-0.88-man.tar.gz 파일의 압축을 해제 합니다.

[root@nextline ~]# tar zxvf ucspi-tcp-0.88.tar.gz

 

컴파일

압축해제된 ucspi-tcp-0.88 디렉토리로 이동합니다.

[root@nextline ~]# cd ucspi-tcp-0.88

ucspi-tcp를 컴파일 합니다.

[root@nextline ucspi-tcp-0.88]# make

 

make: *** [tcpserver] 오류 발생시 ucspi-tcp-0.88.errno.patch 패치를 합니다.

패치파일 다운로드

http://qmail.kldp.org/src/patches/glibc-2.3.1/

③ ucspi-tcp-0.88.errno.patch 패치파일 다운로드

[root@nextlijne ucspi-tcp-0.88]# wget http://qmail.kldp.org/src/patches/glibc-2.3.1/?id=1692

 

④ ucspi-tcp-0.88.errno.patch 패치를 적용합니다.

[root@nextline ucspi-tcp-0.88]# patch -p1 < ucspi-tcp-0.88.errno.patch

 

⑤ ucspi-tcp-0.88.errno.patch 파일 패치 후 재 컴파일 합니다.

[root@nextline ucspi-tcp-0.88]# make

 

설치

[root@nextline ucspi-tcp-0.88]# make setup check

 

( 4 ) daemontools 설치

daemontools는 시스템 서비스를 관리하기 위한 도구들의 모음으로 ucspi-tcp와 같이 사

용하면 inetd/xinetd 같은 구시대 수퍼 데몬을 완전히 대체할 수 있습니다.

① daemontools-0.76.tar.gz 파일의 압축을 해제 합니다.

Daemontools 설치 할 디렉토리를 생성합니다.

[root@nextline ~]# mkdir -p /package

디렉토리 퍼미션을 변경합니다.

[root@nextline ~]# chmod 755 /package/

daemontools-0.76.tar.gz 파일을 /package 디렉토리로 이동합니다.

[root@nextline ~]# cp daemontools-0.76.tar.gz /package/

/package 디렉토리로 이동합니다.

[root@nextline ~]# cd /package/

daemontools-0.76.tar.gz 파일의 압축을 해제 합니다.

[root@nextline package]# tar zxvf daemontools-0.76.tar.gz

 

설치

압축를 해제하면 admin 디렉토리와 daemontools-0.76 디렉토리가 생성됩니다.

admin 디렉토리 하위 daemontools-0.76 디렉토리로 이동합니다.

[root@nextline package]# cd admin/daemontools-0.76/

Package/install 명령으로 daemontoos를 설치합니다.

[root@nextline daemontools-0.76]# package/install

 

make 오류시

make: *** [envdir] 오류 패치를 합니다.

패치파일 다운로드

http://qmail.kldp.org/src/patches/glibc-2.3.1/

③ daemontools-0.76.errno.patch 패치파일을 다운로드 합니다.

[root@nextline daemontools-0.76]# wget http://qmail.kldp.org/src/patches/glibc-2.3.1/?id=1668

 

④ daemontools-0.76.errno.patch 패치를 적용합니다.

[root@nextline daemontools-0.76]# patch -p1 < daemontools-0.76.errno.patch

 

⑤ daemontools-0.76.errno.patch 패치 후 package/install 를 재 실행합니다.

[root@nextline daemontools-0.76]# package/install

 

( 5 ) autorespond 설치

메일의 자동 응답을 해줄 수 있게 하는 프로그램입니다.

압축해제

autorespond-2.0.2.tar.gz 파일이 위치한 /root 디렉토리로 이동합니다.

[root@nextline daemontools-0.76]# cd /root

autorespond-2.0.2.tar.gz 파일의 압축을 해제 합니다.

[root@nextline ~]# tar zxvf autorespond-2.0.2.tar.gz

 

컴파일

압축 해제된 autorespond-2.0.2 디렉토리로 이동합니다.

[root@nextline ~]# cd autorespond-2.0.2

컴파일을 합니다.

[root@nextline autorespond-2.0.2]# make

 

③ autorespond 파일 복사

[root@nextline autorespond-2.0.2]# cp autorespond /usr/local/bin/

 

( 6 ) qmail 데몬을 위한 디렉토리 및 스크립트 파일 생성

스크립트생성

[root@nextline ~]# vi /var/qmail/rc

 

아래의 스크립트를 추가합니다.

#!/bin/sh

exec env - PATH="/var/qmail/bin:$PATH" \

qmail-start ./Maildir/

 

디렉토리 생성 및 퍼미션 변경

생성한 rc 파일의 실행권한을 줍니다.

[root@nextline ~]# chmod a+x /var/qmail/rc

qmail 데몬을 위한 디렉토리와 권한을 줍니다.

[root@nextline ~]# mkdir -p /var/qmail/supervise/qmail-send/log

[root@nextline ~]# mkdir -p /var/qmail/supervise/qmail-smtpd/log

[root@nextline ~]# chmod +t /var/qmail/supervise/qmail-send

[root@nextline ~]# chmod +t /var/qmail/supervise/qmail-smtpd

 

스크립트 생성

[root@nextline ~]# vi /var/qmail/supervise/qmail-send/run

 

아래의 스크립트를 추가합니다.

#!/bin/sh

exec /var/qmail/rc

 

스크립트 생성

[root@nextline ~]# vi /var/qmail/supervise/qmail-send/log/run

 

아래의 스크립트를 추가합니다.

#!/bin/sh

exec /usr/local/bin/setuidgid qmaill \

/usr/local/bin/multilog t /var/log/qmail

 

스크립트 생성

[root@nextline ~]# vi /var/qmail/supervise/qmail-smtpd/run

 

스크립트를 추가합니다.

#!/bin/sh

Q_UID=`id -u vpopmail`

Q_GID=`id -g vpopmail`

exec /usr/local/bin/softlimit -m 7340032 \

/usr/local/bin/tcpserver -vRHl 0 \

-x /home/vpopmail/etc/tcp.smtp.cdb \

-u $Q_UID -g $Q_GID 0 25 /var/qmail/bin/qmail-smtpd nextline.co.kr \

/home/vpopmail/bin/vchkpw /bin/true 2>&1

 

# 주의 : vRHl 0 (L의 소문자, 숫자 0), 인용문자가‘(작은따옴표)가 아니고 `(숫자1옆에 있는 것) 입니다.

스크립트 생성

[root@nextline ~]# vi /var/qmail/supervise/qmail-smtpd/log/run

 

삽입 스크립트

#!/bin/sh

exec /usr/local/bin/setuidgid qmaill \

/usr/local/bin/multilog t /var/log/qmail/smtpd

 

편집한 파일들에 실행권한을 주기 위해 퍼미션를 변경합니다.

[root@nextline autorespond-2.0.2]# chmod 755 /var/qmail/supervise/qmail-send/run

[root@nextline autorespond-2.0.2]# chmod 755 /var/qmail/supervise/qmail-send/log/run

[root@nextline autorespond-2.0.2]# chmod 755 /var/qmail/supervise/qmail-smtpd/run

[root@nextline autorespond-2.0.2]# chmod 755 /var/qmail/supervise/qmail-smtpd/log/run

 

⑧ qmail-smtpd를 위한 로그 디렉토리 생성 및 소유권 변경

[root@nextline /]# mkdir -p /var/log/qmail/qmail-smtpd

[root@nextline /]# chown qmaill /var/log/qmail/ /var/log/qmail/qmail-smtpd/

 

기본 alias 계정 생성 및 퍼미션변경

[root@nextline alias]# echo postmaster > /var/qmail/alias/.qmail-root

[root@nextline alias]# echo postmaster > /var/qmail/alias/.qmail-postmaster

[root@nextline alias]# echo postmaster > /var/qmail/alias/.qmail-mailer-daemon

[root@nextline alias]# cd /var/qmail/alias/

[root@nextline alias]# chmod 644 .qmail-root .qmail-postmaster .qmail-mailer-daemon

 

⑩ qmail 시동스크립트 생성

[root@nextline ~]# vi /etc/rc.d/init.d/qmail

 

아래의 스크립트를 추가합니다.

#!/bin/sh

# For Red Hat chkconfig

# chkconfig: - 80 30

# description: the qmail MTA

PATH=/var/qmail/bin:/bin:/usr/bin:/usr/local/bin:/usr/local/sbin

export PATH

case "$1" in

start)

echo "Starting qmail"

if [ -e /service/qmail-send ] ; then

if svok /service/qmail-send ; then

svc -u /service/qmail-send

else

echo qmail-send supervise not running

fi

else

ln -s /var/qmail/supervise/qmail-send /service/

fi

if [ -e /service/qmail-smtpd ] ; then

if svok /service/qmail-smtpd ; then

svc -u /service/qmail-smtpd

else

echo qmail-smtpd supervise not running

fi

else

ln -s /var/qmail/supervise/qmail-smtpd /service/

fi

if [ -d /var/lock/subsys ]; then

touch /var/lock/subsys/qmail

fi

;;

stop)

echo "Stopping qmail..."

echo " qmail-smtpd"

svc -dx /service/qmail-smtpd /service/qmail-smtpd/log

rm -f /service/qmail-smtpd

echo " qmail-send"

svc -dx /service/qmail-send /service/qmail-send/log

rm -f /service/qmail-send

if [ -f /var/lock/subsys/qmail ]; then

rm /var/lock/subsys/qmail

fi

;;

stat)

svstat /service/qmail-send

svstat /service/qmail-send/log

svstat /service/qmail-smtpd

svstat /service/qmail-smtpd/log

qmail-qstat

;;

doqueue|alrm|flush)

echo "Flushing timeout table and sending ALRM signal to qmail-send."

/var/qmail/bin/qmail-tcpok

svc -a /service/qmail-send

;;

queue)

qmail-qstat

qmail-qread

;;

reload|hup)

echo "Sending HUP signal to qmail-send."

svc -h /service/qmail-send

;;

pause)

echo "Pausing qmail-send"

svc -p /service/qmail-send

echo "Pausing qmail-smtpd"

svc -p /service/qmail-smtpd

;;

cont)

echo "Continuing qmail-send"

svc -c /service/qmail-send

echo "Continuing qmail-smtpd"

svc -c /service/qmail-smtpd

;;

restart)

echo "Restarting qmail:"

echo "* Stopping qmail-smtpd."

svc -d /service/qmail-smtpd

echo "* Sending qmail-send SIGTERM and restarting."

svc -t /service/qmail-send

echo "* Restarting qmail-smtpd."

svc -u /service/qmail-smtpd

;;

cdb)

tcprules /home/vpopmail/etc/tcp.smtp.cdb /home/vpopmail/etc/tcp.smtp.tmp < /home/vpopmail/etc/tcp.smtp

chmod 644 /home/vpopmail/etc/tcp.smtp.cdb

echo "Reloaded /home/vpopmail/etc/tcp.smtp."

;;

help)

cat <

stop -- stops mail service (smtp connections refused, nothing goes out)

start -- starts mail service (smtp connection accepted, mail can go out)

pause -- temporarily stops mail service (connections accepted, nothing leaves)

cont -- continues paused mail service

stat -- displays status of mail service

cdb -- rebuild the tcpserver cdb file for smtp

restart -- stops and restarts smtp, sends qmail-send a TERM & restarts it

doqueue -- schedules queued messages for immediate delivery

reload -- sends qmail-send HUP, rereading locals and virtualdomains

queue -- shows status of queue

alrm -- same as doqueue

flush -- same as doqueue

hup -- same as reload

HELP

;;

*)

echo "Usage: $0 {start|stop|restart|doqueue|flush|reload|stat|pause|cont|cdb|queue|help}"

exit 1

;;

esac

exit 0

 

퍼미션 변경

[root@nextline ~]# chmod 755 /etc/rc.d/init.d/qmail

 

chkconfig ntsysv를 이용한 서비스 자동실행

시스템이 시작할 때 불필요하거나 사용하지 않는 서비스를 실행하지 않게 하는 방법 중 최근에 많이 쓰이는 명령어로 chkconfig가 있습니다. chkconfig 명령어를 이용하면 시스템에 설치되어 있는 모든 서비스 데몬을 확인할 수 있고, 특정 서비스를 쉽게 활성화하거나 해제할 수 있습니다.

[root@nextline ~]# chkconfig --list

시스템에 설치되어 있는 모든 서비스 데몬을 확인할 수 있습니다.

[root@nextline ~]# chkconfig --level 2345 sendmail off

런레벨 2~5에서 sendmail을 해제합니다.

[root@nextline ~]# chkconfig --level 2345 nfs on

런레벨 2~5에서 nfs 서비스를 활성화합니다.

[root@nextline ~]# chkconfig rlogin off

xinetd 기반의 서비스인 rlogin을 해제합니다.

--add --del 스위치를 사용해서 서비스를 추가하거나 삭제할 수 있습니다. chkconfig는 단지 설정 파일을 변경하여, 시스템을 부팅했을 때 해당 서비스 데몬의 실행 여부만 결정하는 것이므로, 다앙 서비스를 시작시키거나 중지시키려면 반드시 service 명령을 사용해야 한다. 참고로 service 명령어는 다음과 같이 사용합니다.

service 서비스명 {start | stop | restart | reloal}

레드햇에는 chkconfig외에도 ntsysv라는 조금은 오래된 툴이 있다. 이 툴은 시스템을 재시작할 때 자동으로 시작할 데몬을 [*]로 체크해서 손쉽게 지정할 수 있다.

⑫ qmail 서비스를 추가합니다.

[root@nextline ~]# chkconfig –-add qmail

ntsysv

ntsysv RunLevel을 조정할 수 있는 편리한 인터페이스를 제공하는 툴입니다.

그냥 쉘 프롬프트에서 ntsysv 라고 입력하면 됩니다. 새로 나온 화면에서 부팅 시

자동으로 띄우고싶은 데몬은 체크를 하면 됩니다.

부팅시 qmail를 자동 실행시키기 위해 ntsysv를 실행합니다.

[root@nextline ~]# ntsysv

 

부팅시 qmail 시작될 수 있도록 [*] qmail 체크를 하고 [확인] 를 눌러 빠져나옵니다.

 

기존의 pop3 데몬을 사용하지 않음으로 설정합니다.

[root@nextline ~]# vi /etc/xinetd.d/pop3

 

아래와 같이 disable = yes 로 설정하면 xinetd를 시작하여도 pop3 데몬이 실행되지 않습니다.

service pop3

{

disable = yes

flags = REUSE

socket_type = stream

wait = no

user = root

server = /usr/local/lib/popper

server_args = qpopper -s

log_on_failure += USERID

}

( 7 ) vpopmail 설치

vpopmail 은 가상 도메인 추가, 설정, pop 유저 설정과 pop3 데몬등의 기능을 하며 vpopmail이 제대로 작동하려면 vpopmail이 사용할 유저와 그룹을 만들어야 한합니다.

① vpopmail 유저 및 그룹생성

vchkpw 그룹을 생성합니다.

[root@nextline ~]# groupadd vchkpw

vchkpw 그룹에 속한 vpopmail 계정을 생성합니다.

[root@nextline ~]# useradd -g vchkpw vpopmail

이때 생성되는 vpopmail 홈 디렉토리에는 앞으로 추가할 도메인들의 모든 이메일 계정, 메일들이 저장될 곳이므로, 공간이 넉넉한 파티션을 고르는 것이 좋겠다. 다른 파티션을 사용할 것이라면 다음과 같이 할수 있습니다. 디렉토리를 지정하지 않으면 기본 /home파티션에 계정 홈디렉토리가 생성됩니다.

[root@nextline ~]#useradd -g vchkpw -d /원하는/파티션의/디렉토리를/지정 vpopmail

 

② vpopmail-5.2.1.tar.gz 압축을 해제합니다.

[root@nextline ~]# tar zxvf vpopmail-5.2.1.tar.gz

 

③ vmysql.h 편집

mysql vpopmail 메일의 연동을 하지 않으시려면 ③,④번을 적용하지 않습니다.

mysql과 연동하기 위한 설정입니다.

MySQL db를 사용하려 한다면, 컴파일 하기전에 먼저 vmysql.h 를 열어서 sql 서버를 액세스할수 있는 user와 암호등을 설정해 주어야 합니다. vpopmail 상위 버젼에서는 아

래와 같은 라인이 없다면 설치 후 /home/vpopmail/etc/vpopmail.mysql에 설정해 줍니다. 테이블을 생성/삭제 할 수 있는 사용자 이여야하므로 보통 root 나 해당 유저로

설정해 줍니다.

압축 해제된 vpopmail-5.2.1 디렉토리로 이동합니다.

[root@nextline ~]# cd vpopmail-5.2.1

mysql 연동을 위해 vmysql.h 파일을 편집합니다.

[root@nextline vpopmail-5.2.1]# vi vmysql.h

 

아래 부분을 편집합니다.

/* Edit to match your set up */

#define MYSQL_UPDATE_SERVER "localhost"

#define MYSQL_UPDATE_USER "vpopmail" <- mysql 생성 계정명

#define MYSQL_UPDATE_PASSWD "xxxxxx" <- 계정 패스워드

#define MYSQL_READ_SERVER "localhost"

#define MYSQL_READ_USER "vpopmail" <- mysql 생성 계정명

#define MYSQL_READ_PASSWD "xxxxxx" <- 계정 패스워드

/* End of setup section*/

 

④ mysql 계정 생성

위에서 설정한 vmysql.h user와 패스워드를 동일하게 생성하여야 합니다.

vpopmail DB 계정 생성을 위해 mysql에 접속합니다.

[root@nextline ~]# mysql -u root -p

mysql 패스워드를 입력합니다.

Enter password:

mysql 사용자로 로그인 합니다.

mysql> use mysql;

vpopmail 데이터베이스를 생성합니다.

mysql> create database vpopmail;

vpopmail 데이터베이스의 사용자명과 vpopmail계정의 패스워드를 입력합니다.

mysql> grant all privileges on vpopmail.* to vpopmail@"localhost" identified by 'xxxxxx';

위에서 생성한 vpopmail 데이터베이스 정보를 적용합니다.

mysql> flush privileges;

mysql를 빠져나옵니다.

mysql> quit

 

⑤ vpopmail 환경설정 옵션

vpopmail 5.0 이상 버젼은 --enable-large-site 옵션이 --enable-many-domains

으로 바뀌었습니다. , 각 도메인별로 테이블을 생성관리 할 것이라면 --enable-many-domains=n 옵션을 사용합니다.

vpopmail 5.0 이하 버젼은 --enable-large-site=n|y 옵션을 사용할 수도 있는데 이것은, 디폴트로 vpopmail 은 모든 도메인, 유저 정보를 한개의 테이블에서 관리합니다. 만약 각각의 도메인에 많은 메일 유저가 있다면 y로 설정하면, vpopmail은 도메인별로 테이블을 생성,유저 정보를 관리합니다.

--enable-mysql=y 옵션은 mysql과 연동을 위한 옵션입니다. 만약 sql 헤더파일이나 라이브러리를 찾지 못한다며 컴파일에 실패한다면, --enable-sqlincdir= sql 헤더파일 경로. --enable-sqllibdir= sql 라이브러리 경로 등을 ./configure 할때 추가 해줍니다.

예에서 nextline.co.kr 는 주 서버의 도메인 이름이다. 이것을 설정하면 주 서버의 메일 계정도 모두 가상 도메인의 메일 계정과 동일하게 관리 할 수 있다.

--enable-ip-alias-domains=y

ip aliasing을 사용하여 각 도메인마다 각기 다른 ip를 사용할 것이라면 옵션을 추가합니다.

--enable-roaming-users=y

로밍 서비스를 사용할 것이라면 옵션을 추가합니다.

vpopmail pop 서버의 로그 조절 옵션

아무런 옵션을 주지 않고 컴파일 했다면 vpopmail pop서버는 팝 유저들이 어떤 이유로든 로그인을 실패 했을 경우에만 로그를 남깁니다. (/var/log/maillog 또는 /var/log/messages)) 다음과 같은 옵션으로 로그 조절이 가능합니다.

--enable-logging=y : 모든 pop 로그인 기록과 오류 메시지를 남긴다.

--enable-logging=n : 아무런 로그도 남기지 않는다.

--enable-logging=e : 오류/ 치명적인 오류 메세지를 기록한다.

--enable-logging=p : 오류 로그에 암호를 포함한다.

--enable-logging=v : --enable-logging=y 와 같으며 사용자 암호를 로그에 포함한다.

[root@nextline vpopmail-5.2.1]# ./configure --enable-default-domain=nextline.co.kr --enable-mysql=y --enable-

incdir=/usr/local/mysql/include/mysql --enable-libdir=/usr/local/mysql/lib/mysql/ --enable-roaming-users=y --enable-tcprules-prog=/usr/local/bin/tcprules --enable-relay-clear-minutes=15

 

컴파일

[root@nextline vpopmail-5.2.1]# make

 

설치

[root@nextline vpopmail-5.2.1]# make install-strip

 

생성파일 확인

[root@nextline vpopmail-5.2.1]# ls /home/vpopmail/

 

⑨ SMTP 릴레이 설정

vpopmail의 로밍서비스는 고정되어 있지 않은 IP사용자들에게 smtp 릴레이를 지원해 줄수 있는 기능이다. vpopmail은 먼저 POP 메일 유저의 암호를 확인한다음 얼마만큼의 시간동안 그 IP주소의 smtp 릴레이를 열어 놓게 된다. 다음과 같이 기본적인 tcp.smtp 파일을 만든다.

다음 파일에는 qmail smtp 데몬이 메일을 중계(relay)할 주소를 추가합니다.

그외 메일을 중계 해줄 서버의 주소가 있다면 같은 형식으로 추가합니다.

vi /home/vpopmail/etc/tcp.smtp

------------------------------------------

127.0.0.1:allow,RELAYCLIENT=""

xxx.xxx.xxx.xxx:allow,RELAYCLIENT=""

:allow

------------------------------------------

첫 번째와 두번째줄은 메일 서버 내부의 릴레이를 열어 준 것입니다.

릴레이를 전혀 허용하지 않으려면 첫 번째와 두번째 룰만 있으면 됩니다.

xxx.xxx.xxx.xxx:allow,RELAYCLIENT="" 를 예를 들어 설명하면

tcpserver는 해당 ip (xxx.xxx.xxx.xxx)로 부터의 접속을 허용하고 (:allow)

해당 ip에서 접속이 있을 경우 RELAYCLIENT 환경 변수를 설정한 후 qmail-smtpd 를 실행하게 되므로 릴레이가 허용되는 원리 입니다.

마지막 줄의 :allow 는 다른 ip에서의 접속을 허용만 하고 RELAYCLIENT 환경 변수는 설정하지 않습니다.

, 릴레이는 허용하지 않습니다. (기본값이 allow입니다.)

[root@nextline vpopmail-5.2.1]# vi /home/vpopmail/etc/tcp.smtp

 

아래의 스크립트를 추가합니다.

127.0.0.:allow,RELAYCLIENT=""

xxx.xxx.xxx.xxx:allow,RELAYCLIENT="" < - xxx.xxx.xxx.xxx 로컬 ip를 입력합니다.

:allow

 

[root@nextline vpopmail-5.2.1]# tcprules /home/vpopmail/etc/tcp.smtp.cdb /home/vpopmail/etc/tcp.smtp.tmp < /home/vpopmail/etc/tcp.smtp

[root@nextline vpopmail-5.2.1]# /home/vpopmail/bin/clearopensmtp

 

cron에 의해 주기적으로 실행되어 릴레이가 허용된 IP 주소 중 pop 인증 시간이 한 시간 이상 된 것이 있으면 지워줍니다. vpopmail 컴파일 시 별다른 옵션을 주지 않았다면 기본적으로 릴레이 허용 시간은 한 시간이며 이것은 --enable-relay-clear-minutes= 옵션으로 바꿔 줄 수 있습니다.

⑩ crontab 등록

 

아래의 스크립트를 추가합니다.

# vpopmail clearopensmtp

40 * * * * /home/vpopmail/bin/clearopensmtp

 

⑪ pop3 시동파일 생성

[root@nextline ~]# mkdir /var/qmail/supervise/vpop

[root@nextline ~]# vi /var/qmail/supervise/vpop/run

 

삽입 스크립트

#!/bin/sh

VPOP_UID=`id -u vpopmail`

VPOP_GID=`id -g vpopmail`

exec /usr/local/bin/softlimit -m 7340032 \

tcpserver -vRHl 0 -u $VPOP_UID -g $VPOP_GID 0 110 \

/var/qmail/bin/qmail-popup nextline.co.kr \

/home/vpopmail/bin/vchkpw /var/qmail/bin/qmail-pop3d Maildir 2>&1

주의 : 인용문자가‘(작은따옴표)가 이나고 `(숫자1옆에 있는 것) 입니다.

 

⑫ qmail 데몬 시작하기

pop3 시동파일에 실행권한을 줍니다.

[root@nextline ~]# chmod 755 /var/qmail/supervise/vpop/run

만약 이전 sendmail이 아직 전송하지 못한 메일들이 메일 큐에 쌓여 있다면 sendmail -q 를 실행 시켜서 전송을 마쳐 주어야 합니다. 메일이 많이 쌓여 있을 경우 이것은 한번의 실행으로 끝나지 않을 수 도 있습니다.

/etc/rc.d/init.d/sendmail stop 으로 sendmail 데몬을 종료합니다.

[root@nextline ~]# ln -s /var/qmail/supervise/vpop /service

[root@nextline ~]# /etc/rc.d/init.d/sendmail stop

 

기존의 sendmail 바이너리를 qmail 의 것으로 바꿉니다.

[root@nextline ~]# mv /usr/lib/sendmail /usr/lib/sendmail.old

[root@nextline ~]# mv /usr/sbin/sendmail /usr/sbin/sendmail.old

[root@nextline ~]# ln -s /var/qmail/bin/sendmail /usr/lib

[root@nextline ~]# ln -s /var/qmail/bin/sendmail /usr/sbin

qmail를 시동합니다. 이렇게 /service 디렉토리에 링크를 한번 걸어주면 링크가 존재하는 한 즉, 재부팅 한다해도 daemontools에 의해서 자동으로 서비스가 시작됩니다.

[root@nextline ~]# ln -s /var/qmail/supervise/qmail-send /service/

[root@nextline ~]# ln -s /var/qmail/supervise/qmail-smtpd /service/

 

⑬ vpopmail를 이용한 도메인, 메일 계정 추가하기

/home/vpopmail/bin 디렉토리 안에 가상 도메인 관리를 위한 바이너리들이 있는데 다음과 같은 기능을 합니다.

[root@nextline ~]# ls /home/vpopmail/bin/

 

각 바이너리들의 용도

vadddomain

가상 도메인을 추가한다. postmaster 암호를 물어보는데 이것은 다음에 설치할 qmailadmin 웹 인터페이스에서 로그인 할때 물어볼 암호입니다.

vadddomain 도메인명

vdeldomain 가상 도메인과 모든 유저를 삭제합니다.

vdeldomain 도메인명

vadduser pop 메일 유저 계정을 만듭니다.

vadduser test@nextline.co.kr

vdeluser pop 메일 유저를 삭제합니다.

vdeluser test@nextline.co.kr

vpasswd 메일 유저의 암호를 변경합니다.

vpasswd test@nextline.co.kr

vsetuserquota 각 유저 별로 quota 설정을 할 수 있습니다.

vsetuserquota test@nextline.co.kr 51200 (단위는 byte 이다).

vpopbull 서버에 설정되어 있는 모든 유저들에게 한번에 메일을 보낼 때 유용하게 사용 할수 있습니다.

이제 도메인을 추가해 보도록 합니다. 위에서 주 도메인도 vpopmail에서 관리하기로 했다면 주 도메인과 메일 계정들도 추가해야 합니다.

만약 주 도메인이 nextline.co.kr 이고, 추가할 가상 도메인이 nextline1.co.kr, nextline2.co.kr 라고 한다면 다음과 같이 합니다. (추가하기 전에 가상 도메인들의 DNS MX 레코드의 IP주소가 주 서버로 되어있는지 확인 해보자).

./vadddomain nextline.co.kr

./vadddomain nextline1.co.kr

./vadddomain nextline2.co.kr

다음 qmail 설정 파일들이 제대로 바뀌었는지 확인해봅니다. 주 도메인도 vpopmail이 관리하기로 했다면 /var/qmail/control/locals 파일의 내용은 localhost 만이 있어야 정상입니다. qmail smtpd가 이 서버의 것이라고 인식하며 메일을 수신할 도메인들은 다음과 같이 rcpthosts 에 저장될 것입니다.

localhost

nextline.co.kr

nextline1.co.kr

nextline2.co.kr

virtualdomains 파일의 내용입니다.

nextline.co.kr:nextline.co.kr

nextline1.co.kr:nextline1.co.kr

nextline2.co.kr:nextline2.co.kr

/var/qmail/users/assign 의 내용입니다.

+nextline.co.kr-:nextline.co.kr:512:507:/home/vpopmail/domains/nextline.co.kr:-::

+nextline1.co.kr-:nextline1.co.kr:512:507:/home/vpopmail/domains/nextline1.co.kr:-::

+nextline2.co.kr-:nextline2.co.kr:512:507:/home/vpopmail/domains/nextline2.co.kr:-::

필요한 도메인, 메일 계정을 모두 추가하셨다면 qmail를 사용하기 위한 모든 프로그램 설치가 완료되었습니다.

( 8 ) qmail 테스트

ex) 도메인 : nextline.co.kr

계 정 : nextline

① vpopmail을 이용하여 가상도메인 및 유저를 생성해 보겠습니다.

[root@nextline ~]# cd /home/vpopmail/bin

[root@nextline bin]# ls

② nextline.co.kr 도메인을 생성합니다.

[root@nextline bin]# ./vadddomain nextline.co.kr

③ nextline.co.kr 도메인의 패스워드를 입력합니다. 이 패스워드가 qmailadmin에서 해당 도메인으로 접속 할때의 패스워드가 됩니다.

Please enter password for postmaster:

enter password again:

④ nextline 계정을 생성합니다.

[root@nextline bin]# ./vadduser nextline@nextline.co.kr

⑤ nextline 이메일 계정의 패스워드 입니다. 아웃룩 메일 계정 셋팅시 nextline 계정에 대한 패스워드 입니다.

Please enter password for nextline@nextline.co.kr:

enter password again:

 

⑥ Outlook Express 셋팅

아웃룩 익스프레스상에서 위 계정의 메일이 정상 송/수신 되는지 테스트합니다.

 

[도구] – [계정] – [인터넷계정] – [메일] – [추가] – [메일]

[표시이름] : 넥스트라인

[인터넷 전자메일주소] : nextline@nextline.co.kr

[받는메일] : mail.nextline.co.kr

[보내는 메일] : mail.nextline.co.kr

[계정이름] : nextline

[암호] : xxxxxx

[마침]

추가한 메일계정의 속성 탭을 선택합니다.

[속성] – [서버] – [인증필요 체크] –[적용] – [확인] –[닫기]

메일 보내기

[아웃룩 익스프레스] – [메일작성] – [보내기]

아래와 같이 생성한 메일 계정으로 메일을 보냅니다.

 

수신 확인

[배달] – [받은 편지함] 메일이 정상 수신되었습니다.

 

다음은 vpopmail의 웹 인터페이스이며 도메인의 추가,삭제를 제외한 모든 기능을 웹 상에서 할 수 있으며, ezmlm 을 이용한 메일링 리스트 추가, 삭제, 관리까지 할 수 있는 qmailadmin 설치를 하겠습니다.

( 9 ) ezmlm 설치

ezmlm qmail 과 같이 사용할 수 있는 강력한 메일링 리스트입니다.

① ezmlm-0.53.tar.gz 파일의 압축을 해제 합니다.

[root@nextline ~]# tar zxvf ezmlm-0.53.tar.gz

 

② ezmlm-idx-0.40.tar.gz 파일의 압축을 해제 합니다.

[root@nextline ~]# tar zxvf ezmlm-idx-0.40.tar.gz

 

③ ezmlm-idx-0.40 하위의 모든 파일을 ezmlm-0.53 디렉토리로 이동 합니다.

[root@nextline ~]# mv -f ezmlm-idx-0.40/* ezmlm-0.53

압축 해제된 ezmlm-0.53 디렉토리로 이동합니다.

[root@nextline ~]# cd ezmlm-0.53

⑤ idx.patch 패치를 적용합니다.

[root@nextline ezmlm-0.53]# patch < idx.patch

 

컴파일

[root@nextline ~]# make

 

make: *** [ezmlm-idx] 오류1

⑦ make 오류수정

[root@nextline ezmlm-0.53]# vi error.h

 

error.h파일의 아래의 구문를 추가합니다.

#include

 

재 컴파일

[root@nextline ezmlm-0.53]# make

 

⑨ make man

 

설치

[root@nextline ~]# make setup

 

( 9 ) qmailadmin 설치

① qmailadmin-1.0.6.tar.gz 파일의 압축을 해제 합니다.

[root@nextline ~]# tar zxvf qmailadmin-1.0.6.tar.gz

 

압축 해제된 qmailadmin-1.0.6 디렉토리로 이동합니다.

[root@nextline ~]# cd qmailadmin-1.0.6

컴파일 하기위한 환경 설정을 합니다.

--enable-cgibindir

qmailadmin 이 설치될 디렉토리이다. 웹서버가 사용중인 cgi-bin 디렉토리를 적어줍니다. 디폴트는 /usr/local/apache/cgi-bin 입니다.

--with-htmllibdir

qmailadmin html 템플레이트 파일들이 저장될 장소입니다. 그냥 디폴트로 놔두어도 됩니다. (default /usr/local/share/qmailadmin)

--enable-cgipath

사용중인 웹서버의 cgi path /cgi-bin/ 이 아닌 경우 설정해줍니다. 디폴트는 /cgi-bin/qmailadmin 이다.

컴파일을 하기 위한 환경설정을 합니다.

[root@nextline qmailadmin-1.0.6]# ./configure --enable-cgibindir=/usr/local/apache/cgi-bin/

 

컴파일

[root@nextline qmailadmin-1.0.6]# make

 

설치

[root@nextline qmailadmin-1.0.6]# make install-strip

 

⑥ qmailadmin cgi생성 확인

[root@nextline qmailadmin-1.0.6]# ls /usr/local/apache/cgi-bin/

 

⑦ httpd.conf 편집

qmailadmin 설치시 --with-htmllibdir 옵션을 사용하지 않으면 기본 /usr/local/apa

che/htdoc 디렉토리에 images 디렉토리가 생성됩니다.

[root@nextline bin]# vi /usr/local/apache/conf/httpd.conf

 

아래 구문을 VirtualHost부분에 추가합니다.

NameVirtualHost xxx.xxx.xxx.xxx

 

가상 도메인 생성

여기서 생성한 도메인이 qmailadmin 로그인시 사용될 도메인과 패스워드입니다.

가상 도메인 추가를 위해 /home/vpopmail/bin 디렉토리로 이동합니다.

[root@nextline ~]# cd /home/vpopmail/bin

nextline.co.kr 가상 도메인을 생성합니다.

[root@nextline bin]# ./vadddomain nextline.co.kr

Postmaster 패스워드를 입력합니다.

Please enter password for postmaster:

Enter password again:

 

⑨ qmailadmin 한글화

기본 영문으로 되어 있는 언어를 한국어로 변환하기위해 en 파일을 카피하여 해석된 언

어를 ko파일에 추가합니다.

[root@nextline ~]# cd /usr/local/share/qmailadmin/html/

[root@nextline ~]# cp –a en ko

[root@nextline ~]# cat /dev/null > ko

[root@nextline ~]# vi ko

 

한글화 삽입

000 euc-ko

001 메인 메뉴

002 POP 어카운트

003 자동 응답 추가:

004 자동 응답명:

005 오너 메일 주소:

006 건명:

007 전송 어카운트 작성:

008 전송처 메일 주소:

009 로컬 유저명:

010 전송처 메일 주소는 이와 같은 형식이 되군요 안 되는 유저@domain.com

로컬 유저명은 이와 같은 형식이 되군요 안 되는 것:POP 어카운트

, 전송처: joe@test.com 로컬 유저명: sales()라면, sales@##D 앞 모든 메일을 joe@domain.com 전송한다고 함

011 모더레이터 추가

012 모더레이터를 리스트 추가

013 메일 주소:

014 참가자 추가

015 리스트 추가

016 리스트명

017 리스트 오너 주소:

018 어카이브(archive)한다고

019 어카이브(archive) 하지 않는 것

020 어카이브(archive)를 보호할.모더레이터만이 어카이브(archive)가 참조 끝남

021 어카이브(archive)는 참가자 , 보호 설정에 따르며 참조 끝날

022 정리하고 보낼 하지 않았다.정리하고 보내 리스트나 셋업 하지 않는것

023 프리픽스한다고(리스트로부터 메세지 건명 리스트명을 넣는)

024 프리픽스 하지 않는 것

025 어카이브(archive)를 보호할.인식 할 수 없는 것 송신자 요구는 거부함

026 어카이브(archive)를 보호하지 않는 것.송신자가 누구든, 어카이브(archive)를 참조끝남

027 참가로는 승인이 불요

028 참가에는 참가 주소가 메세지를 돌려주는 것에 의한다 승인이 필요

029 Web으로부터 어카이브(archive)를 참조 가능

030 Web 어카이브(archive) 없음

031 탈퇴가 승인은 불요

032 탈퇴 참가 주소가 메세지를 돌려주는 것에 의한다 승인이 필요

033 remote administration자는 참가자 리스트를 요구 끝나며 참가자 로그를 검색 끝날

034 참가자 리스트는 얻을 수 없는

035 투고로는 승인이 필요

036 투고로는 승인이 불요

037 모더레이터 의외로부터 투고는 거부 당할.이것은 승인이 필요한 리스트만 유효

038 거부는 당하고 않는.승인이 필요한 리스트에 있어서, 모든 투고는 모

더레이터 전송 당한다고.이 선택사항은 승인이 필요한 리스트에 두며 유효.

039 관리 요구 응답한, 어카이브(archive) 갱신을 허가할

040 remote administration자하게는, 다이제스트 작성, remote

administration, 어카이브(archive) 갱신만 허가(리스트가 이 옵션으로 작성 당했을 때)

041 관리 요구 응답한, 어카이브(archive) 갱신을 허가할

042 remote administration자하게는, 다이제스트 작성, remote

administration, 어카이브(archive) 갱신만 허가(리스트가 이 옵션으로 작성 당했을 때)

043 리퀘스트 주소를 이용 가능하게 하는

044 리퀘스트 주소앞 메세이지를 처리하지 않는 것

045 remote administration한다고

046 remote administration 하지 않는 것

047 참가 승인할

048 참가가 승인은 불요

049 Trailer

050 No trailer

051 유저는 투고만

052 송신자 주소로 제한하지 않는 것

053 SQL 서포트 유효

054 호스트

055 포토

056 유저

057 패스워드

058 데이타베이스

059 테이블

060 추가

061 POP 어카운트

062 어카운트

063 코멘트

064 수정 유저

065 어카운트삭제

066 Catch All어카운트

067 POP 어카운트 추가

068 별명 어카운트

069 별명

070 POP 어카운트

071 수정

072 삭제

073 별명 추가

074 전송 어카운트

075 전송

076 전송 추가

077 자동 응답

078 자동 응답

079 자동 응답 추가

080 메일링리스트

081 리스트

082 삭제

083 참가자추가

084 참가자삭제

085 참가자일람

086 모더레이터추가

087 모더레이터삭제

088 모더레이터일람

089 메일링리스트 추가

090 POP 어카운트 추가

091 패스워드(재입력):

092 실명

093 리스트명

094 참가자명

095 이하 메일링리스트 새로운 유저를 참가 시킬

096 별명 삭제

097 삭제 승인

098 자동 응답 삭제

099 SQL Settings

100 전송 삭제

101 메일링리스트 삭제

102 유저 삭제

103 전송

104 이하 전송합니다:

105 자동 응답 수정

106 이름

107 내용

108 추가 메일 주소

109 수정 유저

110 신패스워드

111 패스워드 변경

112 어카운트

113 도메인

114 로그인

115 리디렉트

116 현재 리디렉트

117 리디렉트를 추가/치환

118 리디렉트를 삭제

119 추가했습니까

120 추가 가능했습니다

121 별명

122 전송

123 리디렉트 일람

124 퀵 링크

125 POP 어카운트 추가

126 별명 추가

127 전송 추가

128 자동 응답 추가

129 메일링리스트

130 바운스가 있었던 것

131 이것으로 일람은 모두입니다.전페이지 돌아 주세요

132 설정

133 Index:

134 Chatch All 설정을 해제

135 전페이지

136 갱신

137 다음 페이지

138 패스워드를 입력하고 주세요

139 POP 어카운트의 패스워드를 변경했습니까

140 패스워드의 변경 실패했습니까

141 유저를 삭제했습니까

142 권한이 있지 않습니다

143 디렉토리 권한 에러

144 파일 권한 에러

145 내부 에러 부정확한 유저입니다

146 리디렉트 할 수 있지 않습니다

147 리디렉트한다고

148 부정확한 메일 주소입니다

149 마지막 엔트리를 삭제 끝났습니다

150 파일 에러

151 행을 삭제했습니까

152 전송명 %s 를 추가했습니까

153 유저명은 존재하지 않습니다

154 별명을 추가했습니까

155 부정확한 조작입니다

156 작성 끝날 별명 최대수에 이르렀던 것

157 작성 끝날 전송 최대수에 이르렀던 것

158 작성 끝날 자동 응답 최대수에 이르렀던 것

159 부정확한 DotQmail 입력 : adddotqmail()

160 부정확한 별명입니다

161 별명을 추가 끝났습니다.실재할 POP 어카운트명을 입력하고 주세요

162 부정확한 POP 어카운트명입니다

163 부정확한 로컬명입니다

164 부정확한 별명 입력 : adddotqmailnow()

165 별명 추가 실패했습니까

166 별명을 추가했습니까

167 별명/전송 %s 삭제 실패했습니까

168 별명/전송 %s 는 삭제 당했습니까

169 리디렉트/전송 삭제 실패했습니까

170 리디렉트/전송을 삭제했습니까

171 에러: 디렉토리를 변경 끝났습니다 %s\n

172 한 번 한사람 밖에 postmaster로서 로그인 끝나지 않습니다 다른 누군

가가 로그인하고 있습니다. 나중에 로그인해 보세요

173 로그인은 끊어졌습니다, 재로그인해 주세요 \n

174 부정확한 자동 응답명입니다

175 그 이름은 이미 사용되고 있습니다.

176 자동 응답명을 입력하여 주세요

177 부정확한 메일 주소 오너입니다

178 건명을 입력하고 주세요

179 송신할 메세지를 무엇인가 입력하고 주세요

180 자동 응답이 추가 당했습니까 자동 응답

181 자동 응답 삭제 실패했습니까

182 자동 응답이 삭제 당했습니까

183 자동 응답이 수정 당했습니까 %s

184 작성 끝날 메일링리스트가 최대수에 이르렀음

185 파일을 삭제 끝났습니다.

186 메일링리스트를 삭제하겠습니까?

187 메일링리스트를 추가하겠습니까?

188 부정확한 메일 리스트명입니다

189 메일링리스트상 메일 주소 리스트

190 리스트 종단

191 메일링리스트상 모더레이터 메일 주소 리스트

192 메인 메뉴에

193 메일링리스트가 메일 주소가 추가 했습니까?

194 메일링리스트가 모더레이터 메일 주소가 추가 했습니까?

195 메일링리스트로부터 참가자 주소가 삭제 했습니까?

196 메일링리스트로부터 모더레이터를 삭제

197 메일링리스트로부터 모더레이터 주소가 삭제 했습니까?

198 부정확한 로그인입니다

199 작성 끝날 POP 어카운트 최대수에 이르렀던 것

200 패스워드가 일치하지 않습니다. 재입력해주세요

201 메모리 부족이 발생하고 있습니다

202 파라미터(parameter):

203 메일 주소는 메일링리스트로부터 삭제 하겠습니까?

204 Go user

205 전달 및 부재 해제

206 Set remote catch all account

207 Set Remote CatchAll

208 Remote CatchAll Address:

209 전달 여부 설정

210 Email 복사본 저장후 전달 설정/해제

211 Email 전달:

212 부재 설정/해제

213 부재중 응답 제목:

214 부재중 응답 내용:

215 Must supply forward address

216 Must supply subject

217 메뉴 새로 고침

218 로그 아웃

219 List Moderators

220 Moderator

Address

221 List Subscribers

222 Subscriber

Address

223 Could not find user

224 (click to modify)

225 Modify Mailing List

226 Mailing list modified successfully

227 Digest

228 Total:

229 unlimited

230 Total Subscribers:

231 No Mailing Lists to Display

232 No Aliases/Forwards to Display

233 No Mail Robots to Display

 

접속 테스트

http://ip/cgi-bin/qmailadmin

 

qmailadmin 로그인 화면

 

qmailadmin pop 계정 추가화면

이와 같이 qmailadmin 웹 인터페이스를 이용하면 가상도메인별 계정 관리가 편리 합니다

 

 


'Fusion Technology > IT-BT' 카테고리의 다른 글

미래융합기술포럼 및 성과전시회  (0) 2012.11.28

#please first open a folder in order to do advanced debug configuration 해결방법

 

Python을 하시다 보면 위의 메시지를 확인하실 수 있습니다. 

 

이는 디버깅할때 문제가 나오는데 맨땅에 시작하다 보니 저도 구글링을 해서 알았네요. 

 

 

먼저 폴더로 열지 않은것이고 두번째 하셔야 할 것이  launch.json을 만드시는 일입니다. 

 

 

 

 

'Programming > Python' 카테고리의 다른 글

Python 개발시작 2일차  (0) 2019.06.20
Python 개발 공부 1일차  (0) 2019.06.19
개발을 처음 시작하려고 합니다.  (0) 2019.06.18
Python '_'(언더스코어) 의미  (0) 2019.06.17
Visual studio 2019 - Python  (0) 2019.05.29

글을 많이 적지는 않고 바로 ebook 사이트들을 적어두겠습니다. 

 

url을 보시면 잘 이해하실 수 있으실거예요. (해외사이트예용)

 

http://en.pudn.com/

불러오는 중입니다...

 

http://www.freebookspot.es/

 

FreeBookSpot | Download e-books for free

 

www.freebookspot.es

 

https://www.free-ebooks.net/

 

Free-eBooks.net | Download free Fiction, Health, Romance and many more ebooks

Natalie Reads: 9 Pages: 23 Published: Aug 2019 Natalie is a romantic novella that, at its core, relates that which was, is, and is to come regarding a young man's quest for love and meaning in his life. Se... Formats: PDF, Epub, Kindle, TXT

www.free-ebooks.net

https://manybooks.net/

 

50,000+ Free eBooks in the Genres you Love | Manybooks

LOTS OF EBOOKS. 100 % FREE Welcome to your friendly neighborhood library. We have more than 50,000 free ebooks waiting to be discovered.

manybooks.net

https://www.getfreeebooks.com/

 

Get Free Ebooks - Download Free Ebooks Legally

 

www.getfreeebooks.com

http://freecomputerbooks.com/

 

Free Computer, Programming, Mathematics, Technical Books, Lecture Notes and Tutorials

FreeComputerBooks.com Free Computer, Mathematics, Technical Books and Lecture Notes, etc. --> Selected New Books How many flights will depart from a particular airport? Click here to find out. --> --> How many runways in a particular airport? Click here to

freecomputerbooks.com

 

http://www.freetechbooks.com/

 

Free / Open Acess Online Computer Science Books, Textbooks, and Lecture Notes

This site lists free online computer science, engineering and programming books, textbooks and lecture notes, all of which are legally and freely available.

www.freetechbooks.com

https://www.scribd.com/

 

Scribd - Read books, audiobooks, and more

The world's largest digital library. Read unlimited* books, audiobooks, magazines,... Access tens of millions of documents. FREE with a 30 day free trial.

www.scribd.com

 

https://www.bookyards.com/en/welcome

 

Free Books - Bookyards.com - Free Online Library

 

www.bookyards.com

 

http://digital.library.upenn.edu/books/

 

The Online Books Page

 

digital.library.upenn.edu

 

원문 서적같은거 찾으실때 유용하십니다. 

파이썬 개발공부를 시작한지 2일차.. 

 

오늘은 뭔가 업무가 많네요.ㅠㅠ 업무 처리하느라 틈틈히 개발 생각을 계속하면서 한줄 한줄 시작해 보고 있습니다. 

 

먼저 google calendar의 소스를 다운 받았어요. 

 

from __future__ import print_function
import datetime
import pickle
import os.path
from googleapiclient.discovery import build
from google_auth_oauthlib.flow import InstalledAppFlow
from google.auth.transport.requests import Request

# If modifying these scopes, delete the file token.pickle.
SCOPES = ['https://www.googleapis.com/auth/calendar.readonly']

def main():
    """Shows basic usage of the Google Calendar API.
    Prints the start and name of the next 10 events on the user's calendar.
    """
    creds = None
    # The file token.pickle stores the user's access and refresh tokens, and is
    # created automatically when the authorization flow completes for the first
    # time.
    if os.path.exists('token.pickle'):
        with open('token.pickle', 'rb') as token:
            creds = pickle.load(token)
    # If there are no (valid) credentials available, let the user log in.
    if not creds or not creds.valid:
        if creds and creds.expired and creds.refresh_token:
            creds.refresh(Request())
        else:
            flow = InstalledAppFlow.from_client_secrets_file(
                'credentials.json', SCOPES)
            creds = flow.run_local_server()
        # Save the credentials for the next run
        with open('token.pickle', 'wb') as token:
            pickle.dump(creds, token)

    service = build('calendar', 'v3', credentials=creds)

    # Call the Calendar API
    now = datetime.datetime.utcnow().isoformat() + 'Z' # 'Z' indicates UTC time
    print('Getting the upcoming 10 events')
    events_result = service.events().list(calendarId='primary', timeMin=now,
                                        maxResults=10, singleEvents=True,
                                        orderBy='startTime').execute()
    events = events_result.get('items', [])

    if not events:
        print('No upcoming events found.')
    for event in events:
        start = event['start'].get('dateTime', event['start'].get('date'))
        print(start, event['summary'])

if __name__ == '__main__':
    main()
# [END calendar_quickstart]

 

 

위의 소스에 토큰은 없어서 일단 복사해보았습니다. 

 

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QAction, qApp
from PyQt5.QtGui import QIcon



class MyApp(QMainWindow):

    def __init__(self):
        super().__init__()

        self.initUI()

    def initUI(self):

        exitAction = QAction(QIcon('exit.png'), 'Exit', self)   # 아이콘 exit.png와 'Exit' 라벨을 갖는 하나의 동작 action을 만듬
        exitAction.setShortcut('Ctrl+Q')                        # 단축키를 정할때 사용함
        exitAction.setStatusTip('Exit application')             # 상태바에 나타날 상태팁을 setStatusTip() 메서드를 사용하여 설정
        exitAction.triggered.connect(qApp.quit)                 # 동작을 선택했을때 QApplication위젯의 quit() 메서드에 연결 -> 종료

        self.statusBar()

        menubar = self.menuBar()
        menubar.setNativeMenuBar(False)
        fileMenu = menubar.addMenu('&File')
        fileMenu.addAction(exitAction)

        self.setWindowTitle("Hwan's Application")         # 메뉴툴바 타이틀
        self.move(300, 0)                                 # 위치를 나타냄 (x축, y축)
        self.resize(1500, 1000)                           # 위젯의 크기 단위는 px  
        self.show()                                       # 위젯을 스크린에 보여주는 것임 


    

if __name__ == '__main__':          # __name__ :현재 모듈의 이름이 저장되는 내장 변수 (만약 다른 모듈을 import해서 실행하면 name변수는 다른 모듈이 됨)

    app = QApplication(sys.argv)    # Application 객체생성     
    ex = MyApp()
    sys.exit(app.exec_())
    

 

제 소스는 이렇게 적어 나가고 있어요. 주석을 달면서 ㅎㅎ 뭔가 확실하게 한줄 한줄 알아야 할 것 같아서요. 

 

일단은 이렇게 시작하면서 python designer.exe.를 사용하지 않고, 직접 UI를 하나씩 짜보면서 문제마다 하나씩 해결해 봐야겠습니다. 

 

 

현재까지는 여기까지 진행되었습니다. 

너무 프로그래밍 못한다고 욕하시면 안되요!! ㅠㅠ

 

오늘 저녁에는 다른거라도 업데이트 시켜 나가야겠습니다. ㅎㅎ 

 

이상 투투아빠였습니다. ㅎ

어제 개발 다짐을 하고 뭘 할까~ 뭘 만들어 볼까? 계속 고민을 하던 중 제가 필요한 어플을 만들어보자 하고 생각했습니다. 

그래서 생각했던 어플은 구글 캘린더를 PC application으로 편하게 사용하며, 연동도 되고, 메모도 사용할 수 있는 걸 만들어 보자!!!

 

(뭔가 생각만...)

 

가장 먼저 UI를 디자인 하고 기능을 생각할지? 기능을 먼저 생각하고? UI를 생각할지?

UI는 어떻게 만들지? design application은 있을까?

이런 고민들을 엄청 많이 했어요. 

 

기능들이 복잡해서 일단은 심플하게 UI를 생각했습니다. 

 

 

이렇 구성으로 UI를 만들 예정이예요.. 그리고 calendar와 task와 메모가 연동이 되면 좋겠더라구요. (뭔가 어려울듯 싶지만요..ㅎㅎ)

 

처음부터 너무 어려운 프로젝트를 하는건 아닌지 고민도 되었습니다. 

하지만 일단은 시작했으니 무라도 썰어야죠?! ㅎㅎ

 

고민을 하면서 기능 부분을 생각 했어요!

 

  • Google calendar
    • Google API 호출
    • 등록 수정 / 삭제 기능 추가
    • Sync 시간 설정 /  수동 Sync 기능 추가
    • 프로세스 바를 이용한 진행상태 확인
    • Task 및 메모로 연동 (메모도 task 및 calendar와 연동)
  • Google Task
    • Google calendar와 연동(버튼을 이용하여 calendar와 메모에 집어 넣기)
    • 완료된 일정 아래 부분에 표시하기 (월/주/일)
    • Dead-line 쉽게 설정할 수 있도록 고민해서 개발해보기
  • Memo
    • Memo history 확인할 수 있도록 설정
    • 설정 시간별 자동 저장할 수 있는 tread 개발(DB를 무엇으로 사용할 것인지 고민 중입니다.)
    • Google calendar 및 Task에 연동하기

이렇게 기능들을 고민해 보았습니다. 

기능들을 고민한 뒤 어떻게 구글 캘린더 api를 사용할 것인가? 검색을 해 보았죠~

 

https://developers.google.com/calendar/quickstart/python

 

이곳에 들어가셔서 구글 아이디로 로그인하시고 python api를 사용하는 방법을 확인하시면 될것 같습니다. 

자!! 그럼 UI를 만드는 방법을 찾아보았습니다. 

 

python UI를 쉽게 만드는 방법으로는 anaconda를 설치하실때 이미 설치되어 있는 designer.exe파일을 실행 시켜서 사용하시면 쉽게 UI를 제작하실 수 있어요. 

 

anaconda python GUI designer.exe 파일

저도 한번 사용을 해보 았습니다.  그런데 저는 시간이 걸리더라도 뭔가 기초를 탄탄하게 하고 싶다는 생각이 들었어요.

그래서 저는 GUI도 내가 직접 코딩해서 만들어보자 생각이 들었습니다. 

그래서 GUI를 담당하는 PyQt5 라이브러리를 검색하다가 좋은 사이트를 발견했어요. 

 

https://wikidocs.net/21849

 

위키독스

온라인 책을 제작 공유하는 플랫폼 서비스

wikidocs.net

이곳에 들어가시면 PyQt5를 이용해서 UI를 만들 수 있도록 한글로 쉽게 작성되어 있습니다. 

 

삽질의 시작이 이곳에서부터 시작할 것 같습니다. ㅎ

 

열정은 많은데 머리가 안따라가네요....

저는 개발을 대학교 2학년때 처음 시작했어요. 

 

당시 Extjs라는 웹페이지 내에 윈도우 xp가 있던 신기한 프로그램을 따라 했었죠.. 

 

당시에는 아무런 생각도 없이 무조건 오픈소스를 찾고 복사해서 짜맞춰보고 실행 되게 하고.. 오류 제거하고.. 

 

이것만 주구장창 했던것 같습니다. 프로젝트를 맞치고 한동안 네트워크 공부에 전념했습니다. 

 

그리고 다시 찾아온 프로그래밍.. 무조건 일이 닥치는데로 오픈 소스를 이용해서 프로그램을 다시 짜 맞추기 시작했고 .. 

 

당시에는 C#을 통해 개발을 했습니다.  

 

나이가 지긋하신 사수분이 계셨는데 C#그래프 그릴때 framework를 사용하지 않고.. 단순 점으로만 프로그래밍 하느라.. 상당히 애를 먹었습니다. 

 

하지만.. 그걸로 또 끝이 나버렸습니다... 뭔가 확실하게 하지 못하고 DB쪽도 뭔가 애매하게... (지금은 기억도 나지 않음)

 

소켓 통신(당시에는 serial 통신)도 기억에 가물가물하고.. 그러네요.. 

 

지금은 Deep learning을 공부하고 있습니다. 일단 책을 보면서 기본 개념을 익히고.. 인터넷에서도 자료를 찾아 읽고 있습니다. 

 

프로그래밍 언어는 python을 사용해보려고 하구요.. 

 

예전에 포스팅을 많이 했었는데.. 다 삭제한게 너무너무 아쉽네요... 

 

혹시나 같이 공부하시거나.. 제 사수가 되어주시거나.. 같이 프로젝트를 해보실 분이 있으시면 

 

heatolab@naver.com 으로 언제든지 메일 부탁드립니다. 

 

참고로 저는 서울에서 현재 직장생활 중이며, 퇴근후 시간이 프리한 상태입니다. 

 


 

그럼 제가 공부하는 방법을 생각했는데 이 길이 맞을지 모르겠네요. 

 

1. 일단 프로그램 공부를 위해 프로젝트 하나를 기획한다. 

2. 프로젝트에 대한 오픈 소스를 조합하면서 무작정 코딩을 시도해본다. 

3. 함수들을 onenote에 정리하며, 사용방법에 대해 정리한다. 현재 노트는 원노트를 사용하고 있습니다. 

4. 프로젝트 진행 중 소스에 대한 내용을 기술 문서와 같이 정리한다. 

5. 시간이 걸리겠지만 나만의 결과보고서를 작성해본다. 

 

저는 현재 국책기획 담당을 하고 있어서.. 문서 작성에도 나중에 도움이 될만한게 있을거 같아 함께 시도해보려고 합니다. 

 

이 블로그에 저만의 프로젝트를 한번 진행해보며 날마다 포스팅을 하도록 노력해봐야겠네요. 

 

 

그럼 연락도 기다리고!! 한번 시작해보겠습니다.. 먼저 프로젝트 하나 정해야겠네요. ㅎㅎ 

 

뭐가 좋을까요? 의견도 달아주세용~~

파이썬 ' _ ' 이 특수문자를 많이 보셨을 겁니다. 

underscore, _ 이렇게 표현하죠~

 

타 언어에서 언더스코는 스네이크 표기법 & 변수나 함수명에서 많이 사용 되었습니다. 

 

파이썬에서는 for _ in range() 에서 많이 사용되 코딩하시는 분들은 많이 익숙하시라 생각됩니다. 

 

언더스코어에는 5가지 경우가 있습니다. 

 

1. 인터프리터에서 마지막 값을 저장할때

2. 값을 무시하고 싶을때

3. 변수나 함수명에 특별한 의미 또는 기능을 부여할때

4. 국제화 / 지역화 함수로써 사용할 때

5. 숫자 리터럴값의 자릿수 구분을 위한 구분자로 쓸때

 

 

+ Recent posts