[CentOS] 7.x KVM virt-install CentOS



리눅스 서버에 가상화 VPS 를 설치하는 방법입니다~


그런데 시간이 너무 오래 걸리는 듯 하네요~



예제1)


virt-install \

--name CentOS7 \

--vcpus 2 \

--memory 4096 \

--hvm \

--os-type linux \

--os-variant rhel7 \

--disk path=/var/lib/libvirt/boot/CentOS-7-x86_64-Minimal-1810.iso,device=cdrom,bus=ide \

--disk path=/var/lib/libvirt/images/CentOS7.qcow2,format=qcow2,size=10,bus=virtio \

--graphics vnc,port=5900,password=vnc1234,listen=0.0.0.0 \

--sound default





예제2)


virt-install \

--name CentOS7 \

--vcpus sockets=1,cores=2,threads=2 \

--memory 2048 \

--os-type linux \

--os-variant rhel7 \

--disk path=/var/lib/libvirt/boot/CentOS-7-x86_64-Minimal-1810.iso,device=cdrom,bus=ide \

--disk path=/var/lib/libvirt/images/CentOS7.img,size=10 \

--graphics vnc,listen=0.0.0.0,port=5901,password=vnc1234


사전에 미리 yum install qemu-kvm libvirt virt-install virt-manager virt-viewer 를 설치하여야 합니다.


로컬의 Virtual Machine Manager 로 해당 서버에 접속하고 비밀번호는 vnc1234 를 입력하면 됩니다.



블로그 이미지

영은파더♥

가상서버호스팅 VPS 리눅스 서버관리 윈도우 IT

,

CentOS 7.x Postfix + Dovecot + RoundCube 설치 방법


하나의 서버에 여러개의 도메인을 운영할 때 시스템 계정이 아닌 DB에 가상 메일계정을 이용하는 방법입니다.

검색해서 설정했더니 잘 안되어서 여러곳의 정보를 취합해서 정리하였습니다.

참조 사이트 :

 https://www.linode.com/docs/email/postfix/email-with-postfix-dovecot-and-mariadb-on-centos-7/

 https://www.digitalocean.com/community/tutorials/how-to-configure-a-mail-server-using-postfix-dovecot-mysql-and-spamassassin

mariadb 및 아파치, php 는 설치되어 있다고 가정하고 진행합니다.


# yum install postfix dovecot dovecot-mysql roundcubemail

# systemctl enable postfix

# systemctl start postfix

# systemctl enable dovecot

# systemctl start dovecot

필요한 패키지를 설치합니다.


# useradd -u 5000 -d /home/vmail -s /sbin/nologin -m vmail

가상메일에서 사용될 계정을 만듭니다.


CREATE DATABASE webmail;

GRANT ALL PRIVILEGES ON webmail.* TO webmail@localhost IDENTIFIED BY '비밀번호';

가상메일에서 사용될 DB 계정을 만듭니다.


CREATE TABLE `webmail`.`virtual_domains` (

 `id` INT NOT NULL AUTO_INCREMENT,

 `name` VARCHAR(50) NOT NULL,

 PRIMARY KEY (`id`)

 ) DEFAULT CHARSET=utf8;


CREATE TABLE `webmail`.`virtual_users` (

 `id` INT NOT NULL AUTO_INCREMENT,

 `password` VARCHAR(106) NOT NULL,

 `email` VARCHAR(80) NOT NULL,

 PRIMARY KEY (`id`),

 UNIQUE KEY `email` (`email`)

 ) DEFAULT CHARSET=utf8;


CREATE TABLE `webmail`.`virtual_aliases` (

 `id` INT NOT NULL AUTO_INCREMENT,

 `source` varchar(100) NOT NULL,

 `destination` varchar(100) NOT NULL,

 PRIMARY KEY (`id`)

 ) DEFAULT CHARSET=utf8;


INSERT INTO `webmail`.`virtual_domains` (`id` ,`name`) VALUES

 ('1', 'aaa.com'),

 ('2', 'bbb.com'),

 ('3', 'example.com');


INSERT INTO `webmail`.`virtual_users` (`id`, `password`, `email`) VALUES

 ('1', ENCRYPT('비밀번호', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), 'user1@aaa.com'),

 ('2', ENCRYPT('비밀번호', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), 'user2@aaa.com'),

 ('3', ENCRYPT('비밀번호', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), 'user1@bbb.com'),

 ('4', ENCRYPT('비밀번호', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), 'user2@bbb.com'),

 ('5', ENCRYPT('비밀번호', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), 'user1@example.com'),

 ('6', ENCRYPT('비밀번호', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), 'user2@example.com');


INSERT INTO `webmail`.`virtual_aliases` (`id`, `source`, `destination`) VALUES

 ('1', 'alias@aaa.com', 'user1@aaa.com'),

 ('2', 'user2@example.com', 'user1@example.com');

가상메일에서 사용될 테이블과 샘플데이터를 만듭니다.

default_pass_scheme = CRYPT 일때는 ENCRYPT('비밀번호')


# vi /etc/postfix/mysql-virtual-alias-maps.cf

hosts = 127.0.0.1

dbname = webmail

user = webmail

password = 비밀번호

query = SELECT destination FROM virtual_aliases WHERE source='%s'


# vi /etc/postfix/mysql-virtual-users.cf

hosts = 127.0.0.1

dbname = webmail

user = webmail

password = 비밀번호

query = SELECT email FROM virtual_users WHERE email='%s'


# vi /etc/postfix/mysql-virtual-mailbox-domains.cf

hosts = 127.0.0.1

dbname = webmail

user = webmail

password = 비밀번호

query = SELECT name FROM virtual_domains WHERE name='%s'


# vi /etc/postfix/mysql-virtual-mailbox-maps.cf

hosts = 127.0.0.1

dbname = webmail

user = webmail

password = 비밀번호

query = SELECT CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/') FROM virtual_users WHERE email='%s'


# chgrp postfix /etc/postfix/mysql-virtual-*.cf

# chmod o= /etc/postfix/mysql-virtual-*.cf

Postfix 에서 가상메일 계정의 정보를 가져올 쿼리파일을 만듭니다.


# vi /etc/postfix/main.cf

myhostname = mail.example.com

mydestination = localhost

mynetworks = 127.0.0.0/8

inet_interfaces = all

message_size_limit = 30720000

virtual_alias_domains =

virtual_alias_maps = proxy:mysql:/etc/postfix/mysql-virtual-alias-maps.cf, mysql:/etc/postfix/mysql-virtual-users.cf

virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf

virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf

virtual_mailbox_base = /home/vmail

virtual_uid_maps = static:5000

virtual_gid_maps = static:5000

smtpd_sasl_type = dovecot

smtpd_sasl_path = private/auth

smtpd_sasl_auth_enable = yes

broken_sasl_auth_clients = yes

smtpd_sasl_authenticated_header = yes

smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination

smtpd_use_tls = yes

smtpd_tls_cert_file = /etc/pki/dovecot/certs/dovecot.pem

smtpd_tls_key_file = /etc/pki/dovecot/private/dovecot.pem

proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks

virtual_transport = dovecot

dovecot_destination_recipient_limit = 1

Postfix main.cf 파일을 설정합니다.

postconf -e 'mydestination = localhost' 형태의 명령어로도 수정이 가능합니다.

그리고 postconf -n 명령어로 환경설정을 볼 수도 있습니다.

회색 부분을 굳이 설정하지 않아도 됩니다. ( 보안 사용시 필요 )

proxy_read_maps 은 없어도 될 것 같습니다.


# vi /etc/postfix/master.cf

dovecot   unix  -       n       n       -       -       pipe

    flags=DRhu user=vmail:vmail argv=/usr/libexec/dovecot/deliver -f ${sender} -d ${recipient}


submission inet n       -       n       -       -       smtpd

  -o syslog_name=postfix/submission

  -o smtpd_tls_security_level=encrypt

  -o smtpd_sasl_auth_enable=yes

  -o smtpd_reject_unlisted_recipient=no

  #-o smtpd_client_restrictions=$mua_client_restrictions

  #-o smtpd_helo_restrictions=$mua_helo_restrictions

  #-o smtpd_sender_restrictions=$mua_sender_restrictions

  -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject

  -o milter_macro_daemon_name=ORIGINATING

smtps     inet  n       -       n       -       -       smtpd

  -o syslog_name=postfix/smtps

  -o smtpd_tls_wrappermode=yes

  -o smtpd_sasl_auth_enable=yes

  -o smtpd_reject_unlisted_recipient=no

  #-o smtpd_client_restrictions=$mua_client_restrictions

  #-o smtpd_helo_restrictions=$mua_helo_restrictions

  #-o smtpd_sender_restrictions=$mua_sender_restrictions

  -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject

  -o milter_macro_daemon_name=ORIGINATING

Postfix master.cf 파일을 설정합니다.

회색 부분을 설정하지 않아도 됩니다. ( 보안 사용시 필요 )


# systemctl restart postfix


# postmap -q alias@aaa.com mysql:/etc/postfix/mysql-virtual-alias-maps.cf

user1@aaa.com

# postmap -q user1@aaa.com mysql:/etc/postfix/mysql-virtual-users.cf

user1@aaa.com

# postmap -q aaa.com mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf

aaa.com

# postmap -q user1@aaa.com mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf

aaa.com/user1/

postfix 데몬을 재시작 하고 가상계정 정보를 잘 가져 오는지 확인합니다.


# mv /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf.ori

# vi /etc/dovecot/dovecot.conf

protocols = imap pop3

listen = *

log_timestamp = "%Y-%m-%d %H:%M:%S "

mail_location = maildir:/home/vmail/%d/%n/Maildir


ssl_cert = </etc/pki/dovecot/certs/dovecot.pem

ssl_key = </etc/pki/dovecot/private/dovecot.pem


namespace {

    type = private

    separator = .

    prefix = INBOX.

    inbox = yes

}


service auth {

    unix_listener auth-master {

        mode = 0600

        user = vmail

    }

    unix_listener /var/spool/postfix/private/auth {

        mode = 0666

        user = postfix

        group = postfix

    }

    user = root

}


service auth-worker {

    user = root

}


protocol lda {

    log_path = /home/vmail/dovecot-deliver.log

    auth_socket_path = /var/run/dovecot/auth-master

    postmaster_address = postmaster@example.com

}


protocol pop3 {

    pop3_uidl_format = %08Xu%08Xv

}


passdb {

    driver = sql

    args = /etc/dovecot/dovecot-sql.conf.ext

}


userdb {

    driver = static

    args = uid=vmail gid=vmail home=/home/vmail/%d/%n allow_all_users=yes

}


# vi /etc/dovecot/dovecot-sql.conf.ext

driver = mysql

connect = host=127.0.0.1 dbname=webmail user=webmail password=비밀번호

default_pass_scheme = SHA512-CRYPT

password_query = SELECT email as user, password FROM virtual_users WHERE email='%u';


# chown vmail:dovecot /etc/dovecot

# chown vmail:dovecot /etc/dovecot/dovecot.conf

# chown vmail:dovecot /etc/dovecot/dovecot-sql.conf.ext

# chmod o= /etc/dovecot/dovecot-sql.conf.ext

기존 /etc/dovecot/dovecot.conf 파일을 백업해 놓고 새로운 파일로 설정을 합니다.

그리고 계정계정 로그인 정보에 사용될 /etc/dovecot/dovecot-sql.conf.ext 쿼리파일을 만듭니다.

dovecot 데몬에서 접근이 가능하도록 소유권한을 변경합니다.


# systemctl restart postfix

# systemctl restart dovecot

# tail -n15 /var/log/maillog

이제 postfix, dovecot 데몬을 재시작하고 메일이 잘 보내지고 잘 받아지는지 테스트 하면 됩니다.

telnet localhost smtp, telnet localhost pop3 명령어를 이용해서 메일 테스트를 합니다.


# mysql -u webmail -p webmail < /usr/share/roundcubemail/SQL/mysql.initial.sql


# cp -p /etc/roundcubemail/config.inc.php.sample /etc/roundcubemail/config.inc.php

# vi /etc/roundcubemail/config.inc.php

$config['db_dsnw'] = 'mysql://webmail:비밀번호@localhost/webmail';

$config['product_name'] = 'Webmail'; // HTML Title 부분에 나오는 내용, 적당한 이름으로 변경


# vi /etc/httpd/conf.d/roundcubemail.conf

<Directory /usr/share/roundcubemail/>

    <IfModule mod_authz_core.c>

        # Apache 2.4

        Require local

        Require all granted

    </IfModule>

</Directory>

<Directory /usr/share/roundcubemail/installer/>

    <IfModule mod_authz_core.c>

        # Apache 2.4

        Require local

        Require ip 허용아이피

    </IfModule>

</Directory>

# systemctl restart httpd

RoundCube 메일 환경을 설정합니다.

http://webmail.example.com/roundcubemail 페이지를 호출하여 확인합니다.

로그인시 사용자명에는 이메일 주소를 입력하여야 합니다.


위의 내용은 아래 첨부파일을 다운 받으면 됩니다.

postfix-dovecot-roundcube.txt


블로그 이미지

영은파더♥

가상서버호스팅 VPS 리눅스 서버관리 윈도우 IT

,

라즈베리파이 3 CentOS 7 이미지


Raspberry Pi 에 CentOS 리눅스도 설치가 가능합니다.

http://mirror.centos.org/altarch/7/isos/aarch64/ 여기에 가서 다운로드 받을 수 있습니다.


CentOS-7-aarch64.img.xz 를 받아서 Rufus 유틸리티를 이용해서 MicroSD 카드에 구우면 될 것 같네요~


블로그 이미지

영은파더♥

가상서버호스팅 VPS 리눅스 서버관리 윈도우 IT

,

VMware ESXi CentOS 7.x LVM 루트폴더 확장


디스크 용량을 기존 16G 로는 부족하여 용량을 확장하는 방법입니다.

다행히 요즘은 LVM 볼륨으로 되어 있어서 확장이 가능합니다.

먼저 VMware ESXi 호스트에서 디스크 용량을 늘려서 VM 시스템을 시작합니다.


fdisk /dev/sda 명령어로 늘어난 만큼 남아있는 파티션을 Linux LVM 파티션 형태로 추가합니다.

pvcreate /dev/sda3 로 Physical volume 을 생성하여야 합니다.

[root@localhost ~]# pvcreate /dev/sda3
  Device /dev/sda3 not found (or ignored by filtering).
[root@localhost ~]# reboot
login as: root
root@192.168.1.26's password:
Last login: Tue Sep 19 12:32:31 2017 from 192.168.1.2
[root@localhost ~]# pvcreate /dev/sda3
  Physical volume "/dev/sda3" successfully created.
[root@localhost ~]# pvscan
  PV /dev/sda2   VG cl              lvm2 [15.00 GiB / 0    free]
  PV /dev/sda3                      lvm2 [44.00 GiB]
  Total: 2 [59.00 GiB] / in use: 1 [15.00 GiB] / in no VG: 1 [44.00 GiB]

파티션 잡을때 Warning 메시지가 있었듯이 재부팅을 한번 해주어야 합니다.

pvdisplay 명령어로 볼륨명 VG Name 을 확인합니다.

[root@localhost ~]# pvdisplay
  --- Physical volume ---
  PV Name               /dev/sda2
  VG Name               cl
  PV Size               15.00 GiB / not usable 3.00 MiB
  Allocatable           yes (but full)
  PE Size               4.00 MiB
  Total PE              3839
  Free PE               0
  Allocated PE          3839
  PV UUID               hq499Q-zVoS-mZKD-zCWX-D4xf-ns5x-2L3Pui

  "/dev/sda3" is a new physical volume of "44.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sda3
  VG Name
  PV Size               44.00 GiB
  Allocatable           NO
  PE Size               0
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               KJ8ada-YjiU-gx9e-oSpd-K4AV-9KWK-F9tnGn

위에서 확인한 VG Name 을 vgextend 명령어로 확장합니다.

[root@localhost ~]# vgextend cl /dev/sda3
  Volume group "cl" successfully extended
[root@localhost ~]# vgdisplay
  --- Volume group ---
  VG Name               cl
  System ID
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  4
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                2
  Open LV               2
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               58.99 GiB
  PE Size               4.00 MiB
  Total PE              15102
  Alloc PE / Size       3839 / 15.00 GiB
  Free  PE / Size       11263 / 44.00 GiB
  VG UUID               ny3hEe-LQMt-0UYe-nVMT-hHlG-kRhN-y3LqmT

그리고 vgdisplay 명령어로 확장 가능한 Free PE / Size 값을 확인합니다.

[root@localhost ~]# lvextend /dev/cl/root -l +11263
  Size of logical volume cl/root changed from 13.39 GiB (3429 extents) to 57.39 GiB (14692 extents).
  Logical volume cl/root successfully resized.

lvextend 명령어로 볼륨 사이즈를 확장합니다.

그리고 이제 resize 를 합니다.

[root@localhost ~]# resize2fs /dev/cl/root
resize2fs 1.42.9 (28-Dec-2013)
resize2fs: Bad magic number in super-block while trying to open /dev/cl/root
Couldn't find valid filesystem superblock.
[root@localhost ~]# xfs_growfs /dev/cl/root
meta-data=/dev/mapper/cl-root    isize=512    agcount=4, agsize=877824 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=3511296, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 3511296 to 15044608
[root@localhost ~]# df -h
Filesystem           Size  Used Avail Use% Mounted on
/dev/mapper/cl-root   58G 1003M   57G   2% /
devtmpfs             910M     0  910M   0% /dev
tmpfs                920M     0  920M   0% /dev/shm
tmpfs                920M  8.5M  912M   1% /run
tmpfs                920M     0  920M   0% /sys/fs/cgroup
/dev/sda1           1014M  139M  876M  14% /boot
tmpfs                184M     0  184M   0% /run/user/0

루트폴더가 아니라면 resize2fs 명령어가 가능하겠지만 운영중인 파티션이라서 xfs_growfs 명령어를 실행합니다.

그리고 df 명령어로 늘어난 사이즈를 확인하면 됩니다.


동영상으로 보기 https://youtu.be/YBMMssFK5q0


블로그 이미지

영은파더♥

가상서버호스팅 VPS 리눅스 서버관리 윈도우 IT

,