Browsing Tag

설치

IT/Linux/Kubernetes

Docker Kubernetes Online Study – Ubuntu 20.04 Install

안녕하세요. ManVSCloud 김수현입니다.

CloudNet@에서 진행했던 ANOS 2기 스터디에 이어 DKOS(DOCKER KUBERNETES ONLINE STUDY)의 기회를 얻게되었습니다.

핵심만 콕! 쿠버네티스

위 책을 기반으로 공부를 하게 될 것으로 보이며 스터디가 6월 6일부터 시작되어 Ubuntu 설치와 사전 권장 학습을 진행해야합니다.

오늘은 간단하게 Ubuntu 20.04 설치에 대해서 포스팅했습니다.


Ubuntu 20.04 Install

VirutalBox

VirutalBox는 위 링크에서 다운로드 받을 수 있으며 Ubuntu는 20.04 Server 버전으로 VirtualBox를 이용하여 설치해줄 것입니다.

일단 DKOS-Ubuntu-Master라는 이름으로 생성해주었습니다.
이후 Node를 OS부터 하나씩 설치하지않고 Master를 특정 부분까지 설치 및 설정 해준 뒤 스냅샷으로 Node를 생성할 것입니다.

English 선택
키보드 레이아웃 고르는 것입니다.
저는 Korean으로 선택해주었습니다.
네트워크 설정해주는 곳인데 저는 이곳에서 설정을 해줬습니다.
이후 서버 내에서 설정하는 것도 알려드리겠습니다.
DHCP로 하지않고 고정으로 설정 해보겠습니다.
저는 VirtualBox에서 네트워크 연결 방식을 “어댑터에 브릿지” 으로 설정해두었으므로
위와 같이 설정해주었습니다.
192.168.0.30을 Master IP로 사용할 것입니다.
이전에 CentOS 환경으로 Kubernetes를 설치 및 테스트한 경험이 있습니다.
이전에 테스트 당시 만들어둔 표인데 대충 참고만하면 좋을듯합니다.
Disk 파티션을 설정하는 곳입니다.
Custom storage layout을 선택하면 사용자 설정을 할 수 있지만 저는 그냥 통으로 설치했습니다.
사용자 계정과 패스워드 등을 설정해줍시다.
위 Install OpenSSH Server를 체크해줍시다.
이후 따로 설치해줄 필요없습니다.
설치가 진행되고 이후 update&reboot이 나오면 reboot을 진행해주고 설치를 마무리합니다.
설치가 완료되면 설치 시 생성한 사용자 계정을 통해 접속이 가능합니다.
설치가 완료되었다면 VirtualBox에서 스냅샷을 찍어줍시다.★
스냅샷을 찍어두는 습관은 이후에도 많은 도움이 됩니다.
putty를 이용하여 생성한 OS에 접근
Ubuntu 20.04 설치 완료

Today’s Tips

Ubuntu는 CentOS와 다른 것들이 많았습니다.
저도 Redhat 기반의 경험이 많아 데비안 환경은 조금 불편할 때가 많았습니다.

  • sudo
    (sudo su – 를 하여 root 계정으로 사용할 수 있지만 사용자 계정 환경에 익숙해져보려고 합니다.)
  • apt-get
    (CentOS에서는 패키지관리자가 yum으로 사용되었지만 Ubuntu에서는 apt-get으로 사용해줍니다. +rpm과 dpkg의 차이)

또한 Ubuntu18 이후 버전부터는 네트워크 설정 파일이 yaml 파일로 설정되어있습니다.
/etc/sysconfig/network-scripts/가 아닌 /etc/netplan/ 아래 yaml 파일을 이용하여 네트워크 설정이 가능합니다.

//편의를 위한 root 권한으로 변경
manvscloud@dkos-master:~$ sudo su -
[sudo] password for manvscloud:

//작업 전 백업
root@dkos-master:~# sudo cp -avp /etc/netplan/00-installer-config.yaml /etc/netplan/00-installer-config.yaml_org
'/etc/netplan/00-installer-config.yaml' -> '/etc/netplan/00-installer-config.yaml_org'
root@dkos-master:~# cat /etc/netplan/00-installer-config.yaml
# This is the network config written by 'subiquity'
network:
  ethernets:
    enp0s3:
      addresses:
      - 192.168.0.30/24
      gateway4: 192.168.0.1
      nameservers:
        addresses:
        - 168.126.63.1
        search:
        - 169.126.63.2
  version: 2

위 yaml 파일을 보면 설치 시 설정했던 IP와 nameserver 등이 들어가있는 것을 볼 수 있습니다.
위 파일 수정 후 적용은 아래 명령어로 적용할 수 있습니다.

root@dkos-master:~# netplan apply

이후 스냅샷으로 생성한 Node들의 IP 설정을 해줄 때 사용하게 될 것입니다.
추가로 Hostname 변경 방법도 추가해두겠습니다.

//현재 hostname 확인
root@dkos-master:~# hostnamectl status

//hostname 변경
root@dkos-master:~# hostnamectl set-hostname dkos-node1

//hosts 파일 변경
root@dkos-master:~# vi /etc/hosts

network 및 hostname 설정간에 큰 어려움 없으시길 바랍니다.


Personal Comments

Kubernetes 시험 등록 후 다른 여러 일정으로 아직까지 시험을 못보고 있었습니다.
CloudNet@에서 진행하는 DKOS로 쿠버네티스 학습에 조금 더 집중을 할 수 있게 될 것같습니다. 2021-08-17 전에 시험 합격을 목표로 하고 있어 “네이버 클라우드에서의 보안” 포스팅을 제외하고는 쿠버네티스에 몰두할 예정입니다.

기회를 주신 CloudNet@ 팀에 다시 한 번 감사의 인사 올리며 포스팅을 마무리 하겠습니다.
긴 글 읽어주셔서 감사합니다.

IT/Linux/Kubernetes

Rocky Linux 8.3 Release Candidate 1 출시 / Test Installation

안녕하세요. ManVSCloud 김수현입니다.

어제 일자로 기다리던 ROCKY LINUX 8.3 RELEASE CANDIDATE 1이 출시되었습니다.
아직 불안정한 시험판으로 나오긴 했으나 상당히 기대되지 않을 수 없습니다.

Rocky Linux 는 CentOS 프로젝트의 창시자인 Gregory Kurtzer 가 시작한 프로젝트로 현재의 CentOS 처럼 RHEL 의 공개 소스를 가져와서 다시 빌드하고 패키징하는 것을 목표로 하고 있으며 심지어 RHEL 의 버그까지 똑같이 재연하는 것을 목표로 하고 있습니다.

레드햇 측에서 CentOS 프로젝트가 CentOS 8 지원을 2021 년 말에 종료하는 것을 발표했었습니다. CentOS 7 버전이 2024 년까지 계속 지원될 예정이지만 CentOS 8의 지원 종료 기간이 2021년 12월 31일로 정해지며  Red Hat Enterprise Linux 8 에 대한 무료 배포판 역할이 사라지게 된 것입니다.

물론 아직까지 지원 종료가 되어버린 CentOS4,5,6을 사용하는 유저들도 존재하는 것으로 알고있습니다. 2024년도 이후 CentOS 7 마저 지원이 종료된다면 보안 패치의 부재와 Repo 중단으로 많은 불편함이 존재할 것입니다.

기존 CentOS 8 유저나 OS 버전 업이 필요할 경우 CentOS Stream으로 전환이 필요하게됩니다.

https://www.lesstif.com/lpt/centos-8-centos-stream-98927171.html

CentOS 가 종료되고 CentOS Stream 로 전환되는 22년부터는 아래와 같은 관계가 됩니다.

https://www.lesstif.com/lpt/centos-8-centos-stream-98927171.html

즉, 안정성 입증이 어려워졌고 신뢰성이 떨어진 현재 CentOS를 더 사용하기 애매해져버린 상황입니다.

오늘은 어제 발표된 ROCKY LINUX 8.3 RELEASE CANDIDATE 1을 간단하게 설치해보는 것까지 진행해볼 것이고 이후 서비스 운영부분까지 테스트해볼 예정입니다.


설치

설치는 간단하게 “Rocky-8.3-x86_64-minimal” 로 설치했습니다.
좌측에 Rocky Linux가 매력있는 듯합니다.

아직 정식 출시가 아닌 RC라 개발 및 테스트 목적으로만 사용하시길 바랍니다.

설치 및 부팅 후 CLI 콘솔 화면에서 Rocky 로고가 나옵니다.
Rocky Linux 설치 시 cockpit이 설치가 되어있나봅니다.

  • cokpit : Web UI 기반의 모니터링 및 관리 툴입니다.
원래는 9090포트입니다. (포트포워딩 해둬서 9999상태)
[아래 네트워크 작업을 한 뒤 확인 한 것]

NAME이 Rocky Linux로 나오네요.
멋있습니다.

네트워크 설정을 간단히 마쳐주고 간단하게 이런저런 설치만 해보았습니다.

Rocky Linux 8.3 AppStream 에서 dnf 로 php 설치 시 기본 버전이 7.2로 되어있습니다.

dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm

위 명령어처럼 EPEL 저장소를 추가해주어야 dnf module list php 명령어를 입력했을 때 추가 버전을 확인할 수 있을 것입니다.

그외에도 ImageMagick을 설치 시 –set-enabled powertools 을 해주어야하는 부분 역시 CentOS 8과 동일했습니다.

dnf install -y epel-release
dnf install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
dnf config-manager --set-enabled powertools
dnf install -y ImageMagick ImageMagick-devel
pecl install imagick
echo "extension=imagick.so" > /etc/php.d/20-imagick.ini
cat /etc/php.d/20-imagick.ini

# Repo 추가 및 사용 방법도 CentOS8과 동일함

vi /etc/yum.repos.d/MariaDB.repo

[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.5/centos8-amd64
module_hotfixes=1
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

dnf install MariaDB-server MariaDB-client –disablerepo=AppStream

그 외에도 이런 저런 간단한 설치들을 하는데에 크게 문제없이 잘 되는듯보였습니다.
간단한 설치 테스트는 여기서 마치고 이후에는 CentOS 7에서 서비스를 CentOS8로 이전, 서비스 정상 작동 여부까지 확인 해볼 것입니다.


후기

오래 전부터 기다리고 있던 Rocky Linux의 RC 1 이 나와서 정말 기뻤습니다.
이번 설치 테스트 때 GUI 설치 후 GUI 구경을 못해본 게 아쉬운데 다음 테스트 때 설치해서 구경해야겠습니다.

Rocky Linux의 정식 출시를 응원하며 글을 마무리하도록 하겠습니다.

긴글 읽어주셔서 감사합니다.

Dev

[Dev] 도커를 이용한 jupyter notebook Install & pandas test

안녕하세요. ManVSCloud 김수현입니다.

최근에 슬슬 개발 언어를 배워볼 필요성을 느끼게 되었습니다.
제가 배워보기로 한 언어는 Python입니다.

Python이 배우기 쉬운 언어라 선택하기보다 제가 만들고 싶은 것도 있고 해보고 싶은 작업에 Python이 필요로 하기때문에 선택하게 되었습니다.


Python을 배워 데이터 분석과 Python용 AWS SDK인 boto3에 활용할 예정이며
언어를 배우기 앞서 웹 브라우저를 통해 코드 작성 후 실행을 해볼 수 있도록
“JUPYTER NOTEBOOK”을 설치할 것입니다.


ENV & BASE INSTALL

우선 고정적인 Python 버전과 변경된 Python 버전으로 인해 다른 시스템에 영향이 가는 것을 원하지 않아 독립된 가상 환경이 필요했습니다.

# OS : CentOS7
# Virtualization approach : Docker
# Python : 3.8.6
# Jupyter : 6.2.0

pyenv, virtualenv, anaconda, docker, kubernetes 등 다양한 선택지가 있었으나
저는 제가 조금 더 익숙한 docker를 이용하여 설치를 하였습니다.

아래 기본적인 설정과 docker 설치를 남겨놓았으나 이 포스팅은 Jupyter 설치가 메인이라 docker 설치 방법에 대한 설명을 따로 하지않도록 하겠습니다.

setenforce 0

sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config

[root@localhost jupyter]# sestatus | grep config
Mode from config file: disabled

yum update -y && yum install -y yum-utils

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

yum install -y docker-ce

curl -L https://github.com/docker/compose/releases/download/1.25.0-rc2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

cd /usr/local/bin

chmod +x docker-compose

base=https://github.com/docker/machine/releases/download/v0.16.0 && curl -L $base/docker-machine-$(uname -s)-$(uname -m) >/tmp/docker-machine && sudo install /tmp/docker-machine /usr/local/bin/docker-machine

systemctl enable docker
systemctl start docker

Jupyter NoteBook Install

docker와 docker-compose 설치 및 실행을 끝마치고
vi docker-compose.yaml 를 하여 아래와 같은 .yaml 파일을 생성합니다.

version:                "3"
services:
  datascience-notebook:
      image:            jupyter/datascience-notebook
      volumes:
        - /docker/jupyter:/home/jovyan/work
      ports:
        - 8888:8888
      container_name:   jupyter-container

위 사이트에서 처럼 원하시는 옵션에 맞게 사용자 지정하여 파일을 생성하셔도 좋습니다.

이후 docker-compose up -d 명령어를 이용하여 실행할 수 있습니다.
-d 옵션을 줘야 백그라운드로 실행이 됩니다.

jupyter의 경우 실행 시 토큰 값을 알아야 접속이 가능합니다.
(옵션에서 토큰or패스워드 값을 제거할 수도 있습니다.)

백그라운드로 실행했을 때는 docker-compose logs 명령어를 이용하여 확인이 가능합니다.

정상적으로 접근이 되지않고 302 에러가 발생할 경우 방화벽 문제가 있을 수 있습니다.
방화벽을 확인해보시기 바랍니다.

[root@localhost jupyter]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f1ccb4d9ba04 jupyter/datascience-notebook “tini -g — start-no…” About an hour ago Up 56 minutes 0.0.0.0:8888->8888/tcp jupyter-container

docker ps 명령어로 실행된 docker 컨테이너를 확인 할 수 있으며
docker exec -it f1ccb4d9ba04 /bin/bash (docker exec -it CONTAINER ID /bin/bash) 를 이용할 경우
컨테이너 내부로 접속이 가능합니다.

  • docker-compose 재시작 시 자동 실행 등록

vi /etc/systemd/system/docker-compose.service

[Unit]
Description=Docker Compose Application Service
Requires=docker.service
After=docker.service

[Service]
Type=oneshot
RemainAfterExit=yes
WorkingDirectory=/develop/docker
ExecStart=/usr/local/bin/docker-compose up -d
ExecStop=/usr/local/bin/docker-compose down
TimeoutStartSec=0

[Install]
WantedBy=multi-user.target

systemctl daemon-reload
systemctl enable docker-compose


pandas 라이브러리 테스트

마지막으로 생성한 jupyter notebook을 이용하여 python의 pandas 라이브러리를 테스트 해보겠습니다.

[New]에서 Python3을 선택합니다.
import pandas as pd

df = pd.DataFrame(
[[30, 173, 61],
[27, 181, 79],
[26, 158, 45]],
index=[1, 2, 3],
columns=['Age', 'Height', 'Weight'])

df

코드는 간단하게 테스트용으로 사용하였습니다.

pandas 라이브러리 테스트까지 정상적으로 마무리되었습니다.
지금부터라도 Python 공부를 해봐야겠습니다.


참고 사이트

긴 글 읽어주셔서 감사합니다.

IT/Linux/Kubernetes

PHP8.0.1 컴파일 설치 (APM+wordpress)

안녕하세요. ManVSCloud 김수현입니다.

오늘은 2021-01-07에 나온 PHP 8.0.1 버전을 컴파일 설치해보려고 합니다.

테스트는 WordPress까지 연동하여 정상적으로 플러그인 설치 및 글쓰기가 되는지까지 확인할 것입니다.

Environment

CentOS Linux release 7.7.1908 (Core) x86_64
CPU : Intel(R) Xeon(R) CPU E5-2686 v4 @ 2.30GHz (4core)
Memory : 16G
(PHP 컴파일 시 out of memory 발생하여 인스턴스 크기를 m4.xlarge로 하여 테스트 했습니다.)
Apache : httpd-2.4.6-97.el7.centos.x86_64
PHP : PHP 8.0.1 (cli)
MariaDB : MariaDB-server-10.4.17-1.el7.centos.x86_64
WordPress : 5.6

Apache와 MariaDB는 RPM으로 설치하였습니다.

Basic Install & Setting

1  cat -n /etc/selinux/config
2  sed -i '7s/enforcing/disabled/g' /etc/selinux/config
3  yum install gcc gcc* make cmake libtool wget zip unzip autoconf automake libjpeg-devel libpng-devel freetype-devel libxml2-devel libicu* hspell libvoikko enchant-devel libffi-devel libcurl-devel libldap* sqlite-devel "Image*" *imap-devel pam-devel openssl-devel firebird-devel aspell-devel readline-devel net-snmp-devel libsodium-devel yum install libtidy libtidy-devel libxslt-devel git bzip2-devel 

#(위에서 설치가 안될 수도 있습니다. 이후 epel 추가 후 재설치하면 나머지가 설치됩니다.)

4  init 6

원활한 설치를위해 selinux 기능을 꺼주고 기본 라이브러리들을 설치해준 뒤
재시작을 해줍니다.
(기본 라이브러리는 사용하실 부분만 골라서 설치하셔도 됩니다.)

Apache & MariaDB Install

[Apache]

yum install httpd httpd-devel -y
cp -avp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf_org

#[root@ip-10-0-1-238 conf]# cat -n /etc/httpd/conf/httpd.conf | grep Indexes
#135 # Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
#144 Options Indexes FollowSymLinks

sed -i '144s/Indexes//g' /etc/httpd/conf/httpd.conf
#(144번줄에 있는 Indexes를 제거해주도록 하겠습니다.)

#[root@ip-10-0-1-238 ~]# cat -n /etc/httpd/conf/httpd.conf | grep -A 3 "Directory /"
#102 <Directory />
#103 AllowOverride none
#104 Require all denied
#105 </Directory>

perl -p -i -e '$.==104 and print " Require all granted\n"' /etc/httpd/conf/httpd.conf
sed -i '105s/ Require all denied/#&/' /etc/httpd/conf/httpd.conf
#(104 번줄에 접근 허용 설정 및 denied 부분은 주석 처리해주겠습니다.)

#[root@ip-10-0-1-238 ~]# cat -n /etc/httpd/conf/httpd.conf | grep -A 4 "Directory /"
#102 <Directory />
#103 AllowOverride none
#104 Require all granted
#105 # Require all denied
#106 </Directory>

cat << EOF >> /etc/httpd/conf/httpd.conf
ServerTokens Prod
ServerSignature Off
<IfModule mpm_prefork_module>
StartServers 40 
MinSpareServers 25 
MaxSpareServers 100 
ServerLimit 1024 
MaxRequestWorkers 1024 
MaxConnectionsPerChild 0
</IfModule>
IndexIgnore *
EOF

cat /etc/httpd/conf/httpd.conf | tail -n 11
#위 명령어로 httpd.conf에 옵션이 잘 들어갔는지 확인합니다.

cat << EOF > /etc/httpd/conf.d/vhost.conf
<VirtualHost *:80>
ServerName php.manvscloud.com
DocumentRoot /home/php/wordpress/
</VirtualHost>
EOF

mkdir -p /home/php/wordpress

apachectl -S
#위 명령어로 virtual host가 정상적으로 추가되었는지 확인합니다.

systemctl enable httpd
systemctl start httpd

[MariaDB]

cat << EOF > /etc/yum.repos.d/MariaDB.repo
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.4/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
EOF

yum install MariaDB-server MariaDB-client -y

systemctl enable mariadb
systemctl start mariadb

mysql -uroot -p

create database wordpress;
create user 'manvscloud'@'localhost' identified by 'PW';
grant all privileges on wordpress.* to 'manvscloud'@'localhost';
flush privileges;
exit

PHP 8.0.1

cd /usr/local/src
wget https://www.php.net/distributions/php-8.0.1.tar.gz
tar zxvf php-8.0.1.tar.gz
./configure –help > phpconf_help.txt

생성한 phpconf_help.txt 를 잘 읽어보자. ★★★★★

아래는 php 컴파일 중에 설치가 덜 되거나 추가로 설정해주어야하는 부분이 있어
정리해보았습니다.
(oracle, postgresql 제외)

컴파일 중 oniguruma가 없다는 에러가 발생했습니다.
(No package ‘oniguruma’ found)

oniguruma-devel를 설치해주어야하는데 epel-release 설치를 하지 않고
oniguruma-devel를 설치할 경우 패키지를 찾을 수 없습니다.

(No package oniguruma-devel available.)

yum install epel-release
yum install oniguruma-devel

-. libzip
configure: error: Package requirements (libzip >= 0.11 libzip != 1.3.1 libzip != 1.7.0) were not met:No package ‘libzip’ found

CentOS7에서 libzip yum으로 설치할 경우 0.10.1-8.el7으로만 설치되어 따로 컴파일해주었습니다.

cd /usr/local/src
wget https://libzip.org/download/libzip-1.7.3.tar.gz
tar zxvf libzip-1.7.3.tar.gz
cd libzip-1.7.3
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/libzip

libzip 1.7.3 버전을 컴파일 하기위해서는 cmake 3.0.2 이상이 필요했습니다.
CMake Error at CMakeLists.txt:1 (cmake_minimum_required):
CMake 3.0.2 or higher is required. You are running version 2.8.12.2


wget https://github.com/Kitware/CMake/releases/download/v3.18.5/cmake-3.18.5-Linux-x86_64.tar.gz
tar zxvf cmake-3.18.5-Linux-x86_64.tar.gz
mv cmake-3.18.5-Linux-x86_64 /usr/local/cmake

/usr/local/cmake/bin/cmake -DCMAKE_INSTALL_PREFIX=/usr/local/libzip
make && make install

export PKG_CONFIG_PATH=/usr/local/libzip/lib64/pkgconfig
(이후 /etc/profile 에 넣어 줍시다.)

-. ldap
cp -frp /usr/lib64/libldap* /usr/lib

./configure --prefix=/usr/local/php \
--with-apxs2=/usr/bin/apxs \
--with-config-file-path=/etc/ \
--with-config-file-scan-dir=/etc/php.d \
--enable-gd \
--with-zlib \
--with-freetype \
--with-jpeg \
--with-curl \
--with-pear \
--with-openssl \
--enable-bcmath \
--with-bz2 \
--enable-calendar \
--enable-ctype \
--enable-dba \
--enable-dom \
--with-enchant \
--enable-exif \
--with-ffi \
--enable-fileinfo \
--enable-filter \
--enable-ftp \
--with-gettext \
--with-gmp \
--with-iconv \
--enable-intl \
--with-ldap \
--enable-mbstring \
--with-mysqli \
--enable-mysqlnd \
--enable-pcntl \
--enable-pdo \
--with-pdo_firebird \
--with-pdo_mysql \
--with-pdo_sqlite \
--enable-phar \
--enable-posix \
--with-pspell \
--with-readline \
--enable-session \
--enable-shmop \
--with-snmp \
--enable-soap \
--enable-sockets \
--with-sodium \
--with-sqlite3 \
--enable-sysvmsg \
--enable-sysvsem \
--enable-sysvshm \
--with-tidy \
--enable-tokenizer \
--with-xsl \
--with-zip \
--enable-simplexml \
--with-libxml \
--enable-xml \
--enable-xmlreader \
--enable-xmlwriter \
--enable-opcache
make -j `grep processor /proc/cpuinfo | wc -l`
#(j옵션을 주어 컴파일 속도를 최적화 합니다.)

/bin/ld: ext/ldap/ldap.o: undefined reference to symbol 'ber_memfree'
#(make 중에 ldap 쪽에서 위와 같은 에러가 발생했습니다.)
#(아래처럼 Makefile을 수정할 필요가 있었습니다.)

vi Makefile
EXTRA_LIBS = -lcrypt -ltidy -lresolv -lcrypt -lreadline -lncurses -laspell -lpspell -lfbclient -lrt -lldap -llber -lstdc++ -lgmp -lbz2 -lutil -lrt -lm -ldl -lxml2 -lssl -lcrypto -lsqlite3 -lz -lcurl -lxml2 -lenchant -lgmodule-2.0 -lglib-2.0 -lffi -lssl -lcrypto -lz -lpng15 -ljpeg -lfreetype -licuio -licui18n -licuuc -licudata -lonig -lsqlite3 -lxml2 -lnetsnmp -lssl -lssl -lcrypto -lm -lxml2 -lsodium -lxml2 -lxml2 -lxml2 -lxslt -lz -ldl -lm -lxml2 -lexslt -lxslt -lz -lm -lgcrypt -ldl -lgpg-error -lxml2 -lzip -lz -lssl -lcrypto -lcrypt
#(위와 동일한 에러 발생 시 Makefile에 EXTRA_LIBS 쪽에 -llber 추가)

make -j `grep processor /proc/cpuinfo | wc -l`
make install

cp -avp php.ini-production /etc/php.ini


cat << EOF >> /etc/profile
export PKG_CONFIG_PATH=/usr/local/libzip/lib64/pkgconfig
PATH=$PATH:/usr/local/php/bin
export PATH
EOF

source /etc/profile

< imagick 모듈 추가 >
cd /usr/local/src
wget https://pecl.php.net/get/imagick-3.4.4.tgz
tar zxvf imagick-3.4.4.tgz
cd imagick-3.4.4
phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make

/usr/local/src/imagick-3.4.4/imagick_file.c:313:112: error: expected ??;??, ??,?? or ??)?? before ??TSRMLS_DC??
zend_bool php_imagick_stream_handler(php_imagick_object *intern, php_stream *stream, ImagickOperationType type TSRMLS_DC)
^
make: *** [imagick_file.lo] Error 1


(php8에서는 imagick이 정상적으로 설치가 되지않고 Error가 발생했습니다.
동일한 오류가 해외쪽에서도 있었는지 찾다보니 git에서 8버전에서 사용할 수 있는
imagick을 찾게 되었습니다.)

git clone https://github.com/Imagick/imagick.git
cd imagick
phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make

mkdir -p /etc/php.d/modules
cp -a /usr/local/src/imagick/modules/imagick.so /etc/php.d/modules/imagick.so
< opcache 모듈 설치 >

컴파일 시 추가했던 opcache가 자동으로 올라오지 않아 수동으로 추가해주었습니다.

cd /usr/local/src/php-8.0.1/ext/opcache
phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make
cp -a /usr/local/src/php-8.0.1/ext/opcache/modules/opcache.so /etc/php.d/modules/opcache.so

(php.ini에 imagick과 opcache 모듈을 추가 해줍니다.)
cat << EOF >> /etc/php.ini
extension=/etc/php.d/modules/imagick.so
zend_extension=/etc/php.d/modules/opcache.so
EOF

마지막으로 httpd.conf에 아래 값을 추가 한 뒤 마무리합니다.

<IfModule dir_module>
DirectoryIndex index.html index.php
</IfModule>

AddType application/x-httpd-php .php .htm .html .inc
AddType application/x-httpd-php-source .phps


WordPress Install & TEST

cd /home/php
wget https://ko.wordpress.org/latest-ko_KR.tar.gz
tar zxvf latest-ko_KR.tar.gz
cd wordpress
cp -a wp-config-sample.php wp-config.php

vi wp-config.php

wp.config.php에서 위 mariadb에서 만들어준 DB와 계정 정보를 넣어줍니다.

/** The name of the database for WordPress */
define( ‘DB_NAME’, ‘wordpress’ );
/** MySQL database username */
define( ‘DB_USER’, ‘manvscloud’ );
/** MySQL database password */
define( ‘DB_PASSWORD’, ‘PW’ );
/** MySQL hostname */
define( ‘DB_HOST’, ‘127.0.0.1’ );
/** Database Charset to use in creating database tables. */
define( ‘DB_CHARSET’, ‘utf8’ );
/** The Database Collate type. Don’t change this if in doubt. */
define( ‘DB_COLLATE’, ” );

임시로 /home/php 사용자/그룹 권한을 apache로 한 뒤 Apache를 재시작합니다.
(테스트 후 사용자/그룹 권한을 변경하는 것을 권장합니다.)

chown -R apache:apache /home/php
apachectl rstart

[ 사이트 접속 해보기 ]

글쓰기 테스트 및 플러그인 설치/활성화까지 잘 되었습니다.
(플러그인 설치를 원활히 하려면 wp-config.php에 추가 옵션이 필요할 수 있습니다.)

PHP8에서 추가되거나 달라지는 부분은 추가 링크로 남기도록 하겠습니다.
https://www.php.net/releases/8.0/en.php
https://www.inflearn.com/course/php8-new-features#

PHP 8버전 컴파일은 성공적이었습니다.
마지막으로 PHP 8 컴파일 컨텐츠를 해볼 수 있도록 제안해주신 리눅서님에게
감사의 인사 올립니다. 많은 공부가 되었습니다.
https://linuxer.name/

긴 글 읽어주셔서 감사합니다.

IT/Linux/Kubernetes

Tomcat 8.5.58 설치 + Apache 연동

안녕하세요? ManVSCloud 김수현입니다.

오늘은 Tomcat 설치 및 Apache 연동을 해보겠습니다.
(전에 했던 거 미루고 미루다 이제서야 글을 올립니다)

-. Env
* OS : CentOS 7 + 3.10.0-1127.19.1.el7.x86_64
* Apache : 2.4.6
* Tomcat : 8.5.58
* jdk : 1.8

설치 환경은 위 내용과 같으며 apache와 tomcat만 연동할 것입니다.

-. 기본 설치

yum install httpd httpd-devel -y
yum install gcc autoconf libtool -y
yum install java-1.8.0-openjdk-devel.x86_64 -y
wget http://mirror.apache-kr.org/tomcat/tomcat-8/v8.5.58/bin/apache-tomcat-8.5.58.tar.gz
wget https://downloads.apache.org/tomcat/tomcat-connectors/jk/tomcat-connectors-1.2.48-src.tar.gz

tar zxvf apache-tomcat-8.5.58.tar.gz

tar zxvf tomcat-connectors-1.2.48-src.tar.gz
cd tomcat-connectors-1.2.48-src/native
./buildconf.sh
./configure –with-apxs=/usr/bin/apxs
make && make install

-. /etc/httpd/conf/httpd.conf

LoadModule jk_module modules/mod_jk.so

-. /etc/httpd/conf/uriworkermap.properties

/*.do=ajp13
/*.jsp=ajp13

-. /etc/httpd/conf/workers.properties

# tomcat location
workers.tomcat_home=”/usr/local/src/apache-tomcat-8.5.58″

# jdk
# ll /usr/lib/jvm | grep openjdk
workers.java_home=”/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.262.b10-0.el7_8.x86_64″

worker.list=manvscloud

worker.manvscloud.port=8009
worker.manvscloud.host=localhost
worker.manvscloud.type=ajp13

-.server.xml_sample

116 <!–
117 <Connector protocol=”AJP/1.3″
118 address=”::1″
119 port=”8009″
120 redirectPort=”8443″ />
121 –>

152 <Host name=”localhost” appBase=”webapps”
153 unpackWARs=”true” autoDeploy=”true”>

설치한 tomcat의 conf 디렉토리에 server.xml 파일이 있습니다.
기존 server.xml을 백업해두고 아래와 같이 설정값을 변경합니다.

-. server.xml

116 <Connector protocol=”AJP/1.3″
117 port=”8009″
118 secretRequired=”false”
119 redirectPort=”8443″ />

152 <Host name=”localhost” appBase=”/home/manvscloud/public_html/”
153 unpackWARs=”true” autoDeploy=”true” xmlValidation=”false” xmlNamespaceAware=”false”>
154 <Context path=”” docBase=”.” reloadable=”true”/>

-. /home/manvscloud/public_html/index.jsp
tomcat이 apache와 연동되는지 확인하기 위해 테스트를 확인할 index.jsp를 준비합니다.

<%– JSP test.jsp –%>
<%@ page language=”java”%>
<%!
int a= 192;
int b= 168;
%>
<%
int c = 0;
c=a+b;
%>

<html>
<head><title> JSP Test </title></head>
<body>
c= <%=c%>
</body>
</html>

-. /etc/httpd/conf/jk.conf

<IfModule jk_module>
JkWorkersFile “/etc/httpd/conf/workers.properties”
JkMountFile “/etc/httpd/conf/uriworkermap.properties”
JkLogFile logs/mod_jk.log
JKLogStampFormat “[%y %m %d %H:%M:%S]”
JkLogLevel info

JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
</IfModule>

-. /etc/httpd/conf/vhost.conf

<VirtualHost *:80>
DocumentRoot “/home/manvscloud/public_html/index.jsp”
ServerName localhost

JkMount /* manvscloud
JkMount /*.jsp manvscloud
JkMount /servlet/* manvscloud
</VirtualHost>

-. Execution
이제 설정이 끝났으니 실행하여 테스트 페이지가 잘 나오는지 확인해보아야합니다.
int a= 192;
int b= 168;
c = a+b; 를 해두고 c= <%=c%>로 불러냈으니 c는 192+168인 360이라는
결과의 페이지가 나오면 정상적으로 해낸 것입니다.

systemctl enable httpd
systemctl start httpd
/usr/local/src/apache-tomcat-8.5.58/bin/startup.sh

-. 페이지 출력


저같은 경우 기존 VirtualBox에 NAT로 쓰고있던 가상 서버를 이용하여 테스트 하였습니다.

80을 8888로 포트포워딩 해두어 해당 페이지로 이동하면
아파치와 톰캣이 잘 연동된 것을 확인 할 수 있습니다.

정상적으로 테스트를 마쳤습니다.

읽어주셔서 감사합니다.