Linux Server - ynjch97/YNJCH_WIKI GitHub Wiki

1. ꡬ성

  • ν”„λ‘œμ νŠΈλͺ…은 ProjYj2024, μ‚¬μš©μžλŠ” projyj 라고 κ°„μ£Όν•˜κ³  μ„€λͺ…함
    • μ‹ κ·œ κ°œλ°œν•œ ProjYj2024, 기쑴에 개발된 ProjYjSvr(ProjYj) ν”„λ‘œμ νŠΈμ— λͺ¨λ‘ 접속할 수 μžˆλ„λ‘ ꡬ성함
    • ProjYj2024 λŠ” ProjYjSvr 의 API λ₯Ό μ‚¬μš©

1-1. SSD

  • Oracel/MySQL μ—”μ§„
  • μ„œλ²„
  • OS : CentOs Stream 9

πŸ”Ά CentOs Stream 9

  • IP : 192.168.1.999 / PORT : 22
  • ID : root / PW : password$$

1-2. HDD

  • DB

πŸ”Ά MySQL

  • ID : root / PW : password$$

1-3. ν¬νŠΈλ³„ 접속 정보

πŸ”Ά Jenkins

  • 초기 νŒ¨μŠ€μ›Œλ“œ : 070b01f500e94ca1b1a3c3fa01b0c911
  • Admin User 정보

πŸ”Ά Github

2. CentOs Stream 9

πŸ”Ά Keyboard

  • English 둜 섀정함

πŸ”Ά Installation Destination

  • μ €μž₯μ†Œ ꡬ성은 λ³€κ²½ν•˜μ§€ μ•Šκ³  기본으둜 μ„€μΉ˜ν•˜μ˜€μŒ

πŸ”Ά μ†Œν”„νŠΈμ›¨μ–΄ 선택

  • μ„€μΉ˜ν•˜κ³  싢은 ν™˜κ²½μ„ 선택 ν›„ Done
  • 일반적으둜 ν…ŒμŠ€νŠΈ λͺ©μ μœΌλ‘œ Server with GUI ν™˜κ²½μœΌλ‘œ μ„€μΉ˜

πŸ”Ά Network & Host

  • 이더넷이 잘 μΌœμ ΈμžˆλŠ”μ§€ 확인 ν›„ Done

2-1. 접속

  • CentOs Stream 9 λΆ€νŒ… > root κ³„μ •μœΌλ‘œ 접속 > IP 확인
[root@localhost ~]$ hostname -I
192.168.1.999
  • Putty 둜 ssh μ ‘μ†ν•˜μ—¬ 계속 μ§„ν–‰

πŸ”Ά OS 정보 확인

  • cat /etc/os-release
[root@localhost ~]# cat /etc/os-release
NAME="CentOS Stream"
VERSION="9"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="9"
PLATFORM_ID="platform:el9"
PRETTY_NAME="CentOS Stream 9"
ANSI_COLOR="0;31"
LOGO="fedora-logo-icon"
CPE_NAME="cpe:/o:centos:centos:9"
HOME_URL="https://centos.org/"
BUG_REPORT_URL="https://bugzilla.redhat.com/"
REDHAT_SUPPORT_PRODUCT="Red Hat Enterprise Linux 9"
REDHAT_SUPPORT_PRODUCT_VERSION="CentOS Stream"

πŸ”Ά hostnamectl 정보

  • 아무 μΈμžμ—†μ΄ hostnamectl μ‹€ν–‰ μ‹œ > μ‹œμŠ€ν…œμ˜ 호슀트λͺ…, Chassis, Machine ID, Boot ID, 가상화, 컀널 버전 λ“±μ˜ 정보λ₯Ό 좜λ ₯
  • 호슀트λͺ… λ³€κ²½ μ‹œ : set-hostname κ³Ό λ³€κ²½ν•  호슀트λͺ…을 μž…λ ₯ (hostnamectl set-hostname [λ³€κ²½ν•  호슀트λͺ…])
[root@localhost ~]# hostnamectl
   Static hostname: (unset)
Transient hostname: localhost
         Icon name: computer-desktop
           Chassis: desktop πŸ–₯️
        Machine ID: aea36b66c60547078fd6d43ffc1a4736
           Boot ID: afece10043164066a0a98a689a500628
  Operating System: CentOS Stream 9
       CPE OS Name: cpe:/o:centos:centos:9
            Kernel: Linux 5.14.0-427.el9.x86_64
      Architecture: x86-64
   Hardware Vendor: Micro-Star International Co., Ltd.
    Hardware Model: MS-7D22
  Firmware Version: 1.30

2-2. νŒŒν‹°μ…˜ 확인

[root@localhost ~]# fdisk -l
Disk /dev/nvme0n1: 465.76 GiB, 500107862016 bytes, 976773168 sectors
Disk model: Samsung SSD 970 EVO Plus 500GB
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 3B8AB5CB-8566-4D97-AB1B-9596BE837479

Device           Start       End   Sectors   Size Type
/dev/nvme0n1p1    2048   1230847   1228800   600M EFI System
/dev/nvme0n1p2 1230848   3327999   2097152     1G Linux filesystem
/dev/nvme0n1p3 3328000 976773119 973445120 464.2G Linux LVM


Disk /dev/sda: 3.64 TiB, 4000787030016 bytes, 7814037168 sectors
Disk model: HGST HDN724040AL
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: 42B2D9E1-D9F9-4E97-A835-008CB7AC2269

Device     Start        End    Sectors  Size Type
/dev/sda1   2048 7814035455 7814033408  3.6T Microsoft basic data


Disk /dev/mapper/cs-root: 70 GiB, 75161927680 bytes, 146800640 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/mapper/cs-swap: 15.65 GiB, 16806576128 bytes, 32825344 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/mapper/cs-home: 378.52 GiB, 406432251904 bytes, 793812992 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
  • 블둝 μž₯치λ₯Ό λ‚˜μ—΄ : lsblk
    • -f : λ””μŠ€ν¬μ— λŒ€ν•œ μΆ”κ°€ 정보 확인 κ°€λŠ₯
    • Linux μ»΄ν“¨ν„°μ˜ λ””μŠ€ν¬μ™€ νŒŒν‹°μ…˜μ„ λ³Ό 수 있음
[root@localhost ~]# lsblk
NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
sda           8:0    0   3.6T  0 disk
└─sda1        8:1    0   3.6T  0 part
nvme0n1     259:0    0 465.8G  0 disk
β”œβ”€nvme0n1p1 259:1    0   600M  0 part /boot/efi
β”œβ”€nvme0n1p2 259:2    0     1G  0 part /boot
└─nvme0n1p3 259:3    0 464.2G  0 part
  β”œβ”€cs-root 253:0    0    70G  0 lvm  /
  β”œβ”€cs-swap 253:1    0  15.7G  0 lvm  [SWAP]
  └─cs-home 253:2    0 378.5G  0 lvm  /home

[root@localhost ~]# lsblk -f
NAME        FSTYPE      FSVER    LABEL   UUID                                   FSAVAIL FSUSE% MOUNTPOINTS
sda
└─sda1      ntfs                 μƒˆ λ³Όλ₯¨ E4E8BF2DE8BEFD3C
nvme0n1
β”œβ”€nvme0n1p1 vfat        FAT32            933D-493E                               591.3M     1% /boot/efi
β”œβ”€nvme0n1p2 xfs                          b4540b96-808f-4545-8966-77d007090acf    654.4M    32% /boot
└─nvme0n1p3 LVM2_member LVM2 001         5JEvcU-09gj-HmWW-FznL-mQ7n-oKBq-je5vqM
  β”œβ”€cs-root xfs                          9548f8c3-cb9a-4d44-918d-a24064024222     62.8G    10% /
  β”œβ”€cs-swap swap        1                e291fe33-1624-46e7-ac50-4a0d6548e92a                  [SWAP]
  └─cs-home xfs                          3d3e737e-3c9d-438e-ad4b-0a87558a061c    375.7G     1% /home
  • ν•˜λ“œμ›¨μ–΄ 정보 확인 : hwinfo
    • ν•˜λ“œμ›¨μ–΄, 특히 μ €μž₯ λ””μŠ€ν¬μ— λŒ€ν•œ 정보λ₯Ό λ³΄λŠ” 데 유용
# λ””μŠ€ν¬ λ˜λŠ” ν•΄λ‹Ή νŒŒν‹°μ…˜μ— λŒ€ν•œ 정보
[root@localhost ~]# sudo hwinfo --disk
# 블둝 μž₯치의 κ°œμš”
[root@localhost ~]# sudo hwinfo --short --block
# λͺ¨λ“  λ””μŠ€ν¬μ˜ μš”μ•½
[root@localhost ~]# sudo hwinfo --disk --short
  • Logical Volume μƒνƒœ : lvdisplay
    • LVM(Logical Volume Manager) : 물리적 ν•œκ³„μ— μ œμ•½λ°›μ§€ μ•Šκ³  λ””μŠ€ν¬λ₯Ό 효율적으둜 λΆ„ν• ν•˜μ—¬ μ‚¬μš© κ°€λŠ₯
    • LV 둜 λ‚˜λ‰œ νŒŒν‹°μ…˜μ€ μ΅œμ’…μ μœΌλ‘œ 파일 μ‹œμŠ€ν…œμ„ ν• λ‹Ήλ°›κ³  νŠΉμ • 디렉토리에 마운트 될 수 있음
[root@localhost ~]# lvdisplay
  --- Logical volume ---
  LV Path                /dev/cs/swap
  LV Name                swap
  VG Name                cs
  LV UUID                1PJ2Bq-YVVQ-bWwC-Mcc5-GXNG-may4-IzfLRw
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2024-03-15 09:41:23 +0900
  LV Status              available
  # open                 2
  LV Size                15.65 GiB
  Current LE             4007
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:1

  --- Logical volume ---
  LV Path                /dev/cs/home
  LV Name                home
  VG Name                cs
  LV UUID                DNN5i1-x5Gy-j4jH-7nOd-n3sC-bg4n-pH1Y6K
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2024-03-15 09:41:23 +0900
  LV Status              available
  # open                 1
  LV Size                <378.52 GiB
  Current LE             96901
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:2

  --- Logical volume ---
  LV Path                /dev/cs/root
  LV Name                root
  VG Name                cs
  LV UUID                Nbo7SF-68jP-2IsP-Sd4e-K4kt-vAXa-4baXqc
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2024-03-15 09:41:23 +0900
  LV Status              available
  # open                 1
  LV Size                70.00 GiB
  Current LE             17920
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0

πŸ”Ά bash: hwinfo: command not found...

  • μ•„λž˜ λͺ…λ Ήμ–΄λ‘œ μ„€μΉ˜λΆ€ν„° μ§„ν–‰
sudo apt install hwinfo         [On Debian, Ubuntu and Mint]
sudo yum install hwinfo         [On RHEL/CentOS/Fedora and Rocky Linux/AlmaLinux]
sudo emerge -a sys-apps/hwinfo  [On Gentoo Linux]
sudo pacman -S hwinfo           [On Arch Linux]
sudo zypper install hwinfo      [On OpenSUSE]   

πŸ”Ά μ €μž₯ 곡간 확인

  • μ €μž₯ 곡간 확인 : df [μ˜΅μ…˜] [디렉토리 λ˜λŠ” 마운트 지점]
    • -h : human-readable μ˜΅μ…˜μ„ μ‚¬μš©ν•˜λ©΄ μš©λŸ‰μ„ 보기 μ‰¬μš΄ ν˜•μ‹μœΌλ‘œ 좜λ ₯
    • 디렉토리 λ˜λŠ” 마운트 지점 : νŠΉμ • λ””λ ‰ν† λ¦¬λ‚˜ 마운트 μ§€μ μ˜ 파일 μ‹œμŠ€ν…œ μ •λ³΄λ§Œ ν‘œμ‹œ
[root@localhost ~]# df -h
Filesystem           Size  Used Avail Use% Mounted on
devtmpfs             4.0M     0  4.0M   0% /dev
tmpfs                 16G     0   16G   0% /dev/shm
tmpfs                6.2G   18M  6.2G   1% /run
/dev/mapper/cs-root   70G  7.2G   63G  11% /
/dev/nvme0n1p2       960M  306M  655M  32% /boot
/dev/mapper/cs-home  379G  2.7G  376G   1% /home
/dev/nvme0n1p1       599M  7.5M  592M   2% /boot/efi

πŸ”Ά Linux GUI

  • Linux λ°μŠ€ν¬ν†± 컴퓨터 > GUI(κ·Έλž˜ν”½ μ‚¬μš©μž μΈν„°νŽ˜μ΄μŠ€) μ• ν”Œλ¦¬μΌ€μ΄μ…˜ > λ””μŠ€ν¬ λͺ©λ‘μ„ 확인 κ°€λŠ₯
  • μ‹œμŠ€ν…œ 메뉴 > λ””μŠ€ν¬ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 검색 > λ””μŠ€ν¬μ™€ ν•΄λ‹Ή νŒŒν‹°μ…˜μ„ 확인

2-3. ν•˜λ“œλ””μŠ€ν¬ νŒŒν‹°μ…˜

  • parted둜 νŒŒν‹°μ…˜ ν…Œμ΄λΈ” 보기 : parted /dev/sda1
[root@localhost ~]# parted /dev/sda1
GNU Parted 3.5
Using /dev/sda1
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) print
Error: /dev/sda1: unrecognised disk label
Model: Unknown (unknown)
Disk /dev/sda1: 4001GB
Sector size (logical/physical): 512B/4096B
Partition Table: unknown
Disk Flags:
(parted)
  • νŒŒν‹°μ…˜ μƒνƒœ 확인 : fdisk -l
    • Physical Volume κΉŒμ§€ 생성됨
[root@localhost ~]# fdisk -l /dev/sda1
Disk /dev/sda1: 3.64 TiB, 4000785104896 bytes, 7814033408 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: dos
Disk identifier: 0x73736572
  • Volume Group λ§Œλ“€κΈ°
[root@localhost ~]# vgcreate VG01 /dev/sda1
  Physical volume "/dev/sda1" successfully created.
  Volume group "VG01" successfully created
  • Logical Volume λ§Œλ“€κΈ°
[root@localhost ~]# lvcreate --size 900GB --name lv01cargo VG01
  Logical volume "lv01cargo" created.
[root@localhost ~]# lvcreate --size 900GB --name lv02cargo VG01
  Logical volume "lv02cargo" created.
[root@localhost ~]# lvcreate --size 900GB --name lv01vm VG01
  Logical volume "lv01vm" created.
[root@localhost ~]# lvcreate --size 900GB --name lv02vm VG01
  Logical volume "lv02vm" created.
[root@localhost ~]#
  • ν˜„μž¬ μƒνƒœ 확인
[root@localhost ~]# vgdisplay VG01
  --- Volume group ---
  VG Name               VG01
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  5
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                4
  Open LV               0
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               <3.64 TiB
  PE Size               4.00 MiB
  Total PE              953861
  Alloc PE / Size       921600 / <3.52 TiB
  Free  PE / Size       32261 / <126.02 GiB
  VG UUID               1A8hCi-yvbQ-1IRg-yIkr-724H-LONA-7y2yVY
  • Volume ν• λ‹Ή 곡간 확인
[root@localhost ~]# pvs -a
  PV             VG   Fmt  Attr PSize   PFree
  /dev/nvme0n1p3 cs   lvm2 a--  464.17g       0
  /dev/sda1      VG01 lvm2 a--   <3.64t <126.02g

[root@localhost ~]# lvs -a
  LV        VG   Attr       LSize    Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv01cargo VG01 -wi-a-----  900.00g
  lv01vm    VG01 -wi-a-----  900.00g
  lv02cargo VG01 -wi-a-----  900.00g
  lv02vm    VG01 -wi-a-----  900.00g
  home      cs   -wi-ao---- <378.52g
  root      cs   -wi-ao----   70.00g
  swap      cs   -wi-ao----   15.65g
  • 파일 μ‹œμŠ€ν…œκ³Ό 마운트
    • mkfs.xfs /dev/VG01/lv01cargo, mkfs.xfs /dev/VG01/lv02cargo, mkfs.xfs /dev/VG01/lv01vm, mkfs.xfs /dev/VG01/lv02vm
[root@localhost ~]# mkfs.xfs /dev/VG01/lv01cargo
meta-data=/dev/VG01/lv01cargo    isize=512    agcount=4, agsize=58982400 blks
         =                       sectsz=4096  attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1    bigtime=1 inobtcount=1 nrext64=0
data     =                       bsize=4096   blocks=235929600, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=115200, version=2
         =                       sectsz=4096  sunit=1 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
  • 디렉토리 생성 및 마운트
[root@localhost ~]# mkdir /cargo1
[root@localhost ~]# mkdir /cargo2
[root@localhost ~]# mkdir /vm1
[root@localhost ~]# mkdir /vm2
[root@localhost ~]# mount /dev/VG01/lv01cargo /cargo1
[root@localhost ~]# mount /dev/VG01/lv02cargo /cargo2
[root@localhost ~]# mount /dev/VG01/lv01vm /vm1
[root@localhost ~]# mount /dev/VG01/lv02vm /vm2
  • 디렉토리 ꡬ성과 μ‹€μ œ μ‚¬μš©ν•˜λŠ” νŒŒμΌμ‹œμŠ€ν…œ 크기 확인
[root@localhost ~]# df -Th
Filesystem                 Type      Size  Used Avail Use% Mounted on
devtmpfs                   devtmpfs  4.0M     0  4.0M   0% /dev
tmpfs                      tmpfs      16G     0   16G   0% /dev/shm
tmpfs                      tmpfs     6.2G   18M  6.2G   1% /run
/dev/mapper/cs-root        xfs        70G  7.2G   63G  11% /
/dev/nvme0n1p2             xfs       960M  306M  655M  32% /boot
/dev/mapper/cs-home        xfs       379G  2.7G  376G   1% /home
/dev/nvme0n1p1             vfat      599M  7.5M  592M   2% /boot/efi
/dev/mapper/VG01-lv01cargo xfs       900G  6.4G  894G   1% /cargo1
/dev/mapper/VG01-lv02cargo xfs       900G  6.4G  894G   1% /cargo2
/dev/mapper/VG01-lv01vm    xfs       900G  6.4G  894G   1% /vm1
/dev/mapper/VG01-lv02vm    xfs       900G  6.4G  894G   1% /vm2

πŸ”Ά Partition does not start on physical sector boundary

  • μ°Έκ³  : Partition does not start on physical sector boundary
  • Partition 4 does not start on physical sector boundary. : νŒŒν‹°μ…˜μ˜ μ‹œμž‘μ΄ μ„Ήν„°μ˜ κ²½κ³„μ—μ„œ μ‹œμž‘ν•˜μ§€ μ•ŠλŠ”λ‹€λŠ” 뜻
    • Sector size > 논리섹터 512 bytes와 물리섹터 4096 byte와 크기가 λ§žμ§€ μ•Šμ•„ μƒκΈ°λŠ” 였λ₯˜
[root@localhost ~]# fdisk -l /dev/sd*
Disk /dev/sda: 3.64 TiB, 4000787030016 bytes, 7814037168 sectors
Disk model: HGST HDN724040AL
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: 42B2D9E1-D9F9-4E97-A835-008CB7AC2269

Device     Start        End    Sectors  Size Type
/dev/sda1   2048 7814035455 7814033408  3.6T Microsoft basic data


Disk /dev/sda1: 3.64 TiB, 4000785104896 bytes, 7814033408 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: dos
Disk identifier: 0x73736572

Device      Boot      Start        End    Sectors   Size Id Type
/dev/sda1p1      1920221984 3736432267 1816210284   866G 72 unknown
/dev/sda1p2      1936028192 3889681299 1953653108 931.6G 6c unknown
/dev/sda1p3               0          0          0     0B  0 Empty
/dev/sda1p4        27722122   27722568        447 223.5K  0 Empty

Partition 4 does not start on physical sector boundary.
Partition table entries are not in disk order.
  • μœ„μ˜ 마운트 λ‹¨κ³„κΉŒμ§€ μˆ˜ν–‰ν•˜κ³  λ‹€μ‹œ μ‘°νšŒν•΄λ³΄λ©΄ ν•΄λ‹Ή λ‚΄μš©μ€ λœ¨μ§€ μ•ŠμŒ

2-4. κΈ°λ³Έ μ„€μ •

πŸ”Ά λ„€μž„μ„œλ²„ μ„€μ •

  • λ„€μž„μ„œλ²„ 및 도메인 μ§€μ • 역할을 ν•΄μ£ΌλŠ” μ„€μ • 파일
  • ν˜„μž¬ λ„€νŠΈμ›Œν¬λŠ” μ—°κ²°λ˜μ–΄ μžˆμ§€λ§Œ DNF(μžλ™) νŒ¨ν‚€μ§€ μ„€μΉ˜ 즉, μ™ΈλΆ€ 도메인 미러 μ‚¬μ΄νŠΈλ₯Ό μ°ΎκΈ° μœ„ν•΄ νŠΉμ • ISP(인터넷을 μ œκ³΅ν•˜λŠ” κ°œμΈμ΄λ‚˜ κΈ°μ—…)에 미리 μ§€μ •ν•΄μ£ΌλŠ” 게 μ’‹μŒ
  • resolv.conf 파일 μˆ˜μ •
    • nameserver : λ‚΄κ°€ μ‚¬μš©ν•  λ„λ©”μΈμ„œλ²„ IP μ£Όμ†Œ (λ¦¬λˆ…μŠ€λŠ” μ΅œλŒ€ 3κ°œκΉŒμ§€ 인식 κ°€λŠ₯)
    • search : 도메인 λͺ…을 μ§€μ • (λŒ€λΆ€λΆ„ 호슀트λͺ…κ³Ό 도메인λͺ…을 ν•¨κ»˜ μ‚¬μš©ν•˜λ‚˜, νŠΉλ³„ν•˜κ²Œ 호슀트λͺ…λ§Œ μ‚¬μš©λ˜μ—ˆμ„ λ•Œ μ‚¬μš©ν•˜κ²Œ 될 κΈ°λ³Έ 도메인 λͺ…)
[root@localhost ~]# vi /etc/resolv.conf

# Generated by NetworkManager
nameserver 210.94.0.73
nameserver 210.220.163.82
nameserver 192.168.1.999
search localdomain.com
  • Generated by NetworkManager : λ„€νŠΈμ›Œν¬λ₯Ό μž¬μ‹œμž‘ν•˜λ©΄ NM(NetworkManager)에 μ˜ν•΄ 이 파일이 λ°”λ€ŒκΈ° λ•Œλ¬Έμ— μ΄ˆκΈ°ν™” 될 수 있음
  • λ„€νŠΈμ›Œν¬λ₯Ό μž¬μ‹œμž‘ν•˜κΈ° 전에 chattr +i /etc/resolv.conf λͺ…λ Ήμ–΄ μˆ˜ν–‰
    • λ¦¬λΆ€νŒ… μ‹œμ— resolv.conf 파일이 μ΄ˆκΈ°ν™” λ˜λŠ”λ°, write(μ“°κΈ°-νŽΈμ§‘)λ₯Ό λͺ»ν•˜κ²Œ λ³΄ν˜Έν•˜λŠ” λͺ…λ Ήμ–΄
    • ν•΄μ œλŠ” chattr -i /etc/resolv.conf
  • 이후 λ„€νŠΈμ›Œν¬λ₯Ό μž¬μ‹œμž‘ν•˜μ—¬ 적용 : systemctl restart network λ˜λŠ” service network restart
    • μž¬μ‹œμž‘ 후에도 μ—¬μ „νžˆ /etc/resolv.conf 파일이 μ΄ˆκΈ°ν™” λ˜μ§€ μ•Šκ³  μ‚΄μ•„μžˆλŠ” 것 확인

πŸ”Ά μ—…λ°μ΄νŠΈ

  • ν˜„μž¬ μ„€μΉ˜λ˜μ–΄μžˆλŠ” 전체 νŒ¨ν‚€μ§€μ™€ 컀널을 μ—…κ·Έλ ˆμ΄λ“œ
  • λ³΄μ•ˆμ„ μœ„ν•΄ ν•˜λŠ” λΆ€λΆ„μœΌλ‘œ 아무것도 μ„€μΉ˜λ˜μ–΄ μžˆμ§€ μ•ŠλŠ” μƒνƒœμ—μ„œ ν•˜λŠ” 것을 ꢌ고
    • 이미 λŒμ•„κ°€κ³  μžˆλŠ” μ„œλ²„μ—μ„œ ν•˜κ²Œ 되면 λΆ€νŒ… μ‹€νŒ¨λ‚˜ μž₯μ•  λ°œμƒ κ°€λŠ₯μ„± 있음
    • μ„€μΉ˜κ°€ μ™„λ£Œλ  경우 μƒˆλ‘œ μ„€μΉ˜λœ 것과 μ—…λ°μ΄νŠΈν•œ νŒ¨ν‚€μ§€κ°€ λ¦¬μŠ€νŠΈμ— λ‚˜μ˜€κ²Œ 됨
[root@localhost ~]# dnf update
Last metadata expiration check: 2:16:12 ago on Wed 20 Mar 2024 03:20:24 PM KST.
Dependencies resolved.
=============================================================================================================================================================
 Package                                            Architecture                 Version                               Repository                       Size
=============================================================================================================================================================
Installing:
 kernel                                             x86_64                       5.14.0-430.el9                        baseos                           44 k
Upgrading:
 NetworkManager                                     x86_64                       1:1.47.2-1.el9                        baseos                          2.3 M
############ (μ€‘λž΅) ############

Transaction Summary
=============================================================================================================================================================
Install   5 Packages
Upgrade  41 Packages

Total download size: 147 M
Is this ok [y/N]: y
Downloading Packages:
(1/46): kernel-5.14.0-430.el9.x86_64.rpm                     0% [                                                          ] ---  B/s |   0  B     --:-- ETA
############ (μ€‘λž΅) ############
(46/46): kernel-devel-5.14.0-430.el9.x86_64.rpm                                                                              973 kB/s |  16 MB     00:16
-------------------------------------------------------------------------------------------------------------------------------------------------------------
Total                                                                                                                        5.3 MB/s | 147 MB     00:27
CentOS Stream 9 - BaseOS                                                                                                     1.6 MB/s | 1.6 kB     00:00
Importing GPG key 0x8483C65D:
 Userid     : "CentOS (CentOS Official Signing Key) <[email protected]>"
 Fingerprint: 99DB 70FA E1D7 CE22 7FB6 4882 05B5 55B3 8483 C65D
 From       : /etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
Is this ok [y/N]: y
Key imported successfully
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Running scriptlet: selinux-policy-targeted-38.1.35-2.el9.noarch                                                                                        1/1
  Preparing        :                                                                                                                                     1/1
  Upgrading        : selinux-policy-38.1.35-2.el9.noarch                                                                                                1/87
  Running scriptlet: selinux-policy-38.1.35-2.el9.noarch                                                                                                1/87
  Running scriptlet: container-selinux-3:2.230.0-1.el9.noarch                                                                                          87/87
  Running scriptlet: tzdata-2024a-1.el9.noarch                                                                                                         87/87

πŸ”Ά selinux λΉ„ν™œμ„±ν™”

  • μΌμ’…μ˜ λ³΄μ•ˆμ •μ±…μœΌλ‘œ λͺ¨λ“  ν”„λ‘œμ„ΈμŠ€λ‚˜ νŠΉμ • 객체에 λŒ€ν•˜μ—¬ 관리 κ·œμ •μ„ 지을 수 있음
  • 기본적으둜 ν™œμ„±(enforcing)λ˜μ–΄ 있음 > μ„œλ²„ 운영 쀑 λ„€νŠΈμ›Œν¬ λ°©ν™”λ²½ 및 νŠΉμ • ν”„λ‘œμ„ΈμŠ€κ°€ λ§‰νžˆκ±°λ‚˜ ꡬ동이 λ˜μ§€ μ•ŠλŠ” 상황이 λ°œμƒν•  수 있음
    • λΉ„ν™œμ„±(disabled) 적용 ν›„ μž¬λΆ€νŒ…ν•˜μ—¬ λ°©μ§€ν•  수 있음
[root@localhost ~]# vi /etc/sysconfig/selinux

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
#SELINUX=enforcing
SELINUX=disabled

πŸ”Ά IPTABLES λ°©ν™”λ²½ μ‚¬μš© (🚫Firewall μ‚¬μš© μ‹œμ—λŠ” μƒλž΅)

  • CentOS 7λΆ€ν„°λŠ” iptablesλ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šκ³  Firewall 방식을 λ„μž…
    • λ•Œλ¬Έμ— /etc/sysconfig/iptables 파일이 μ‘΄μž¬ν•˜μ§€ μ•ŠμŒ
  • κΈ°μ‘΄ iptablesλ₯Ό μ‚¬μš©ν•˜λŠ” κ²½μš°μ—λ§Œ μ•„λž˜ λ‚΄μš© μ§„ν–‰
    • systemd 기반으둜 μž‘λ™λ˜κΈ° λ•Œλ¬Έμ— systemctl λͺ…λ Ήμ–΄ μ΄μš©ν•΄μ•Ό 함
[root@localhost ~]# systemctl stop firewalld  [Firewalld λ°©ν™”λ²½ 쀑지]
[root@localhost ~]# systemctl mask firewalld  [Firewalld μžλ™μ‹€ν–‰ 쀑지]
[root@localhost ~]# yum install -y iptables-services  [iptables μ„œλΉ„μŠ€ κ΄€λ ¨ νŒ¨ν‚€μ§€ μ„€μΉ˜]
[root@localhost ~]# systemctl enable iptables  [iptablesκΈ°λ³Έ μ‚¬μš© μ„€μ •]
[root@localhost ~]# systemctl start iptables  [iptablesμ„œλΉ„μŠ€ μ‹œμž‘]
[root@localhost ~]# iptables -nL  [μž‘λ™ 확인]
[root@localhost ~]# /etc/sysconfig/iptables  [μ„€μ • 파일 μœ„μΉ˜]

2-5. CentOS νŒ¨ν‚€μ§€ ν™•μž₯

  • repo λͺ©λ‘ 확인
[root@localhost /]# yum repolist
repo id                      repo name
appstream                    CentOS Stream 9 - AppStream
baseos                       CentOS Stream 9 - BaseOS
epel                         Extra Packages for Enterprise Linux 9 - x86_64
epel-cisco-openh264          Extra Packages for Enterprise Linux 9 openh264 (From Cisco) - x86_64
epel-next                    Extra Packages for Enterprise Linux 9 - Next - x86_64
extras-common                CentOS Stream 9 - Extras packages
  • Docker λŒ€μ‹  Podman μ„€μΉ˜ (RedHat κΈ°μ€€)
  • νŒ¨ν‚€μ§€ ν™•μž₯을 μœ„ν•΄ HDD νŒŒν‹°μ…˜ μž‘μ—… μ„ ν–‰ > LVM 으둜 μ»¨ν…Œμ΄λ„ˆ, VM, DB 곡간 확보
    • /vm1 : ν…ŒμŠ€νŠΈμš© 가상 λ¨Έμ‹  μ„€μΉ˜
    • /vm2 : μ»¨ν…Œμ΄λ„ˆ μ„€μΉ˜
    • /cargo1, /cargo2 : DBMS μ‚¬μš©μž ν…Œμ΄λΈ” 곡간
  • λ‚¨μ•„μžˆλŠ” 곡간은 μž¬λΆ„λ°°

3. 원격 λ°μŠ€ν¬ν†± μ—°κ²°

3-1. xrdpλ₯Ό 톡해 원격 λ°μŠ€ν¬ν†± μ—°κ²° (Windows -> CentOS)

  • μ°Έκ³  : 원격 λ°μŠ€ν¬ν†±μœΌλ‘œ μ—°κ²°ν•˜λŠ” 방법 / firewall-cmd λͺ…λ Ήμ–΄λ‘œ λ°©ν™”λ²½ κ΄€λ¦¬ν•˜κΈ°
  • RDP(Remote Desktop Protocol, 원격 λ°μŠ€ν¬ν†± ν”„λ‘œν† μ½œ)
    • 터미널 μ„œλ²„μ™€ 터미널 μ„œλ²„ ν΄λΌμ΄μ–ΈνŠΈ κ°„μ˜ 톡신에 μ‚¬μš©
    • TCP λ‚΄μ—μ„œ μΊ‘μŠν™”λ˜κ³  μ•”ν˜Έν™”λ˜μ–΄ 정보 전달
  • xrdp
    • λ¦¬λˆ…μŠ€ μ‹œμŠ€ν…œμ—μ„œ 원격 λ°μŠ€ν¬ν†± 접속을 μ œκ³΅ν•˜λŠ” μ˜€ν”ˆ μ†ŒμŠ€ ν”„λ‘œμ νŠΈ (λ¦¬λˆ…μŠ€ μ„œλ²„λ₯Ό μ›κ²©μœΌλ‘œ 관리할 λ•Œ μ‚¬μš©)
    • xrdpλŠ” RDPλ₯Ό μ‚¬μš©ν•˜μ—¬ 원격 ν΄λΌμ΄μ–ΈνŠΈκ°€ λ¦¬λˆ…μŠ€ μ‹œμŠ€ν…œμ— μ ‘μ†ν•˜μ—¬ GUIλ₯Ό μ‚¬μš©ν•  수 μžˆλ„λ‘ 함

πŸ”Ά κΈ°λ³Έ ν™˜κ²½ μ„€μΉ˜

# μ—…κ·Έλ ˆμ΄λ“œ
[root@localhost ~]# yum update
Last metadata expiration check: 3:32:45 ago on Thu 21 Mar 2024 05:35:46 AM KST.
Dependencies resolved.
Nothing to do.
Complete!
[root@localhost ~]# yum upgrade
Last metadata expiration check: 3:32:52 ago on Thu 21 Mar 2024 05:35:46 AM KST.
Dependencies resolved.
Nothing to do.
Complete!

# epel repository μ„€μΉ˜
$ yum install -y epel-release
Last metadata expiration check: 3:32:59 ago on Thu 21 Mar 2024 05:35:46 AM KST.
Dependencies resolved.
=============================================================================================================================================================
 Package                                    Architecture                    Version                             Repository                              Size
=============================================================================================================================================================
Installing:
 epel-release                               noarch                          9-7.el9                             extras-common                           19 k
Installing weak dependencies:
 epel-next-release                          noarch                          9-7.el9                             extras-common                          8.1 k
############ (μ€‘λž΅) ############
Complete!

# xrdp 및 tigervnc μ„€μΉ˜
$ yum install -y xrdp tigervnc-server
Extra Packages for Enterprise Linux 9 - x86_64                                                                               6.0 MB/s |  21 MB     00:03
Extra Packages for Enterprise Linux 9 openh264 (From Cisco) - x86_64                                                         335  B/s | 2.5 kB     00:07
Extra Packages for Enterprise Linux 9 - Next - x86_64                                                                        487 kB/s | 1.4 MB     00:02
Last metadata expiration check: 0:00:01 ago on Thu 21 Mar 2024 09:09:15 AM KST.
Dependencies resolved.
=============================================================================================================================================================
 Package                                        Architecture                  Version                                 Repository                        Size
=============================================================================================================================================================
Installing:
 tigervnc-server                                x86_64                        1.13.1-8.el9                            appstream                        224 k
 xrdp                                           x86_64                        1:0.9.24-1.el9                          epel                             459 k
############ (μ€‘λž΅) ############
Complete!

πŸ”Ά 3389 Port μƒμ‹œ ν—ˆμš©

  • 방화벽에 3389 Portλ₯Ό μƒμ‹œ ν—ˆμš©μœΌλ‘œ 등둝 및 μž¬μ‹€ν–‰
[root@localhost ~]# sudo firewall-cmd --permanent --zone=public --add-port=3389/tcp
success
[root@localhost ~]# sudo firewall-cmd --reload
success
[root@localhost ~]# sudo firewall-cmd --list-port
3389/tcp

πŸ”Ά xrdp μ„œλΉ„μŠ€ 등둝 및 ꡬ동 확인

[root@localhost ~]# sudo systemctl enable xrdp.service
Created symlink /etc/systemd/system/multi-user.target.wants/xrdp.service β†’ /usr/lib/systemd/system/xrdp.service.
[root@localhost ~]# sudo systemctl start xrdp.service
[root@localhost ~]# systemctl status xrdp.service
● xrdp.service - xrdp daemon
     Loaded: loaded (/usr/lib/systemd/system/xrdp.service; enabled; preset: disabled)
     Active: active (running) since Thu 2024-03-21 09:41:57 KST; 6s ago
       Docs: man:xrdp(8)
             man:xrdp.ini(5)
   Main PID: 345161 (xrdp)
      Tasks: 1 (limit: 202223)
     Memory: 1.0M
        CPU: 4ms
     CGroup: /system.slice/xrdp.service
             └─345161 /usr/sbin/xrdp --nodaemon

Mar 21 09:41:57 localhost.localdomain systemd[1]: Started xrdp daemon.
Mar 21 09:41:57 localhost.localdomain xrdp[345161]: [INFO ] starting xrdp with pid 345161
Mar 21 09:41:57 localhost.localdomain xrdp[345161]: [INFO ] address [0.0.0.0] port [3389] mode 1
Mar 21 09:41:57 localhost.localdomain xrdp[345161]: [INFO ] listening to port 3389 on 0.0.0.0
Mar 21 09:41:57 localhost.localdomain xrdp[345161]: [INFO ] xrdp_listen_pp done

πŸ”Ά 포트 μƒνƒœ 및 접속할 IP 확인

  • 3389 포트 μƒνƒœ 확인
[root@localhost ~]# netstat -nap | grep 3389
tcp6       0      0 :::3389                 :::*                    LISTEN      345161/xrdp
  • IP : 192.168.1.999
[root@localhost ~]# ifconfig
eno1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.999  netmask 255.255.255.0  broadcast 192.168.1.255
        inet6 fe80::dabb:c1ff:fe4d:c443  prefixlen 64  scopeid 0x20<link>
        ether d8:bb:c1:4d:c4:43  txqueuelen 1000  (Ethernet)
        RX packets 1140040  bytes 860949800 (821.0 MiB)
        RX errors 0  dropped 110087  overruns 0  frame 0
        TX packets 201157  bytes 16165519 (15.4 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device interrupt 16  memory 0xa1200000-a1220000

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 65  bytes 5351 (5.2 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 65  bytes 5351 (5.2 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

πŸ”Ά firewall public zone μƒνƒœ 확인

[root@localhost ~]# sudo firewall-cmd --zone=public --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eno1
  sources:
  services: cockpit dhcpv6-client ssh
  ports: 3389/tcp
  protocols:
  forward: yes
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

3-2. Windows μ—μ„œ CentOS 원격 μ—°κ²°

  • μ‹œμž‘ > 원격 λ°μŠ€ν¬ν†± μ—°κ²° > 192.168.1.999
    • μ‚¬μš©μž 이름 λ“±λ‘ν•˜μ§€ μ•Šκ³  λ°”λ‘œ μ—°κ²°ν•  것
  • root 계정 접속은 μ•ˆλ˜λ„λ‘ μ„€μ •λ˜μ–΄ 있음
    • μ•„λž˜ λ‚΄μš© μˆ˜ν–‰ν•΄λ„ λ˜μ§€ μ•Šμ•„μ„œ 보λ₯˜

πŸ”Ά root 계정 접속 ν—ˆμš©/ν•΄μ œ

  • sshd_config νŒŒμΌμ„ μˆ˜μ •
[root@localhost ssh]# cd /etc/ssh/
[root@localhost ssh]# vi sshd_config
  • PermitRootLogin : root κ³„μ •μœΌλ‘œ 둜그인 μ‹œ ν—ˆμš© μ—¬λΆ€λ₯Ό μ„€μ •ν•˜λŠ” κ°’
(...)
# Authentication:

#LoginGraceTime 2m
#PermitRootLogin prohibit-password
PermitRootLogin yes
#StrictModes yes
#MaxAuthTries 6
#MaxSessions 10
(...)
  • PermitRootLogin μ„€μ • 값을 λ³€κ²½ 후에도 λ°”λ‘œ root 계정 둜그인 μ œν•œμ΄ λ˜μ§„ μ•ŠμŒ
    • μ œν•œ 섀정을 μ μš©ν•˜κΈ° μœ„ν•΄μ„œλŠ” sshdλ₯Ό μž¬μ‹œμž‘
[root@localhost ssh]# service sshd restart

3-3. μ„œλ²„ μ£Όμ†Œ μˆ˜λ™ λ³€κ²½

  • μ„€μΉ˜ μ‹œ μžλ™μœΌλ‘œ ν• λ‹Ή 받은 μ£Όμ†Œλ₯Ό μˆ˜λ™μœΌλ‘œ μž¬μ§€μ •
  • 원격 λ°μŠ€ν¬ν†± > 상단 λ„€νŠΈμ›Œν¬ μ•„μ΄μ½˜ > Settings
  • Network > Wired > Connected - 100 Mb/s 켜기 및 μ„€μ • λ²„νŠΌ 클릭
  • IPv4 νƒ­ ν΄λ¦­ν•˜μ—¬ κ³ μ • IP μ„€μ •
    • IPv4 Method : Manual (μˆ˜λ™)
    • Address : μ£Όμ†Œ, λ„·λ§ˆμŠ€ν¬, κ²Œμ΄νŠΈμ›¨μ΄ μ£Όμ†Œ μž…λ ₯ (192.168.1.999, 255.255.255.0, 192.168.1.1)
    • DNS > Automatic ν•΄μ œ
    • DNS : 210.94.0.73, 210.220.163.82 (μ—¬λŸ¬ 개의 DNSλ₯Ό μž…λ ₯ν•  경우 μ‰Όν‘œλ‘œ ꡬ뢄)
[root@localhost ~]# vi /etc/resolv.conf

nameserver 210.94.0.73
nameserver 210.220.163.82
  • μƒλ‹¨μ˜ 적용 λ²„νŠΌ 클릭 (ν„°λ―Έλ„μ˜ systemctl restart network 와 λ™μΌν•œ 효과)

4. 가상머신

4-1. RHEL 9, Cockpit μ›Ή μ½˜μ†” μ„€μ •

  • 가상머신을 κ΄€λ¦¬ν•˜κΈ° μœ„ν•œ μ›Ή μ½˜μ†” 가상머신 ν”ŒλŸ¬κ·ΈμΈ μ„€μΉ˜
  • μ›Ή μ½˜μ†”μ΄ μ‹œμŠ€ν…œμ— μ„€μΉ˜λ˜μ–΄ ν™œμ„±ν™”λ˜μ–΄ μžˆλŠ”μ§€ 확인
[root@localhost /]# systemctl status cockpit.socket
β—‹ cockpit.socket - Cockpit Web Service Socket
     Loaded: loaded (/usr/lib/systemd/system/cockpit.socket; disabled; preset: disabled)
     Active: inactive (dead)
   Triggers: ● cockpit.service
       Docs: man:cockpit-ws(8)
     Listen: [::]:9090 (Stream)
  • cockpit-machines ν”ŒλŸ¬κ·ΈμΈμ„ μ„€μΉ˜
[root@localhost /]# dnf install cockpit-machines
Last metadata expiration check: 1:33:14 ago on Thu 21 Mar 2024 12:44:55 PM KST.
Dependencies resolved.
============================================================================================================================================================
 Package                                              Architecture         Version                                            Repository               Size
============================================================================================================================================================
Installing:
 cockpit-machines                                     noarch               308-1.el9                                          appstream               1.1 M
############ (μ€‘λž΅) ############
Total download size: 37 M
Installed size: 153 M
Is this ok [y/N]: y
############ (μ€‘λž΅) ############
Complete!
  • ν™œμ„±ν™”
[root@localhost /]# systemctl enable cockpit.socket
Created symlink /etc/systemd/system/sockets.target.wants/cockpit.socket β†’ /usr/lib/systemd/system/cockpit.socket.
[root@localhost /]# systemctl start cockpit.socket

πŸ”Ά μ›Ή μ½˜μ†”μ— μ•‘μ„ΈμŠ€

  • μ°Έκ³  : CentOS/RHEL 8에 KVM을 μ„€μΉ˜ν•˜λŠ” 방법
    • KVM(컀널 기반 가상 λ¨Έμ‹ ) : Linux에 κΈ΄λ°€ν•˜κ²Œ ν†΅ν•©λœ μ˜€ν”ˆ μ†ŒμŠ€μ΄μž μ‚¬μ‹€μƒμ˜ ν‘œμ€€ 가상화 μ†”λ£¨μ…˜
  • https://localhost:9090 에 둜그인
    • Unable to connect - Firefox can’t establish a connection to the server at localhost:9090.
    • Windows > https://192.168.1.999:9090/ 둜 μ ‘μ†ν•˜μ—¬ 확인
  • μ œν•œλœ μ ‘κ·Ό ν•΄μ œ > μ•”ν˜Έ μž…λ ₯ ν›„ 인증 λ²„νŠΌ 클릭 > 관리 μ•‘μ„ΈμŠ€ λͺ¨λ“œλ‘œ λ°”λ€œ
  • libvirt Hypervisor λ“œλΌμ΄λ²„λ₯Ό μ‹€ν–‰ν•˜λ„λ‘ μ„€μ •λ˜μ–΄ μžˆλŠ”μ§€ 확인
[root@localhost /]# virt-host-validate
  QEMU: Checking for hardware virtualization                                 : PASS
  QEMU: Checking if device /dev/kvm exists                                   : PASS
  QEMU: Checking if device /dev/kvm is accessible                            : PASS
  QEMU: Checking if device /dev/vhost-net exists                             : PASS
  QEMU: Checking if device /dev/net/tun exists                               : PASS
  QEMU: Checking for cgroup 'cpu' controller support                         : PASS
  QEMU: Checking for cgroup 'cpuacct' controller support                     : PASS
  QEMU: Checking for cgroup 'cpuset' controller support                      : PASS
  QEMU: Checking for cgroup 'memory' controller support                      : PASS
  QEMU: Checking for cgroup 'devices' controller support                     : PASS
  QEMU: Checking for cgroup 'blkio' controller support                       : PASS
  QEMU: Checking for device assignment IOMMU support                         : WARN (No ACPI DMAR table found, IOMMU either disabled in BIOS or not supported by this hardware platform)
  QEMU: Checking for secure guest support                                    : WARN (Unknown if this platform has Secure Guest support)
  • kvm λͺ¨λ“ˆμ΄ 컀널에 λ‘œλ“œλ˜μ—ˆλŠ”μ§€ 확인
[root@localhost /]# lsmod  | grep kvm
kvm_intel             442368  0
kvm                  1335296  1 kvm_intel
irqbypass              16384  1 kvm
  • λ°©ν™”λ²½ μƒνƒœλŠ” cockpit κΉŒμ§€ μ—΄λ €μžˆμŒ (λ§Œμ•½ μ™ΈλΆ€ 접속이 ν—ˆμš©λ˜μ–΄ μžˆμ§€ μ•Šλ‹€λ©΄, 방화벽에 cockpit μ„œλΉ„μŠ€ μΆ”κ°€)
[root@localhost /]# firewall-cmd --add-service=cockpit --permanent
Warning: ALREADY_ENABLED: cockpit
success
[root@localhost /]# firewall-cmd --reload
success
  • https://192.168.1.999:9090/ 둜 μ ‘μ†ν•˜μ—¬ 확인
    • root 계정 접속이 μ•ˆλ˜μ–΄, μ‚¬μš©μž κ³„μ •μœΌλ‘œ 둜그인 함

5. Podman

  • CentOS 8 버전뢀터 Docker λŒ€μ‹  Podman 이 κΈ°λ³Έ Container API μž„
  • Centos에 Podman μ„€μΉ˜ν•˜κΈ° - Podman μ»¨ν…Œμ΄λ„ˆ 기초
  • Windows > https://192.168.1.999:9090/ 둜 접속
  • 쒌츑 λͺ©λ‘μ—μ„œ Podman Container 클릭
    • 'ν¬λ“œλ§¨ μ„œλΉ„μŠ€κ°€ λ™μž‘ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.' > λΆ€νŠΈ μ‹œ μžλ™μœΌλ‘œ podman μ‹œμž‘ 클릭

πŸ”Ά Podman μ €μž₯μ†Œ

5-1. Podman ν™˜κ²½ ꡬ성

  • registry μ ‘κ·Ό 정보
[root@localhost /]# view /etc/containers/registries.conf

unqualified-search-registries = ["registry.access.redhat.com", "registry.redhat.io", "docker.io"]
############ (μ€‘λž΅) ############
insecure = false
blocked = false   // ν•„μš”μ— 따라 차단 등둝을 ν•œλ‹€
  • ν˜„μž¬ redhat 계정은 μ—†μœΌλ―€λ‘œ μ‹€μ œλ‘œ pulling ν•  수 μ—†μŒ (docker.io 만 κ°€λŠ₯함)
  • repoμ—μ„œ μ ν•©ν•œ mysql 찾아보기

πŸ”Ά Podman κΈ°λ³Έ 정보

  • 버전 및 μ„€μΉ˜ ν™˜κ²½ 정보 확인
[root@localhost system-connections]# podman -v
podman version 4.9.3-dev

[root@localhost system-connections]# podman info

  kernel: 5.14.0-430.el9.x86_64

  remoteSocket:
    exists: false
    path: /run/podman/podman.sock

store:
  configFile: /etc/containers/storage.conf
  graphRoot: /var/lib/containers/storage
  imageCopyTmpDir: /var/tmp
  runRoot: /run/containers/storage
  volumePath: /var/lib/containers/storage/volumes
  
version:
  APIVersion: 4.9.3-dev
  Built: 1707216158
  BuiltTime: Tue Feb  6 19:42:38 2024
  GitCommit: ""
  GoVersion: go1.21.3
  Os: linux
  OsArch: linux/amd64
  Version: 4.9.3-dev

πŸ”Ά podman-compose 버전

  • podman-compose μ„€μΉ˜ 및 버전 확인
[root@localhost ~]# podman-compose version
bash: podman-compose: command not found...
Install package 'podman-compose' to provide command 'podman-compose'? [N/y] y


 * Waiting in queue...
 * Loading list of packages....
The following packages have to be installed:
 gvisor-tap-vsock-6:0.7.3-2.el9.x86_64  Go replacement for libslirp and VPNKit
 podman-compose-1.0.6-3.el9.noarch      Run docker-compose.yml using podman
 podman-plugins-2:5.0.0-1.el9.x86_64    Plugins for podman
 python3-click-8.0.3-1.el9.noarch       Simple wrapper around optparse for powerful command line utilities
 python3-dotenv-0.19.2-3.el9.noarch     Read key-value pairs from a .env file and set them as environment variables
 python3-dotenv+cli-0.19.2-3.el9.noarch Metapackage for python3-dotenv: cli extras
Proceed with changes? [N/y] y

 * Waiting in queue...
 * Waiting for authentication...
 * Waiting in queue...
 * Downloading packages...
 * Requesting data...
 * Testing changes...
 * Installing packages...
podman-compose version: 1.0.6
['podman', '--version', '']
using podman version: 4.9.4-dev
podman-compose version 1.0.6
podman --version
podman version 4.9.4-dev
exit code: 0

[root@localhost ~]# podman-compose version
podman-compose version: 1.0.6
['podman', '--version', '']
using podman version: 4.9.4-dev
podman-compose version 1.0.6
podman --version
podman version 4.9.4-dev
exit code: 0

6. Java

  • ν˜„μž¬ Java λŠ” 이미 μ„€μΉ˜λ˜μ–΄ 있음
    • 11 λ‹€μš΄λ‘œλ“œ λͺ…λ Ήμ–΄ : yum install java-11-openjdk-devel.x86_64
    • 1.8.0 λ‹€μš΄λ‘œλ“œ λͺ…λ Ήμ–΄ : yum install java-1.8.0-openjdk-devel.x86_64
[root@localhost /]# java -version
openjdk version "1.8.0_362"
OpenJDK Runtime Environment (build 1.8.0_362-b08)
OpenJDK 64-Bit Server VM (build 25.362-b08, mixed mode)
  • yum νŒ¨ν‚€μ§€ ν™•μΈν•˜κΈ°
[root@localhost /]# yum search openjdk
Last metadata expiration check: 2:28:07 ago on Thu 21 Mar 2024 12:44:55 PM KST.
============================================================= Name & Summary Matched: openjdk ==============================================================
java-1.8.0-openjdk.x86_64 : OpenJDK 8 Runtime Environment
java-1.8.0-openjdk-demo.x86_64 : OpenJDK 8 Demos
############ (μ€‘λž΅) ############
  • 링크 확인
[root@localhost /]# readlink -f /usr/bin/java
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.362.b09-4.el9.x86_64/jre/bin/java

6-1. JAVA_HOME ν™˜κ²½λ³€μˆ˜

  • CentOS μ—μ„œλŠ” /etc/profile.d 폴더에 custom.sh 파일둜 κ°œλ³„ 섀정을 λ§Œλ“€λ„λ‘ ꢌ고
    • /etc/profile 을 직접 μˆ˜μ •ν•˜λŠ” λ°©μ‹λ³΄λ‹€λŠ” λͺ©μ μ— 따라
[root@localhost ~]# export JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::")
  • .bash_profile μ—λ§Œ 적용
[root@localhost ~]# env | grep JAVA
JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.362.b09-4.el9.x86_64/jre/
  • Java μ„€μΉ˜ 확인
[root@localhost ~]# ls /usr/lib/jvm
java-1.8.0-openjdk-1.8.0.362.b09-4.el9.x86_64  jre-1.8.0          jre-1.8.0-openjdk-1.8.0.362.b09-4.el9.x86_64
jre                                            jre-1.8.0-openjdk  jre-openjdk

πŸ”Ά Java 버전 λ³€κ²½ μ‹œ

  • Java 버전 alternatives
[root@localhost ~]# alternatives --config java

There is 1 program that provides 'java'.

  Selection    Command
-----------------------------------------------
*+ 1           java-1.8.0-openjdk.x86_64 (/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.362.b09-4.el9.x86_64/jre/bin/java)

Enter to keep the current selection[+], or type selection number: 1
  • JAVA_HOME 은 source 둜 κ΅¬λ™ν•˜κ±°λ‚˜ μž¬λ‘œκ·ΈμΈμ„ ν•΄μ•Ό 변경됨
[root@localhost ~]# source .bash_profile
# ν™˜κ²½λ³€μˆ˜ λ³€κ²½λœ λ‚΄μš© 확인
[root@localhost ~]# env | grep JAVA
JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.362.b09-4.el9.x86_64/jre/
  • alternatives 심볼릭 링크 생성 μƒνƒœ 확인
[root@localhost ~]# ls -l /etc/alternatives/jre*
lrwxrwxrwx. 1 root root 62 Mar 15 09:48 /etc/alternatives/jre -> /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.362.b09-4.el9.x86_64/jre
lrwxrwxrwx. 1 root root 62 Mar 15 09:48 /etc/alternatives/jre_1.8.0 -> /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.362.b09-4.el9.x86_64/jre
lrwxrwxrwx. 1 root root 57 Mar 15 09:48 /etc/alternatives/jre_1.8.0_openjdk -> /usr/lib/jvm/jre-1.8.0-openjdk-1.8.0.362.b09-4.el9.x86_64
lrwxrwxrwx. 1 root root 62 Mar 15 09:48 /etc/alternatives/jre_openjdk -> /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.362.b09-4.el9.x86_64/jre

7. MySQL

  • CentOS μ—μ„œ νŒ¨ν‚€μ§€ μ„€μΉ˜λŠ” κ°€λŠ₯ν•œ dnf λ₯Ό μ‚¬μš©
  • ProjYj 2022 μ—μ„œ λͺ¨λ“  ν…ŒμŠ€νŠΈκ°€ μ™„λ£Œλ˜λ©΄ Podman image 둜 생성
    • μš°λΆ„νˆ¬ 22 my8 ν™˜κ²½ λ§Œλ“€κΈ°.hwp μ°Έκ³ 
  • MySQL 곡톡 PW : password$$ (κΈ°λ³Έ μ„€μ • > μ†Œλ¬Έμž ꡬ성도 ν—ˆμš©)

7-1. MySQL μ„€μΉ˜ 파일 λ‹€μš΄λ‘œλ“œ

  • /home/projyj/Downloads κ²½λ‘œμ— μ„ΈνŒ… > μ›Ή μ½˜μ†”μ—μ„œ λ‹€μš΄λ‘œλ“œν•˜κ±°λ‚˜, Windows λ‹€μš΄λ‘œλ“œ ν›„ FileZilla 이용
  • http://repo.mysql.com/yum/mysql-8.0-community/ > el/9/x86_64 λͺ©λ‘
    • mysql80-community-release-el9-1.noarch.rpm λ‹€μš΄λ‘œλ“œ
    • mysql-community-server-8.0.32-1.el9.x86_64.rpm λ‹€μš΄λ‘œλ“œ
[root@localhost Downloads]$ ll
total 50304
-rw-r--r--. 1  root  root    10534 Mar 22 10:23 mysql80-community-release-el9-1.noarch.rpm
-rw-r--r--. 1  root  root 51495202 Mar 22 09:59 mysql-community-server-8.0.32-1.el9.x86_64.rpm

πŸ”Ά MySQL Yum Repository

7-2. MySQL μ„€μΉ˜

  • 쀑간에 였λ₯˜ λ°œμƒν–ˆμœΌλ―€λ‘œ, ν•˜λ‹¨ Error: GPG check FAILED λΆ€λΆ„κΉŒμ§€ 확인 ν•„μš”
  • μ„€μΉ˜ μ‹€ν–‰
[root@localhost Downloads]$ sudo rpm -Uvh mysql80-community-release-el9-1.noarch.rpm
warning: mysql80-community-release-el9-1.noarch.rpm: Header V4 RSA/SHA256 Signature, key ID 3a79bd29: NOKEY
Verifying...                          ################################# [100%]
Preparing...                          ################################# [100%]
Updating / installing...
   1:mysql80-community-release-el9-1  ################################# [100%]

[root@localhost Downloads]$ rpm -Uvh  mysql-community-server-8.0.32-1.el9.x86_64.rpm
warning: mysql-community-server-8.0.32-1.el9.x86_64.rpm: Header V4 RSA/SHA256 Signature, key ID 3a79bd29: NOKEY
error: Failed dependencies:
        mysql-community-client(x86-64) >= 8.0.11 is needed by mysql-community-server-8.0.32-1.el9.x86_64
        mysql-community-common(x86-64) = 8.0.32-1.el9 is needed by mysql-community-server-8.0.32-1.el9.x86_64
        mysql-community-icu-data-files = 8.0.32-1.el9 is needed by mysql-community-server-8.0.32-1.el9.x86_64
  • μ„€μΉ˜ μƒνƒœ 확인
    • mysql-community-server-8.0.32-1.el9.x86_64.rpm κ°€ μ„€μΉ˜ μ‹€νŒ¨ν•¨
    • 이후 dnf install 성곡 μ‹œμ—λ„ κ²°κ³Όκ°€ λ™μΌν•΄μ„œ 일단 보λ₯˜
[root@localhost Downloads]$ rpm -qi  mysql-community-server-8.0.32-1.el9.x86_64.rpm
warning: mysql-community-server-8.0.32-1.el9.x86_64.rpm: Header V4 RSA/SHA256 Signature, key ID 3a79bd29: NOKEY
Name        : mysql-community-server
Version     : 8.0.32
Release     : 1.el9
Architecture: x86_64
Install Date: (not installed)
Group       : Applications/Databases
Size        : 246795859
License     : Copyright (c) 2000, 2022, Oracle and/or its affiliates. Under GPLv2 license as shown in the Description field.
Signature   : RSA/SHA256, Sat 17 Dec 2022 09:25:25 PM KST, Key ID 467b942d3a79bd29
Source RPM  : mysql-community-8.0.32-1.el9.src.rpm
Build Date  : Sat 17 Dec 2022 01:08:25 AM KST
Build Host  : pb2-el9-01.regionaliad02.mysql2iad.oraclevcn.com
Packager    : MySQL Release Engineering <[email protected]>
Vendor      : Oracle and/or its affiliates
URL         : http://www.mysql.com/
Summary     : A very fast and reliable SQL database server
Description :
############ (μ€‘λž΅) ############
  • dnf 둜 μ„€μΉ˜ν•˜κΈ°
    • sudo dnf remove : μ„€μΉ˜λœ νŒ¨ν‚€μ§€ μ œκ±°ν•˜κΈ°
[root@localhost Downloads]$ sudo dnf install mysql-community-server-8.0.32-1.el9.x86_64.rpm
[sudo] password for  root:
Last metadata expiration check: 2:39:58 ago on Fri 22 Mar 2024 12:28:45 PM KST.
Dependencies resolved.
=============================================================================================================================================================
 Package                                            Architecture               Version                           Repository                             Size
=============================================================================================================================================================
Installing:
 mysql-community-server                             x86_64                     8.0.32-1.el9                      @commandline                           49 M
     replacing  mariadb-connector-c-config.noarch 3.2.6-1.el9
Installing dependencies:
 mysql-community-client                             x86_64                     8.0.36-1.el9                      mysql80-community                     3.4 M
 mysql-community-client-plugins                     x86_64                     8.0.36-1.el9                      mysql80-community                     1.4 M
 mysql-community-common                             x86_64                     8.0.32-1.el9                      mysql80-community                     544 k
 mysql-community-icu-data-files                     x86_64                     8.0.32-1.el9                      mysql80-community                     2.2 M
 mysql-community-libs                               x86_64                     8.0.36-1.el9                      mysql80-community                     1.4 M

Transaction Summary
=============================================================================================================================================================
Install  6 Packages

Total size: 58 M
Total download size: 8.9 M
Is this ok [y/N]: y
Downloading Packages:
(1/5): mysql-community-common-8.0.32-1.el9.x86_64.rpm                                                                        1.8 MB/s | 544 kB     00:00
(2/5): mysql-community-client-plugins-8.0.36-1.el9.x86_64.rpm                                                                2.4 MB/s | 1.4 MB     00:00
(3/5): mysql-community-client-8.0.36-1.el9.x86_64.rpm                                                                        3.5 MB/s | 3.4 MB     00:00
(4/5): mysql-community-libs-8.0.36-1.el9.x86_64.rpm                                                                          3.4 MB/s | 1.4 MB     00:00
(5/5): mysql-community-icu-data-files-8.0.32-1.el9.x86_64.rpm                                                                2.9 MB/s | 2.2 MB     00:00
-------------------------------------------------------------------------------------------------------------------------------------------------------------
Total                                                                                                                        8.4 MB/s | 8.9 MB     00:01
MySQL 8.0 Community Server                                                                                                   3.0 MB/s | 3.1 kB     00:00
Importing GPG key 0x3A79BD29:
 Userid     : "MySQL Release Engineering <[email protected]>"
 Fingerprint: 859B E8D7 C586 F538 430B 19C2 467B 942D 3A79 BD29
 From       : /etc/pki/rpm-gpg/RPM-GPG-KEY-mysql-2022
Is this ok [y/N]: y
Key imported successfully
Import of key(s) didn't help, wrong key(s)?
Public key for mysql-community-client-8.0.36-1.el9.x86_64.rpm is not installed. Failing package is: mysql-community-client-8.0.36-1.el9.x86_64
 GPG Keys are configured as: file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql-2022
Public key for mysql-community-client-plugins-8.0.36-1.el9.x86_64.rpm is not installed. Failing package is: mysql-community-client-plugins-8.0.36-1.el9.x86_64
 GPG Keys are configured as: file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql-2022
Public key for mysql-community-libs-8.0.36-1.el9.x86_64.rpm is not installed. Failing package is: mysql-community-libs-8.0.36-1.el9.x86_64
 GPG Keys are configured as: file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql-2022
The downloaded packages were saved in cache until the next successful transaction.
You can remove cached packages by executing 'dnf clean packages'.
Error: GPG check FAILED

πŸ”Ά Error: GPG check FAILED

  • dnf install μ§„ν–‰ μ‹œ 였λ₯˜ λ°œμƒ
  • 원인 : GPG-KEY 인증이 되고 μžˆμ§€ μ•Šμ•˜κΈ° λ•Œλ¬Έ
  • 인증을 μœ„ν•΄μ„œ rpm 에 key λ₯Ό import μ‹œν‚΄
[root@localhost rpm-gpg]$ sudo rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
[sudo] password for  root:
[root@localhost Downloads]$ sudo rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022

# μ‹œλ„ ν–ˆλ‹€κ°€ λ‹€μ‹œ 2022 둜 돌렸음 (ν˜Ήμ‹œ 영ν–₯이 μžˆμ„κΉŒλ΄ 기재)
[root@localhost Downloads]$ sudo rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2023
  • μœ„μ˜ λ‚΄μš©μ„ μˆ˜ν–‰ν•˜κ³  λ‹€μ‹œ dnf install 진행해도 였λ₯˜ λ°œμƒ
  • dnf check-update μˆ˜ν–‰
[root@localhost Downloads]$ dnf check-update
CentOS Stream 9 - BaseOS                                                                                                     1.1 MB/s | 8.0 MB     00:07
CentOS Stream 9 - AppStream                                                                                                  2.6 MB/s |  19 MB     00:07
CentOS Stream 9 - Extras packages                                                                                            2.3 kB/s |  16 kB     00:06
Extra Packages for Enterprise Linux 9 - x86_64                                                                               4.2 MB/s |  21 MB     00:04
Extra Packages for Enterprise Linux 9 openh264 (From Cisco) - x86_64                                                         463  B/s | 2.5 kB     00:05
Extra Packages for Enterprise Linux 9 - Next - x86_64                                                                        453 kB/s | 1.4 MB     00:03
MySQL 8.0 Community Server                                                                                                   3.2 MB/s | 1.4 MB     00:00
MySQL Connectors Community                                                                                                   227 kB/s |  45 kB     00:00
MySQL Tools Community                                                                                                        1.6 MB/s | 536 kB     00:00

mysql80-community-release.noarch                                                 el9-5                                                      mysql80-community
xrdp.x86_64                                                                      1:0.9.25-2.el9                                             epel
xrdp-selinux.x86_64                                                              1:0.9.25-2.el9                                             epel
Obsoleting Packages
mysql-community-server.x86_64                                                    8.0.30-1.el9                                               mysql80-community
############ (μ€‘λž΅) ############

πŸ”Ά dnf install μž¬μ‹€ν–‰

[root@localhost Downloads]$ sudo dnf install mysql-community-server-8.0.32-1.el9.x86_64.rpm
Last metadata expiration check: 3:13:05 ago on Fri 22 Mar 2024 12:28:45 PM KST.
Dependencies resolved.
=============================================================================================================================================================
 Package                                            Architecture               Version                           Repository                             Size
=============================================================================================================================================================
Installing:
 mysql-community-server                             x86_64                     8.0.32-1.el9                      @commandline                           49 M
     replacing  mariadb-connector-c-config.noarch 3.2.6-1.el9
Installing dependencies:
 mysql-community-client                             x86_64                     8.0.36-1.el9                      mysql80-community                     3.4 M
 mysql-community-client-plugins                     x86_64                     8.0.36-1.el9                      mysql80-community                     1.4 M
 mysql-community-common                             x86_64                     8.0.32-1.el9                      mysql80-community                     544 k
 mysql-community-icu-data-files                     x86_64                     8.0.32-1.el9                      mysql80-community                     2.2 M
 mysql-community-libs                               x86_64                     8.0.36-1.el9                      mysql80-community                     1.4 M

Transaction Summary
=============================================================================================================================================================
Install  6 Packages

Total size: 58 M
Is this ok [y/N]: y
Downloading Packages:
[SKIPPED] mysql-community-client-8.0.36-1.el9.x86_64.rpm: Already downloaded
[SKIPPED] mysql-community-client-plugins-8.0.36-1.el9.x86_64.rpm: Already downloaded
[SKIPPED] mysql-community-common-8.0.32-1.el9.x86_64.rpm: Already downloaded
[SKIPPED] mysql-community-icu-data-files-8.0.32-1.el9.x86_64.rpm: Already downloaded
[SKIPPED] mysql-community-libs-8.0.36-1.el9.x86_64.rpm: Already downloaded
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                                                                                                     1/1
  Installing       : mysql-community-common-8.0.32-1.el9.x86_64                                                                                          1/7
  Installing       : mysql-community-client-plugins-8.0.36-1.el9.x86_64                                                                                  2/7
  Installing       : mysql-community-libs-8.0.36-1.el9.x86_64                                                                                            3/7
  Running scriptlet: mysql-community-libs-8.0.36-1.el9.x86_64                                                                                            3/7
  Installing       : mysql-community-client-8.0.36-1.el9.x86_64                                                                                          4/7
  Installing       : mysql-community-icu-data-files-8.0.32-1.el9.x86_64                                                                                  5/7
  Running scriptlet: mysql-community-server-8.0.32-1.el9.x86_64                                                                                          6/7
  Installing       : mysql-community-server-8.0.32-1.el9.x86_64                                                                                          6/7
  Running scriptlet: mysql-community-server-8.0.32-1.el9.x86_64                                                                                          6/7
  Obsoleting       : mariadb-connector-c-config-3.2.6-1.el9.noarch                                                                                       7/7
  Running scriptlet: mariadb-connector-c-config-3.2.6-1.el9.noarch                                                                                       7/7
  Verifying        : mysql-community-client-8.0.36-1.el9.x86_64                                                                                          1/7
  Verifying        : mysql-community-client-plugins-8.0.36-1.el9.x86_64                                                                                  2/7
  Verifying        : mysql-community-common-8.0.32-1.el9.x86_64                                                                                          3/7
  Verifying        : mysql-community-icu-data-files-8.0.32-1.el9.x86_64                                                                                  4/7
  Verifying        : mysql-community-libs-8.0.36-1.el9.x86_64                                                                                            5/7
  Verifying        : mysql-community-server-8.0.32-1.el9.x86_64                                                                                          6/7
  Verifying        : mariadb-connector-c-config-3.2.6-1.el9.noarch                                                                                       7/7

Installed:
  mysql-community-client-8.0.36-1.el9.x86_64            mysql-community-client-plugins-8.0.36-1.el9.x86_64    mysql-community-common-8.0.32-1.el9.x86_64
  mysql-community-icu-data-files-8.0.32-1.el9.x86_64    mysql-community-libs-8.0.36-1.el9.x86_64              mysql-community-server-8.0.32-1.el9.x86_64

Complete!
  • ν™œμ„±ν™” 및 λΉ„ν™œμ„±ν™”λœ MySQL 리포지토리λ₯Ό λͺ¨λ‘ λ‚˜μ—΄
[root@localhost Downloads]$ dnf repolist all | grep mysql
mysql-cluster-8.0-community           MySQL Cluster 8.0 Community       disabled
mysql-cluster-8.0-community-debuginfo MySQL Cluster 8.0 Community - Deb disabled
mysql-cluster-8.0-community-source    MySQL Cluster 8.0 Community - Sou disabled
mysql-connectors-community            MySQL Connectors Community        enabled
mysql-connectors-community-debuginfo  MySQL Connectors Community - Debu disabled
mysql-connectors-community-source     MySQL Connectors Community - Sour disabled
mysql-tools-community                 MySQL Tools Community             enabled
mysql-tools-community-debuginfo       MySQL Tools Community - Debuginfo disabled
mysql-tools-community-source          MySQL Tools Community - Source    disabled
mysql80-community                     MySQL 8.0 Community Server        enabled
mysql80-community-debuginfo           MySQL 8.0 Community Server - Debu disabled
mysql80-community-source              MySQL 8.0 Community Server - Sour disabled
  • μ„€μΉ˜λœ mysql * νŒ¨ν‚€μ§€ λͺ©λ‘
[root@localhost mysql]$ sudo dnf list installed | grep mysql
mysql-community-client.x86_64                    8.0.36-1.el9                       @mysql80-community
mysql-community-client-plugins.x86_64            8.0.36-1.el9                       @mysql80-community
mysql-community-common.x86_64                    8.0.32-1.el9                       @mysql80-community
mysql-community-icu-data-files.x86_64            8.0.32-1.el9                       @mysql80-community
mysql-community-libs.x86_64                      8.0.36-1.el9                       @mysql80-community
mysql-community-server.x86_64                    8.0.32-1.el9                       @@commandline
mysql-ref-manual-8.0-en-html-chapter.noarch      1-20220914                         @mysql80-community
mysql80-community-release.noarch                 el9-1                              @System
pcp-pmda-mysql.x86_64                            6.2.0-1.el9                        @AppStream

πŸ”Ά νŒ¨ν‚€μ§€ μΆ”κ°€ μ„€μΉ˜

  • repo μ—μ„œ μΆ”κ°€ μ„€μΉ˜ κ°€λŠ₯ν•œ νŒ¨ν‚€μ§€ ν™•μΈν•˜κΈ°
[root@localhost mysql]$ dnf --disablerepo=\* --enablerepo='mysql*-community*' list available
No read/execute access in current directory, moving to /
MySQL Cluster 8.0 Community                                                                                                  2.4 MB/s | 1.5 MB     00:00
MySQL 8.0 Community Server - Debuginfo                                                                                       386 kB/s | 136 kB     00:00
MySQL Connectors Community - Debuginfo                                                                                        15 kB/s | 7.6 kB     00:00
MySQL Tools Community - Debuginfo                                                                                             65 kB/s |  25 kB     00:00
MySQL Cluster 8.0 Community - Debuginfo                                                                                      315 kB/s | 155 kB     00:00
MySQL 8.0 Community Server - Source                                                                                          8.3 kB/s | 3.2 kB     00:00
MySQL Connectors Community - Source                                                                                          8.9 kB/s | 5.1 kB     00:00
MySQL Tools Community - Source                                                                                               6.6 kB/s | 2.8 kB     00:00
MySQL Cluster 8.0 Community - Source                                                                                         5.9 kB/s | 2.9 kB     00:00
Available Packages
mysql-cluster-community.src                                                       8.0.36-1.el9                          mysql-cluster-8.0-community-source
mysql-cluster-community-client.x86_64                                             8.0.36-1.el9                          mysql-cluster-8.0-community
mysql-cluster-community-client-debuginfo.x86_64                                   8.0.36-1.el9                          mysql-cluster-8.0-community-debuginfo
mysql-cluster-community-client-plugins.x86_64                                     8.0.36-1.el9                          mysql-cluster-8.0-community
mysql-cluster-community-client-plugins-debuginfo.x86_64                           8.0.36-1.el9                          mysql-cluster-8.0-community-debuginfo
mysql-cluster-community-common.x86_64                                             8.0.36-1.el9                          mysql-cluster-8.0-community
############ (μ€‘λž΅) ############
  • mysql-ref-manual-8.0-en-html-chapter.noarch νŒ¨ν‚€μ§€ μΆ”κ°€ μ„€μΉ˜
[root@localhost mysql]$ sudo dnf install mysql-ref-manual-8.0-en-html-chapter.noarch
Last metadata expiration check: 0:56:36 ago on Fri 22 Mar 2024 03:42:06 PM KST.
Dependencies resolved.
=============================================================================================================================================================
 Package                                                 Architecture              Version                        Repository                            Size
=============================================================================================================================================================
Installing:
 mysql-ref-manual-8.0-en-html-chapter                    noarch                    1-20220914                     mysql80-community                    7.9 M

Transaction Summary
=============================================================================================================================================================
Install  1 Package

Total download size: 7.9 M
Installed size: 41 M
Is this ok [y/N]: y
Downloading Packages:
mysql-ref-manual-8.0-en-html-chapter-1-20220914.noarch.rpm                                                                   8.1 MB/s | 7.9 MB     00:00
-------------------------------------------------------------------------------------------------------------------------------------------------------------
Total                                                                                                                        8.1 MB/s | 7.9 MB     00:00
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                                                                                                     1/1
  Installing       : mysql-ref-manual-8.0-en-html-chapter-1-20220914.noarch                                                                              1/1
  Verifying        : mysql-ref-manual-8.0-en-html-chapter-1-20220914.noarch                                                                              1/1

Installed:
  mysql-ref-manual-8.0-en-html-chapter-1-20220914.noarch

Complete!

7-3. MySQL DB 데이터 μ €μž₯μ†Œ λ³€κ²½

  • 쑰건 : systemctl status mysqld κ²°κ³Ό inactive (dead) μƒνƒœμ—¬μ•Ό 함
  • DB 데이터 μ €μž₯μ†Œλ‘œ 지정될 경둜 : /cargo1
  • my.cnf 파일 > datadir, socket 경둜 μˆ˜μ •
    • ν…Œμ΄λΈ”λͺ… 쑰회 μ‹œ λŒ€μ†Œλ¬Έμž ꡬ뢄 없이 μ‚¬μš©ν•˜λ„λ‘ ν•˜λŠ” 섀정도 ν•¨κ»˜ μΆ”κ°€
[root@localhost mysql]$ sudo vi /etc/my.cnf

[mysqld]
#datadir=/var/lib/mysql
#socket=/var/lib/mysql/mysql.sock
datadir=/cargo1/mysql
socket=/cargo1/mysql/mysql.sock
lower_case_table_names=1
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
  • rsync μž‘μ—… μ‹œ κΈ°μ‘΄ μŠ€ν‚€λ§ˆλ“€μ„ λͺ¨λ‘ λ³΅μ‚¬ν•˜μ—¬ κ°€μ Έμ˜΄ (ν˜„μž¬ ν™˜κ²½μ—λŠ” μƒμ„±λœ μŠ€ν‚€λ§ˆκ°€ μ—†μ§€λ§Œ μš°μ„  따라함)
# mysql 볡사
[root@localhost mysql]$ sudo rsync -av /var/lib/mysql /cargo1
sending incremental file list
mysql/

sent 64 bytes  received 20 bytes  168.00 bytes/sec
total size is 0  speedup is 0.00

# mysql κΆŒν•œ λΆ€μ—¬
[root@localhost mysql]$ sudo chown -R mysql:mysql /cargo1/mysql
  • SElinux λ³΄μ•ˆ μΆ”κ°€
    • ν”„λ‘œμ„ΈμŠ€μ— μƒˆλ‘œ κΆŒν•œμ„ μΆ”κ°€ν•΄μ£Όμ—ˆκΈ° λ•Œλ¬Έμ— ν•΄λ‹Ή 경둜의 SElinux λ³΄μ•ˆ μ»¨ν…μŠ€νŠΈλ₯Ό μΆ”κ°€ν•΄μ•Ό 함
    • μΆ”κ°€ν•˜μ§€ μ•ŠμœΌλ©΄ MySQL μ‹€ν–‰μ‹œ permission μ—λŸ¬ λ°œμƒ (μ—λŸ¬ λ‚΄μš©μ€ /var/log/audit/audit.log μ—μ„œ 확인 κ°€λŠ₯)
    • μ•ˆλœλ‹€κ³  SElinux λ₯Ό ν•΄μ œν•˜λŠ”κ²ƒμ€ 맀우 μœ„ν—˜ν•˜λ―€λ‘œ λΉ„μΆ”
[root@localhost mysql]$ sudo semanage fcontext -a -t mysqld_db_t "/cargo1/mysql(/.*)?"
[root@localhost mysql]$ sudo restorecon -R /cargo1/mysql

# μ„€μ • μ™„λ£Œλ˜μ—ˆλŠ”μ§€ 확인
[root@localhost mysql]$ sudo semanage fcontext -l | grep mysql
/cargo1/mysql(/.*)?                                all files          system_u:object_r:mysqld_db_t:s0

7-4. MySQL μ‹€ν–‰

  • systemctl status mysqld : μƒνƒœ 확인
    • systemctl start mysqld : MySQL μ‹€ν–‰
    • systemctl stop mysqld : MySQL μ’…λ£Œ
[root@localhost mysql]$ systemctl status mysqld
β—‹ mysqld.service - MySQL Server
     Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; preset: disabled)
     Active: inactive (dead)
       Docs: man:mysqld(8)
             http://dev.mysql.com/doc/refman/en/using-systemd.html
[root@localhost mysql]$ systemctl start mysqld
==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ====
Authentication is required to start 'mysqld.service'.
Authenticating as: YNJCH (root)
Password:
==== AUTHENTICATION COMPLETE ====
[root@localhost mysql]$ systemctl status mysqld
● mysqld.service - MySQL Server
     Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; preset: disabled)
     Active: active (running) since Fri 2024-03-22 16:34:12 KST; 13s ago
       Docs: man:mysqld(8)
             http://dev.mysql.com/doc/refman/en/using-systemd.html
    Process: 417304 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS)
   Main PID: 417378 (mysqld)
     Status: "Server is operational"
      Tasks: 39 (limit: 202223)
     Memory: 451.2M
        CPU: 6.081s
     CGroup: /system.slice/mysqld.service
             └─417378 /usr/sbin/mysqld

Mar 22 16:33:25 localhost.localdomain systemd[1]: Starting MySQL Server...
Mar 22 16:34:12 localhost.localdomain systemd[1]: Started MySQL Server.
  • /cargo1/mysql κ²½λ‘œμ— νŒŒμΌλ“€μ΄ 생긴 것 확인 κ°€λŠ₯
[root@localhost mysql]$ pwd
/cargo1/mysql
[root@localhost mysql]$ sudo ls
 auto.cnf        ca-key.pem        client-key.pem       ib_buffer_pool  '#innodb_redo'   mysql.ibd         performance_schema   server-cert.pem   undo_001
 binlog.000001   ca.pem           '#ib_16384_0.dblwr'   ibdata1         '#innodb_temp'   mysql.sock        private_key.pem      server-key.pem    undo_002
 binlog.index    client-cert.pem  '#ib_16384_1.dblwr'   ibtmp1           mysql           mysql.sock.lock   public_key.pem       sys

πŸ”Ά systemctl start mysqld μ‹€νŒ¨

  • μ•„λž˜μ™€ 같이 였λ₯˜ λ°œμƒκ³Ό ν•¨κ»˜ start λ˜μ§€ μ•ŠμŒ
[root@localhost mysql]$ systemctl start mysqld
############ (μ€‘λž΅) ############
Job for mysqld.service failed because the control process exited with error code.
See "systemctl status mysqld.service" and "journalctl -xeu mysqld.service" for details.
2024-03-22T07:47:45.105142Z 1 [ERROR] [MY-011087] [Server] Different lower_case_table_names settings for server ('1') and data dictionary ('0').
2024-03-22T07:47:45.105570Z 0 [ERROR] [MY-010020] [Server] Data Dictionary initialization failed.
  • lower_case_table_names=1 κ°’μ˜ μœ„μΉ˜, #datadir λ“±μ˜ 주석 μ²˜λ¦¬κ°€ μ œλŒ€λ‘œ λ˜μ—ˆλŠ”μ§€ 확인
    • systemctl stop mysqld ν›„ 파일 μˆ˜μ •μ„ ν•΄μ•Ό 함
  • 이후에도 계속 문제 λ°œμƒ μ‹œ, my.cnf κ°€ μ΄ˆκΈ°ν™” μ‹œμ— μˆ˜μ •μ΄ 이루어진 것인지 체크
    • MySQL μ΄ˆκΈ°ν™”(제거 및 μž¬μ„€μΉ˜) ν›„ my.cnf λΆ€ν„° μˆ˜μ •ν•˜λ„λ‘ μœ„μ˜ 절차 λ‹€μ‹œ μ§„ν–‰
[root@localhost mysql]$ sudo vi /etc/my.cnf

[mysqld]
#datadir=/var/lib/mysql
#socket=/var/lib/mysql/mysql.sock
datadir=/cargo1/mysql
socket=/cargo1/mysql/mysql.sock
lower_case_table_names=1
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
  • chmod 755 my.cnf λͺ…λ Ήμ–΄ μˆ˜ν–‰
[root@localhost etc]# chmod 755 my.cnf

-rwxr-xr-x.   1 root root      1326 Mar 25 10:37 my.cnf

πŸ”Ά 3306 Port μƒμ‹œ ν—ˆμš©

  • 방화벽에 3306 Portλ₯Ό μƒμ‹œ ν—ˆμš©μœΌλ‘œ 등둝 및 μž¬μ‹€ν–‰
[root@localhost ~]# sudo firewall-cmd --permanent --zone=public --add-port=3306/tcp
success
[root@localhost ~]# sudo firewall-cmd --reload
success
[root@localhost ~]# sudo firewall-cmd --list-port
3306/tcp 3389/tcp

πŸ”Ά status 확인

mysql> status
--------------
mysql  Ver 8.0.36 for Linux on x86_64 (MySQL Community Server - GPL)

Connection id:          13
Current database:
Current user:           root@localhost
SSL:                    Not in use
Current pager:          stdout
Using outfile:          ''
Using delimiter:        ;
Server version:         8.0.32 MySQL Community Server - GPL
Protocol version:       10
Connection:             Localhost via UNIX socket
Server characterset:    utf8mb4
Db     characterset:    utf8mb4
Client characterset:    utf8mb4
Conn.  characterset:    utf8mb4
UNIX socket:            /cargo1/mysql/mysql.sock
Binary data as:         Hexadecimal

πŸ”Ά Character Set 확인

  • Character Set : utf8 / 4byte (λ³€κ²½ν•  사항 μ—†μŒ)
mysql> show variables like "ch%";
+--------------------------+--------------------------------+
| Variable_name            | Value                          |
+--------------------------+--------------------------------+
| character_set_client     | utf8mb4                        |
| character_set_connection | utf8mb4                        |
| character_set_database   | utf8mb4                        |
| character_set_filesystem | binary                         |
| character_set_results    | utf8mb4                        |
| character_set_server     | utf8mb4                        |
| character_set_system     | utf8mb3                        |
| character_sets_dir       | /usr/share/mysql-8.0/charsets/ |
| check_proxy_users        | OFF                            |
+--------------------------+--------------------------------+
9 rows in set (0.01 sec)

mysql> show variables like "col%";
+----------------------+--------------------+
| Variable_name        | Value              |
+----------------------+--------------------+
| collation_connection | utf8mb4_0900_ai_ci |
| collation_database   | utf8mb4_0900_ai_ci |
| collation_server     | utf8mb4_0900_ai_ci |
+----------------------+--------------------+
3 rows in set (0.00 sec)

8. MySQL 계정

8-1. root 접속

  • μž„μ‹œ νŒ¨μŠ€μ›Œλ“œ 확인 & root νŒ¨μŠ€μ›Œλ“œ λ³€κ²½
[root@localhost mysql]$ sudo grep 'temporary password' /var/log/mysqld.log
2024-03-22T07:33:42.873919Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: duy4Xcq-aH%L
  • root 접속
[root@localhost mysql]$ mysql -uroot -p
Enter password: [duy4Xcq-aH%L]

πŸ”Ά Can't connect to local MySQL server through socket

  • ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock'
  • MySQL의 μ†ŒμΌ“ 파일인 mysql.sock 파일이 μ—†κ±°λ‚˜ μ •ν™•ν•˜μ§€ μ•Šμ•„μ„œ λ°œμƒν•˜λŠ” μ—λŸ¬
  • /cargo1/mysql 둜 디렉토리 λ³€κ²½ν•˜λ©΄μ„œ λ°œμƒλ¨
    • (24.04.01 μ‚­μ œ ν›„ μž¬μ„€μΉ˜ν•˜λ‹ˆ socket μœ„μΉ˜ κΈ°μž¬ν•˜μ§€ μ•Šμ•„λ„ 접속됨)
[root@localhost mysql]# mysql -uroot -p -S '/cargo1/mysql/mysql.sock'
  • μœ„μ™€ 같이 μ†ŒμΌ“ 파일 μœ„μΉ˜λ₯Ό 직접 지정해쀄 수 있음
  • 둜그 확인 : tail -f /var/log/mysqld.log

  • mysql.sock 파일 μœ„μΉ˜ μ°ΎκΈ°
[root@localhost /]# find / -name mysql.sock
find: β€˜/run/user/1000/gvfs’: Permission denied
/cargo1/mysql/mysql.sock

8-2. root νŒ¨μŠ€μ›Œλ“œ λ³€κ²½

  • μž„μ‹œ νŒ¨μŠ€μ›Œλ“œμ—μ„œ μ΄ˆκΈ°ν™”ν•΄μ•Ό 함
  • λŒ€λ¬Έμžλ₯Ό 포함해야 ν•΄μ„œ μ†Œλ¬Έμžλ§ŒμœΌλ‘œλ„ μ‚¬μš©ν•  수 μžˆλ„λ‘ νŒ¨μŠ€μ›Œλ“œ ꡬ성 방법 λ³€κ²½ ν•„μš”
mysql> alter user 'root'@'localhost' identified by 'password$$';
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

mysql> alter user 'root'@'localhost' identified by 'password$$';
Query OK, 0 rows affected (0.06 sec)

mysql> show variables like 'val%';
+--------------------------------------+--------+
| Variable_name                        | Value  |
+--------------------------------------+--------+
| validate_password.check_user_name    | ON     |
| validate_password.dictionary_file    |        |
| validate_password.length             | 8      |
| validate_password.mixed_case_count   | 1      |
| validate_password.number_count       | 1      |
| validate_password.policy             | MEDIUM |
| validate_password.special_char_count | 1      |
+--------------------------------------+--------+
7 rows in set (0.00 sec)

mysql> SET GLOBAL validate_password.mixed_case_count = 0;
Query OK, 0 rows affected (0.00 sec)

# λ‹€μ‹œ 'password$$' 으둜 PW λ³€κ²½
  • μ•žμœΌλ‘œ 둜그인 μ‹œ
[root@localhost mysql]# mysql -uroot -p -S '/cargo1/mysql/mysql.sock'
Enter password: [password$$]

8-3. 계정 μΆ”κ°€ 및 κΆŒν•œ μ„€μ •

  • 'root'@'%' μ„€μ •
mysql> create user 'root'@'%' identified by 'password$$';
Query OK, 0 rows affected (0.02 sec)
mysql> create user 'projyj'@localhost identified by 'password$$';
Query OK, 0 rows affected (0.02 sec)

mysql> create user 'projyj'@'%' identified by 'password$$';
Query OK, 0 rows affected (0.01 sec) 

mysql> grant all privileges on *.* to 'projyj'@'%';
Query OK, 0 rows affected (0.02 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
  • select host, user, authentication_string from USER; 둜 확인 κ°€λŠ₯

πŸ”Ά μ•”ν˜Έν™” 방식 λ³€κ²½

  • 8.0.32 버전 μ•”ν˜Έν™” 방식 확인 : caching_sha2_password
mysql> SELECT User, Host, plugin FROM mysql.user;
+------------------+-----------+-----------------------+
| User             | Host      | plugin                |
+------------------+-----------+-----------------------+
| projyj            | %         | caching_sha2_password |
| root             | %         | caching_sha2_password |
| projyj            | localhost | caching_sha2_password |
| root             | localhost | caching_sha2_password |
| mysql.infoschema | localhost | caching_sha2_password |
| mysql.session    | localhost | caching_sha2_password |
| mysql.sys        | localhost | caching_sha2_password |
+------------------+-----------+-----------------------+
  • ProjYj μ‚¬μš© 계정은 μ˜ˆμ „ λ°©μ‹μ˜ μ•”ν˜Έμ²΄κ³„ mysql_native_password 둜 λ³€κ²½ν•΄μ•Ό 함
mysql> ALTER USER 'projyj'@'%' IDENTIFIED WITH mysql_native_password BY 'password$$';
mysql> ALTER USER 'projyj'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password$$';

πŸ”Ά MySQL μ‚¬μš©μž 계정 λΉ„λ°€λ²ˆν˜Έ μ •μ±…

  • MySQL μ‚¬μš©μž 계정 λΉ„λ°€λ²ˆν˜Έ μ •μ±… λ³€κ²½
  • validate_password_policy λ₯Ό LOW 둜 μ„€μ •
mysql> set global validate_password.policy=LOW;
Query OK, 0 rows affected (0.00 sec)

9. MySQL ν…Œμ΄λΈ” 생성

9-1. λ°μ΄ν„°λ² μ΄μŠ€ 생성

  • projyj λ°μ΄ν„°λ² μ΄μŠ€ 생성
mysql> create database projyj;
Query OK, 1 row affected (0.15 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| projyj              |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

9-2. ν…Œμ΄λΈ” 생성

  • FileZilla > /home > EZMIG_init.sql, ALTER_TABLE.sql, ALTER_TABLE_COLUMN.sql νŒŒμΌμ„ μ—…λ‘œλ“œ
[root@localhost home]# cd /home
[root@localhost home]# ls
ALTER_TABLE_COLUMN.sql  ALTER_TABLE.sql  EZMIG_init.sql  projyj
  • EZMIG_init.sql μ‹€ν–‰ > 57개 ν…Œμ΄λΈ”μ΄ μƒμ„±λ˜λ©΄ 성곡
[root@localhost home]#  mysql -uroot -p projyj -S '/cargo1/mysql/mysql.sock' < EZMIG_init.sql
Enter password:
  • ALTER_TABLE_COLUMN.sql μ‹€ν–‰ > ν…Œμ΄λΈ” 및 컬럼 μ½”λ©˜νŠΈκ°€ μƒμ„±λ˜λ©΄ 성곡
[root@localhost home]#  mysql -uroot -p projyj -S '/cargo1/mysql/mysql.sock' < ALTER_TABLE.sql
Enter password:
[root@localhost home]#  mysql -uroot -p projyj -S '/cargo1/mysql/mysql.sock' < ALTER_TABLE_COLUMN.sql
Enter password:

πŸ”Ά DBeaver μ—μ„œ 확인

  • Public Key Retrieval is not allowed 였λ₯˜ λ°œμƒ μ‹œ, URL 에 ?useSSL=false&allowPublicKeyRetrieval=true μΆ”κ°€
  • URL : jdbc:mysql://192.168.1.111:3306/projyj?useSSL=false&allowPublicKeyRetrieval=true
  • ID : projyj / PW : password$$

10. λ„€νŠΈμ›Œν¬ μƒνƒœ 확인

  • μ„œλ²„μ˜ κΈ°λ³Έ μ‚¬μš© 포트λ₯Ό μœ μ§€ν•˜λ©°, ProjYj Web μ„œλ²„λŠ” 8070 포트λ₯Ό μ‚¬μš©ν•˜λ„λ‘ 함
  • 포트 확인 : netstat -ltnp | grep 8070
  • 포트 죽이기 : kill -9 [PID]

10-1. λ„€νŠΈμ›Œν¬ μƒνƒœ 확인

  • netstat > λͺ¨λ“  μˆ˜μ‹  μ†ŒμΌ“κ³Ό 연결을 확인
  • lsof > TCP port 접속 정보 확인 및 μš”μ•½ 보기
[root@localhost home]# netstat -ltnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.1:44321         0.0.0.0:*               LISTEN      2195/pmcd
tcp        0      0 127.0.0.1:5910          0.0.0.0:*               LISTEN      349956/Xvnc
tcp        0      0 127.0.0.1:4330          0.0.0.0:*               LISTEN      3175/pmlogger
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      351164/sshd: /usr/s
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      1/systemd
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      1324/cupsd
tcp6       0      0 :::9090                 :::*                    LISTEN      1/systemd
tcp6       0      0 ::1:44321               :::*                    LISTEN      2195/pmcd
tcp6       0      0 ::1:4330                :::*                    LISTEN      3175/pmlogger
tcp6       0      0 ::1:5910                :::*                    LISTEN      349956/Xvnc
tcp6       0      0 :::33060                :::*                    LISTEN      549541/mysqld
tcp6       0      0 :::22                   :::*                    LISTEN      351164/sshd: /usr/s
tcp6       0      0 :::111                  :::*                    LISTEN      1/systemd
tcp6       0      0 :::3389                 :::*                    LISTEN      345161/xrdp
tcp6       0      0 :::3306                 :::*                    LISTEN      549541/mysqld
tcp6       0      0 ::1:631                 :::*                    LISTEN      1324/cupsd
tcp6       0      0 ::1:3350                :::*                    LISTEN      345160/xrdp-sesman

[root@localhost home]# sudo lsof -i TCP -P |grep LISTEN
systemd        1  root   80u  IPv4  777988      0t0  TCP *:111 (LISTEN)
systemd        1  root   84u  IPv6  777019      0t0  TCP *:111 (LISTEN)
systemd        1  root  248u  IPv6  802458      0t0  TCP *:9090 (LISTEN)
cupsd       1324  root    6u  IPv6   20817      0t0  TCP localhost:631 (LISTEN)
cupsd       1324  root    7u  IPv4   20818      0t0  TCP localhost:631 (LISTEN)
pmcd        2195   pcp    0u  IPv4   17264      0t0  TCP localhost:44321 (LISTEN)
pmcd        2195   pcp    3u  IPv6   17265      0t0  TCP localhost:44321 (LISTEN)
pmlogger    3175   pcp    7u  IPv4 1337160      0t0  TCP localhost:4330 (LISTEN)
pmlogger    3175   pcp    8u  IPv6 1337161      0t0  TCP localhost:4330 (LISTEN)
xrdp-sesm 345160  root   11u  IPv6  742974      0t0  TCP localhost:3350 (LISTEN)
xrdp      345161  root   11u  IPv6  746744      0t0  TCP *:3389 (LISTEN)
Xvnc      349956  root    6u  IPv4  760993      0t0  TCP localhost:5910 (LISTEN)
Xvnc      349956  root    7u  IPv6  760994      0t0  TCP localhost:5910 (LISTEN)
sshd      351164  root    3u  IPv4  763481      0t0  TCP *:22 (LISTEN)
sshd      351164  root    4u  IPv6  763483      0t0  TCP *:22 (LISTEN)
mysqld    549541 mysql   21u  IPv6 1688602      0t0  TCP *:33060 (LISTEN)
mysqld    549541 mysql   24u  IPv6 1684797      0t0  TCP *:3306 (LISTEN)

[root@localhost home]# sudo lsof -i -nP | grep LISTEN | awk '{print $(NF-1)" "$1}' | sort
*:111 systemd
*:111 systemd
127.0.0.1:4330 pmlogger
127.0.0.1:44321 pmcd
127.0.0.1:5910 Xvnc
127.0.0.1:631 cupsd
[::1]:3350 xrdp-sesm
[::1]:4330 pmlogger
[::1]:44321 pmcd
[::1]:5910 Xvnc
[::1]:631 cupsd
*:22 sshd
*:22 sshd
*:33060 mysqld
*:3306 mysqld
*:3389 xrdp
*:9090 systemd

11. Tomcat μ„€μΉ˜

  • 8.0.36 버전을 κΈ°μ€€μœΌλ‘œ μ„€μΉ˜
  • rpm 배포 파일이 μ—†κ³ , μ••μΆ• 파일둜만 제곡됨 > wget 으둜 λ‹€μš΄λ‘œλ“œ μ§„ν–‰
# 디렉토리 생성
[root@localhost /]# mkdir projyjengine
[root@localhost /]# mkdir tomcat
# wget 으둜 λ‹€μš΄λ‘œλ“œ
[root@localhost Downloads]# pwd
/root/Downloads
[root@localhost Downloads]# wget https://archive.apache.org/dist/tomcat/tomcat-8/v8.0.36/bin/apache-tomcat-8.0.36.tar.gz
--2024-03-28 09:45:52--  https://archive.apache.org/dist/tomcat/tomcat-8/v8.0.36/bin/apache-tomcat-8.0.36.tar.gz
Resolving archive.apache.org (archive.apache.org)... 65.108.204.189, 2a01:4f9:1a:a084::2
Connecting to archive.apache.org (archive.apache.org)|65.108.204.189|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 9277365 (8.8M) [application/x-gzip]
Saving to: β€˜apache-tomcat-8.0.36.tar.gz’

apache-tomcat-8.0.36.tar.gz             100%[============================================================================>]   8.85M   939KB/s    in 11s

2024-03-28 09:46:04 (831 KB/s) - β€˜apache-tomcat-8.0.36.tar.gz’ saved [9277365/9277365]
  • /tomcat κ²½λ‘œμ— μ••μΆ• ν’€κΈ°
[root@localhost Downloads]# tar -xvf  apache-tomcat-8.0.36.tar.gz -C /tomcat/
apache-tomcat-8.0.36/bin/catalina.sh
apache-tomcat-8.0.36/bin/configtest.sh
apache-tomcat-8.0.36/bin/daemon.sh

11-1. Tomcat μ„€μ •

  • server.xml : 8080 포트λ₯Ό 8070 둜 λ³€κ²½ν•˜κ³  μ €μž₯
[root@localhost conf]# pwd
/tomcat/apache-tomcat-8.0.36/conf
[root@localhost conf]# vi server.xml

    <Connector port="8070" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
  • Time zone 확인
[root@localhost conf]# timedatectl
               Local time: Thu 2024-03-28 09:51:11 KST
           Universal time: Thu 2024-03-28 00:51:11 UTC
                 RTC time: Thu 2024-03-28 09:51:11
                Time zone: Asia/Seoul (KST, +0900)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: yes
  • λ°©ν™”λ²½ 8070 포트 μ—΄κΈ° (8888 μ΄μ—ˆλ‹€κ°€ 변경함)
[root@localhost ~]# firewall-cmd --permanent --zone=public --add-port=8070/tcp
success
[root@localhost ~]# firewall-cmd --reload
success
[root@localhost ~]# firewall-cmd --list-port
3306/tcp 3389/tcp 8070/tcp 8888/tcp
  • Java Version 확인 : openjdk version "1.8.0_362"
[root@localhost conf]# java -version
openjdk version "1.8.0_362"
OpenJDK Runtime Environment (build 1.8.0_362-b08)
OpenJDK 64-Bit Server VM (build 25.362-b08, mixed mode)

πŸ”Ά ν™˜κ²½λ³€μˆ˜ μ„€μ •

  • ν™˜κ²½λ³€μˆ˜ μ„€μ • μ§„ν–‰ν•˜μ§„ μ•Šμ•˜μœΌλ‚˜, 일단 기둝해둔 κ²ƒμž„
  • /etc/profile 을 직접 μˆ˜μ •
[root@localhost etc]# cd /etc
[root@localhost etc]# vi profile

JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.362.b09-4.el9.x86_64/jre
CATALINA_HOME=/tomcat/apache-tomcat-8.0.36

11-2. Tomcat ꡬ동

[root@localhost bin]# pwd
/tomcat/apache-tomcat-8.0.36/bin
[root@localhost bin]# ./startup.sh
Using CATALINA_BASE:   /tomcat/apache-tomcat-8.0.36
Using CATALINA_HOME:   /tomcat/apache-tomcat-8.0.36
Using CATALINA_TMPDIR: /tomcat/apache-tomcat-8.0.36/temp
Using JRE_HOME:        /usr
Using CLASSPATH:       /tomcat/apache-tomcat-8.0.36/bin/bootstrap.jar:/tomcat/apache-tomcat-8.0.36/bin/tomcat-juli.jar
Tomcat started.

12. CentOS IP λ³€κ²½

[root@localhost network-scripts]# rm -rf ifcfg-eno1

12-1. 이더넷 μ„ΈνŒ…

  • λ„€νŠΈμ›Œν¬ μΈν„°νŽ˜μ΄μŠ€ name 확인 : eno1
    • inet 192.168.1.999 을 확인
[root@localhost bin]# ifconfig
eno1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.999  netmask 255.255.255.0  broadcast 192.168.1.255
        inet6 fe80::dabb:c1ff:fe4d:c443  prefixlen 64  scopeid 0x20<link>
        ether d8:bb:c1:4d:c4:43  txqueuelen 1000  (Ethernet)
        RX packets 480472  bytes 169286658 (161.4 MiB)
        RX errors 0  dropped 32337  overruns 0  frame 0
        TX packets 249470  bytes 258333052 (246.3 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device interrupt 16  memory 0xa1200000-a1220000

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 62902  bytes 3802084 (3.6 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 62902  bytes 3802084 (3.6 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

# μ•„λž˜ λ°©λ²•μœΌλ‘œλ„ 확인 κ°€λŠ₯
[root@localhost bin]# ls /sys/class/net
eno1  lo
  • ifcfg-eno1 파일이 μ—†μ–΄μ„œ μƒˆλ‘œ 생성
    • BOOTPROTO : dhcp λŒ€μ‹  static 으둜 μ„€μ • (dhcp: μžλ™ν• λ‹Ή / static: μˆ˜λ™μœΌλ‘œ μ„€μ •)
    • IPADDR : μ„€μ •ν•  IP μ£Όμ†Œ
    • NETMASK : μ„œλΈŒλ„· 마슀크 μ£Όμ†Œ
    • GATEWAY : κ²Œμ΄νŠΈμ›¨μ΄ μ£Όμ†Œ
    • DNS : DNSμ£Όμ†Œ (μ›Ή μ‚¬μ΄νŠΈ μ—°κ²°ν•˜μ§€ μ•Šμ„ 경우 ν•„μš” μ—†μŒ)
    • ONBOOT : no일 경우 yes둜 λ°”κΎΈκΈ° (λΆ€νŒ…ν•  λ•Œ μžλ™ λ„€νŠΈμ›Œν¬ ν™œμ„±ν™” μ„€μ •ν•˜λŠ” 것)
    • DEVICE : μœ„μ˜ name κ°’ eno1
[root@localhost network-scripts]# cd /etc/sysconfig/network-scripts
[root@localhost network-scripts]# touch ifcfg-eno1
[root@localhost network-scripts]# vi ifcfg-eno1

# λ‚΄μš© 확인
[root@seob network-scripts]# cat ifcfg-eno1 
TYPE=Ethernet
PROXY_METHOD=none
BOOTPROTO=static
IPADDR=192.168.1.111
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
ONBOOT=yes
DEVICE=eno1
NAME=eno1
#USERCTL=no

12-2. Network Server μž¬μ‹œμž‘

  • service network restart, systemctl restart network λͺ…λ Ήμ–΄λ‘œ μž¬μ‹œμž‘
    • CentOS 8 μ΄μƒμ—μ„œλŠ” μ„œλΉ„μŠ€ λͺ…칭이 Network λŒ€μ‹  NetworkManager 둜 변경됨
[root@localhost ~]# service network restart
Redirecting to /bin/systemctl restart network.service
Failed to restart network.service: Unit network.service not found.
  • service NetworkManager restart λͺ…λ Ήμ–΄λ‘œ μž¬μ‹œμž‘
[root@localhost network-scripts]# service NetworkManager restart
Redirecting to /bin/systemctl restart NetworkManager.service

12-3. μž¬μ‹œμž‘ μ „ν›„λ‘œ μƒνƒœ 확인

  • dmesg μ‹œμŠ€ν…œ λΆ€νŒ… 둜그 확인
[root@localhost network-scripts]# dmesg | grep eth
[    1.524205] e1000e 0000:00:1f.6 eth0: (PCI Express:2.5GT/s:Width x1) d8:bb:c1:4d:c4:43
[    1.524207] e1000e 0000:00:1f.6 eth0: Intel(R) PRO/1000 Network Connection
[    1.524356] e1000e 0000:00:1f.6 eth0: MAC: 13, PHY: 12, PBA No: FFFFFF-0FF
[    1.719672] e1000e 0000:00:1f.6 eno1: renamed from eth0
[root@localhost network-scripts]# dmesg | grep eno1
[    1.719672] e1000e 0000:00:1f.6 eno1: renamed from eth0
[   25.238976] e1000e 0000:00:1f.6 eno1: NIC Link is Up 100 Mbps Full Duplex, Flow Control: Rx/Tx
[   25.239153] IPv6: ADDRCONF(NETDEV_CHANGE): eno1: link becomes ready
  • PCI λ“œλΌμ΄λ²„ 확인
[root@localhost network-scripts]# lspci | grep Ethernet
00:1f.6 Ethernet controller: Intel Corporation Ethernet Connection (10) I219-V (rev 11)
  • systemctl status μ„œλΉ„μŠ€
[root@localhost ~]# systemctl status NetworkManager.service
● NetworkManager.service - Network Manager
     Loaded: loaded (/usr/lib/systemd/system/NetworkManager.service; enabled; preset: enabled)
     Active: active (running) since Thu 2024-03-28 10:57:46 KST; 45s ago
       Docs: man:NetworkManager(8)
   Main PID: 118424 (NetworkManager)
      Tasks: 3 (limit: 202236)
     Memory: 5.4M
        CPU: 39ms
     CGroup: /system.slice/NetworkManager.service
             └─118424 /usr/sbin/NetworkManager --no-daemon

Mar 28 10:57:46 localhost.localdomain NetworkManager[118424]: <info>  [1711591066.7788] device (lo): Activation: successful, device activated.
Mar 28 10:57:46 localhost.localdomain NetworkManager[118424]: <info>  [1711591066.7792] policy: set 'eno1' (eno1) as default for IPv4 routing and DNS
Mar 28 10:57:46 localhost.localdomain NetworkManager[118424]: <info>  [1711591066.7804] device (eno1): state change: ip-config -> ip-check (reason 'none', s>
Mar 28 10:57:46 localhost.localdomain NetworkManager[118424]: <info>  [1711591066.7863] device (eno1): state change: ip-check -> secondaries (reason 'none',>
Mar 28 10:57:46 localhost.localdomain NetworkManager[118424]: <info>  [1711591066.7864] device (eno1): state change: secondaries -> activated (reason 'none'>
Mar 28 10:57:46 localhost.localdomain NetworkManager[118424]: <info>  [1711591066.7866] manager: NetworkManager state is now CONNECTED_SITE
Mar 28 10:57:46 localhost.localdomain NetworkManager[118424]: <info>  [1711591066.7869] device (eno1): Activation: successful, device activated.
Mar 28 10:57:46 localhost.localdomain NetworkManager[118424]: <info>  [1711591066.7873] manager: NetworkManager state is now CONNECTED_GLOBAL
Mar 28 10:57:46 localhost.localdomain NetworkManager[118424]: <info>  [1711591066.7874] manager: startup complete
Mar 28 10:57:46 localhost.localdomain NetworkManager[118424]: <info>  [1711591066.7921] policy: set-hostname: set hostname to 'localhost.localdomain' (no ho>
...skipping...
  • IP μ£Όμ†Œ ν™•μΈν•˜κΈ°
[root@localhost network-scripts]# ip addr show eno1
2: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether d8:bb:c1:4d:c4:43 brd ff:ff:ff:ff:ff:ff
    altname enp0s31f6
    inet 192.168.1.999/24 brd 192.168.1.255 scope global noprefixroute eno1
       valid_lft forever preferred_lft forever
    inet6 fe80::dabb:c1ff:fe4d:c443/64 scope link noprefixroute
       valid_lft forever preferred_lft forever
  • μ‚¬μš© κ°€λŠ₯ν•œ λͺ¨λ“  μž₯치의 μƒνƒœ ν‘œμ‹œ : nmcli dev status / μ‚¬μš© κ°€λŠ₯ν•œ λͺ¨λ“  μ—°κ²°μ˜ μƒνƒœλ₯Ό ν‘œμ‹œ : nmcli con show
[root@localhost network-scripts]# nmcli dev status
DEVICE  TYPE      STATE                   CONNECTION
eno1    ethernet  connected               eno1
lo      loopback  connected (externally)  lo
  • λ„€νŠΈμ›Œν¬ 정보 확인 (IP μ£Όμ†Œλ§Œ 보기) : ifconfig eno1 | grep inet

πŸ”Ά 기타 μž‘μ—…

  • λ„€νŠΈμ›Œν¬ μž¬μ‹œμž‘ 후에도 IP μ£Όμ†Œκ°€ λ³€κ²½λ˜μ§€ μ•Šμ•„ μž₯치 λΉ„ν™œμ„±ν™” μ‹œλ„
  • eno1 μž₯치 ν™œμ„±ν™”/λΉ„ν™œμ„±ν™” : ifup eno1, ifdown eno1
[root@localhost network-scripts]# ifdown eno1
bash: ifdown: command not found...
Install package 'NetworkManager-initscripts-updown' to provide command 'ifdown'? [N/y] y

 * Waiting in queue...
 * Loading list of packages....
The following packages have to be installed:
 NetworkManager-initscripts-updown-1:1.47.2-1.el9.noarch        Legacy ifup/ifdown scripts for NetworkManager that replace initscripts (network-scripts)
Proceed with changes? [N/y] y
  • μ„€μΉ˜ν•˜λΌλŠ” 문ꡬ가 λ‚˜μ™€ μ„€μΉ˜ μ§„ν–‰
  • μ•„λž˜μ™€ 같은 였λ₯˜ λ°œμƒ
[root@localhost network-scripts]# ifdown eno1
Error: '/etc/sysconfig/network-scripts/ifcfg-eno1' is not an active connection.
Error: no active connection provided.
Failure to deactivate file "eno1"!

See all profiles with `nmcli connection`.
Reload files from disk with `nmcli connection reload`
Deactivate the desired profile with `nmcli connection down \"$NAME\"`

13. CentOS IP λ³€κ²½

  • eno1.nmconnection 파일 > IP μ£Όμ†Œ λ³€κ²½
[root@localhost system-connections]# cd /etc/NetworkManager/system-connections/
[root@localhost system-connections]# ls
eno1.nmconnection
[root@localhost system-connections]# vi eno1.nmconnection

# λ‚΄μš© μˆ˜μ •
[ipv4]
address1=192.168.1.111/24,192.168.1.1
dns=210.94.0.73;210.220.163.82;
ignore-auto-dns=true
method=manual
  • Network Server μž¬μ‹œμž‘
[root@localhost system-connections]# service NetworkManager restart
Redirecting to /bin/systemctl restart NetworkManager.service
  • IP μ£Όμ†Œ ν™•μΈν•˜κΈ° (inet 192.168.1.111 κ°€ 좔가됨)
[root@localhost network-scripts]# ip addr show eno1
2: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether d8:bb:c1:4d:c4:43 brd ff:ff:ff:ff:ff:ff
    altname enp0s31f6
    inet 192.168.1.999/24 brd 192.168.1.255 scope global noprefixroute eno1
       valid_lft forever preferred_lft forever
    inet 192.168.1.111/24 brd 192.168.1.255 scope global secondary noprefixroute eno1
       valid_lft forever preferred_lft forever
    inet6 fe80::dabb:c1ff:fe4d:c443/64 scope link noprefixroute
       valid_lft forever preferred_lft forever
  • 접속도 잘 λ˜λŠ” κ²ƒμœΌλ‘œ 확인됨

14. 계정 생성

  • projyj μΆ”κ°€λ‘œ 생성
    • adduser : μ‚¬μš©μž ν™ˆ 디렉토리λ₯Ό ν¬ν•¨ν•œ μ‚¬μš©μž κ΄€λ ¨ 섀정을 μžλ™ 생성 / μ‚¬μš©μžκ°€ μ„€μ •ν•œ κΈ°λ³Έ μ‰˜μ„ μ‚¬μš©μžμ˜ μ‰˜λ‘œ μ§€μ •
    • useradd : μ‚¬μš©μž ν™ˆ 디렉토리λ₯Ό ν¬ν•¨ν•œ μ‚¬μš©μž κ΄€λ ¨ 섀정을 μžλ™μƒμ„± ν•˜μ§€ μ•ŠμŒ / ν™ˆ 디렉토리와 νŒ¨μŠ€μ›Œλ“œ κ·Έ 외에도 μ—¬λŸ¬κ°€μ§€ 섀정을 λ”°λ‘œ ν•΄μ€˜μ•Ό 함 / κΈ°λ³Έ μ‰˜μΈ shκ°€ 할당됨
[root@localhost ~]# whoami
root
[root@localhost home]# adduser projyj -p password$$
[root@localhost projyj]# id projyj # 정보 쑰회
uid=1001(projyj) gid=1001(projyj) groups=1001(projyj)
  • νŒ¨μŠ€μ›Œλ“œ λ³€κ²½
[root@localhost home]# passwd projyj
Changing password for user projyj.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.

πŸ”Ά 생성 계정 확인

  • μ„€μ •λœ 계정 ID 확인
[root@localhost home]# grep /bin/bash /etc/passwd | cut -f1 -d:
root
projyj

πŸ”Ά 계정 μ‚­μ œ

  • -r : κ³„μ •μ˜ home directory 등을 ν¬ν•¨ν•œ μ™„μ „ μ‚­μ œ
userdel [user]		// μ‚¬μš©μž κ³„μ •λ§Œ μ‚­μ œ
userdel -r [user]	// home directory 등을 ν¬ν•¨ν•œ μ™„μ „ μ‚­μ œ

14-1. 계정 κΆŒν•œ λΆ€μ—¬

  • visudo λ˜λŠ” vi /etc/sudoers 둜 ν•΄λ‹Ή 파일 확인
    • sudoers μˆ˜μ • μ‹œμ—λŠ” visudo μ‚¬μš©μ„ κΆŒκ³ ν•˜κ³  있음
[root@localhost home]# visudo
visudo: /etc/sudoers.tmp unchanged
[root@localhost home]# vi /etc/sudoers
  • projyj 계정도 root κΆŒν•œ μ£ΌκΈ°
## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
projyj    ALL=(ALL)       ALL

15. Jenkins

  • 5. Podman 에 μ΄μ–΄μ„œ Podman μž‘μ—…
  • Docker Hub 와 Podman 은 잘 ν˜Έν™˜λœλ‹€κ³  함 > Docker Hub 의 Jenkins 이미지λ₯Ό μ‚¬μš©

15-1. Podman μ„€μΉ˜

  • 이미지 λ‹€μš΄λ‘œλ“œ (podman pull)
[root@localhost home]# podman pull jenkins/jenkins:lts
βœ” docker.io/jenkins/jenkins:lts
Trying to pull docker.io/jenkins/jenkins:lts...
Getting image source signatures
Copying blob 8d7cd7345072 done   |
Copying blob 71215d55680c done   |
Copying blob c8dac3aae91a done   |
Copying blob 1830bd5f9b45 done   |
Copying blob 35af8fb55c2f done   |
Copying blob 234e1154c2a1 done   |
Copying blob a89f7edcbd51 done   |
Copying blob 83597e279c9f done   |
Copying blob 6c39e3e60898 done   |
Copying blob 29150353c9ba done   |
Copying blob 33fe415a6139 done   |
Copying blob c5d8e31128fd done   |
Copying config 2371da2306 done   |
Writing manifest to image destination
2371da23064a2c39b40101d0851ef5c51adff752a013949cc129eb616228d5cd
  • 이미지 νƒœκ·Έ μ„€μ • (podman tag)
[root@localhost home]# podman tag jenkins/jenkins:lts projyj/jenkins:2.204.2
[root@localhost home]# podman tag jenkins/jenkins:lts docker.io/projyj/jenkins:2.204.2
[root@localhost home]# podman images
REPOSITORY                 TAG         IMAGE ID      CREATED     SIZE
docker.io/projyj/jenkins    2.204.2     2371da23064a  8 days ago  471 MB
localhost/projyj/jenkins    2.204.2     2371da23064a  8 days ago  471 MB
docker.io/jenkins/jenkins  lts         2371da23064a  8 days ago  471 MB

πŸ”Ά 이미지 확인

  • 이미지 검색 (podman search)
[root@localhost home]# podman search --tls-verify jenkins
NAME                                                                 DESCRIPTION
registry.access.redhat.com/openshift3/jenkins-2-rhel7                This image provides a Jenkins server, primar...
registry.access.redhat.com/openshift3/jenkins-1-rhel7                Jenkins image which can be used to set up a...
############ (μ€‘λž΅) ############
docker.io/rancher/jenkins-jnlp-slave
docker.io/jenkins/core-pr-tester                                     Docker image for testing pull-requests sent...
docker.io/jenkins/jnlp-agent-alpine
docker.io/rancher/jenkins-slave                                      Jenkins Build Slave
docker.io/jenkins/jnlp-agent-coresdk
docker.io/jenkins/evergreen                                          An automatically self-updating Jenkins distr...
  • 이미지 λͺ©λ‘ 좜λ ₯ (podman images)
[root@localhost home]# podman images
REPOSITORY                 TAG         IMAGE ID      CREATED     SIZE
docker.io/jenkins/jenkins  lts         2371da23064a  8 days ago  471 MB
  • 이미지 μ„ΈλΆ€ 정보 확인 (podman inspect)
[root@localhost home]# podman inspect jenkins/jenkins:lts
[
     {
          "Id": "2371da23064a2c39b40101d0851ef5c51adff752a013949cc129eb616228d5cd",
          "Digest": "sha256:1fd79ceb68ce883fb86db70bdbf7f9eaa8b25e580aafe7a240235240396e3916",
          "RepoTags": [
               "docker.io/jenkins/jenkins:lts"
          ],
          "RepoDigests": [
               "docker.io/jenkins/jenkins@sha256:1fd79ceb68ce883fb86db70bdbf7f9eaa8b25e580aafe7a240235240396e3916",
               "docker.io/jenkins/jenkins@sha256:55ca11703b6b90031030be36c9fe9f064b38a4bd2bd253100d0246efd0054a8a"
          ],
          "Parent": "",
          "Comment": "",
          "Created": "2024-03-20T16:37:24.770285139Z",
          "Config": {
               "User": "jenkins",
               "ExposedPorts": {
                    "50000/tcp": {},
                    "8080/tcp": {}
               },
               "Env": [
                    "PATH=/opt/java/openjdk/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
                    "LANG=C.UTF-8",
                    "JENKINS_HOME=/var/jenkins_home",
                    "JENKINS_SLAVE_AGENT_PORT=50000",
                    "REF=/usr/share/jenkins/ref",
                    "JENKINS_VERSION=2.440.2",
                    "JENKINS_UC=https://updates.jenkins.io",
                    "JENKINS_UC_EXPERIMENTAL=https://updates.jenkins.io/experimental",
                    "JENKINS_INCREMENTALS_REPO_MIRROR=https://repo.jenkins-ci.org/incrementals",
                    "COPY_REFERENCE_FILE_LOG=/var/jenkins_home/copy_reference_file.log",
                    "JAVA_HOME=/opt/java/openjdk"
               ],
               "Entrypoint": [
                    "/usr/bin/tini",
                    "--",
                    "/usr/local/bin/jenkins.sh"
               ],
               "Volumes": {
                    "/var/jenkins_home": {}
               },
               "Labels": {
                    "org.opencontainers.image.description": "The Jenkins Continuous Integration and Delivery server",
                    "org.opencontainers.image.licenses": "MIT",
                    "org.opencontainers.image.revision": "8b3d5836ae21390ab374b154b94b7ac33d615243",
                    "org.opencontainers.image.source": "https://github.com/jenkinsci/docker",
                    "org.opencontainers.image.title": "Official Jenkins Docker image",
                    "org.opencontainers.image.url": "https://www.jenkins.io/",
                    "org.opencontainers.image.vendor": "Jenkins project",
                    "org.opencontainers.image.version": "2.440.2"
               }
          },
          "Version": "",
          "Author": "",
          "Architecture": "amd64",
          "Os": "linux",
          "Size": 471191196,
          "VirtualSize": 471191196,
############ (μ€‘λž΅) ############
          "Labels": {
               "org.opencontainers.image.description": "The Jenkins Continuous Integration and Delivery server",
               "org.opencontainers.image.licenses": "MIT",
               "org.opencontainers.image.revision": "8b3d5836ae21390ab374b154b94b7ac33d615243",
               "org.opencontainers.image.source": "https://github.com/jenkinsci/docker",
               "org.opencontainers.image.title": "Official Jenkins Docker image",
               "org.opencontainers.image.url": "https://www.jenkins.io/",
               "org.opencontainers.image.vendor": "Jenkins project",
               "org.opencontainers.image.version": "2.440.2"
          },
          "Annotations": {},
          "ManifestType": "application/vnd.oci.image.manifest.v1+json",
          "User": "jenkins",
          "History": [
############ (μ€‘λž΅) ############
          ],
          "NamesHistory": [
               "docker.io/jenkins/jenkins:lts"
          ]
     }
]

πŸ”Ά 이미지 μ‚­μ œ

  • 이미지 μ‚­μ œ (podman rmi)
$ podman rmi localhost/projyj/jenkins:2.204.2
Untagged: localhost/projyj/jenkins:2.204.2

$ podman rmi docker.io/projyj/jenkins:2.204.2
Untagged: docker.io/projyj/jenkins:2.204.2

15-2. Podman μ»¨ν…Œμ΄λ„ˆ 생성 및 ꡬ동

  • μ»¨ν…Œμ΄λ„ˆ 생성 및 λ°±κ·ΈλΌμš΄λ“œ μ‹€ν–‰ (podman run)
[root@localhost home]# podman run --name jenkins -d -p 8080:8080 -p 50000:50000 jenkins/jenkins:lts
e5c906face7a150af68d9672d019e4ca60775a981f21bb516c5ff34d097652b7
  • μ»¨ν…Œμ΄λ„ˆ λͺ©λ‘ 확인 (podman ps)
    • μ»¨ν…Œμ΄λ„ˆ μ‹€ν–‰ 확인과 μ‚¬μš© κ°€λŠ₯ν•œ λͺ¨λ“  μ»¨ν…Œμ΄λ„ˆ 좜λ ₯
[root@localhost home]# podman ps -a
CONTAINER ID  IMAGE                          COMMAND     CREATED         STATUS         PORTS                                             NAMES
d7020c058f90  docker.io/jenkins/jenkins:lts              42 seconds ago  Up 42 seconds  0.0.0.0:8080->8080/tcp, 0.0.0.0:50000->50000/tcp  jenkins
  • μ»¨ν…Œμ΄λ„ˆ ꡬ동 확인 (podman logs)
[root@localhost home]# podman logs -f jenkins
Running from: /usr/share/jenkins/jenkins.war
webroot: /var/jenkins_home/war
2024-03-29 00:34:08.819+0000 [id=1]     INFO    winstone.Logger#logInternal: Beginning extraction from war file
2024-03-29 00:34:09.458+0000 [id=1]     WARNING o.e.j.s.handler.ContextHandler#setContextPath: Empty contextPath
2024-03-29 00:34:09.494+0000 [id=1]     INFO    org.eclipse.jetty.server.Server#doStart: jetty-10.0.20; built: 2024-01-29T20:46:45.278Z; git: 3a745c71c23682146f262b99f4ddc4c1bc41630c; jvm 17.0.10+7
2024-03-29 00:34:09.640+0000 [id=1]     INFO    o.e.j.w.StandardDescriptorProcessor#visitServlet: NO JSP Support for /, did not find org.eclipse.jetty.jsp.JettyJspServlet
2024-03-29 00:34:09.670+0000 [id=1]     INFO    o.e.j.s.s.DefaultSessionIdManager#doStart: Session workerName=node0
2024-03-29 00:34:09.940+0000 [id=1]     INFO    hudson.WebAppMain#contextInitialized: Jenkins home directory: /var/jenkins_home found at: EnvVars.masterEnvVars.get("JENKINS_HOME")
2024-03-29 00:34:10.007+0000 [id=1]     INFO    o.e.j.s.handler.ContextHandler#doStart: Started w.@332820f4{Jenkins v2.440.2,/,file:///var/jenkins_home/war/,AVAILABLE}{/var/jenkins_home/war}
2024-03-29 00:34:10.014+0000 [id=1]     INFO    o.e.j.server.AbstractConnector#doStart: Started ServerConnector@68fa0ba8{HTTP/1.1, (http/1.1)}{0.0.0.0:8080}
2024-03-29 00:34:10.019+0000 [id=1]     INFO    org.eclipse.jetty.server.Server#doStart: Started Server@2a7686a7{STARTING}[10.0.20,sto=0] @1502ms
2024-03-29 00:34:10.020+0000 [id=27]    INFO    winstone.Logger#logInternal: Winstone Servlet Engine running: controlPort=disabled
2024-03-29 00:34:10.150+0000 [id=35]    INFO    jenkins.InitReactorRunner$1#onAttained: Started initialization
2024-03-29 00:34:10.162+0000 [id=56]    INFO    jenkins.InitReactorRunner$1#onAttained: Listed all plugins
2024-03-29 00:34:10.642+0000 [id=56]    INFO    jenkins.InitReactorRunner$1#onAttained: Prepared all plugins
2024-03-29 00:34:10.645+0000 [id=56]    INFO    jenkins.InitReactorRunner$1#onAttained: Started all plugins
2024-03-29 00:34:10.649+0000 [id=52]    INFO    jenkins.InitReactorRunner$1#onAttained: Augmented all extensions
2024-03-29 00:34:10.758+0000 [id=41]    INFO    jenkins.InitReactorRunner$1#onAttained: System config loaded
2024-03-29 00:34:10.758+0000 [id=40]    INFO    jenkins.InitReactorRunner$1#onAttained: System config adapted
2024-03-29 00:34:10.758+0000 [id=51]    INFO    jenkins.InitReactorRunner$1#onAttained: Loaded all jobs
2024-03-29 00:34:10.759+0000 [id=51]    INFO    jenkins.InitReactorRunner$1#onAttained: Configuration for all jobs updated
2024-03-29 00:34:10.769+0000 [id=69]    INFO    hudson.util.Retrier#start: Attempt #1 to do the action check updates server
2024-03-29 00:34:11.025+0000 [id=48]    INFO    jenkins.install.SetupWizard#init:

*************************************************************
*************************************************************
*************************************************************

Jenkins initial setup is required. An admin user has been created and a password generated.
Please use the following password to proceed to installation:

070b01f500e94ca1b1a3c3fa01b0c911

This may also be found at: /var/jenkins_home/secrets/initialAdminPassword

*************************************************************
*************************************************************
*************************************************************

2024-03-29 00:34:25.553+0000 [id=55]    INFO    jenkins.InitReactorRunner$1#onAttained: Completed initialization
2024-03-29 00:34:25.564+0000 [id=26]    INFO    hudson.lifecycle.Lifecycle#onReady: Jenkins is fully up and running
2024-03-29 00:34:26.480+0000 [id=69]    INFO    h.m.DownloadService$Downloadable#load: Obtained the updated data file for hudson.tasks.Maven.MavenInstaller
2024-03-29 00:34:26.481+0000 [id=69]    INFO    hudson.util.Retrier#start: Performed the action check updates server successfully at the attempt #1

πŸ”Ά Podman μ»¨ν…Œμ΄λ„ˆ ꡬ동/쀑지/μž¬μ‹œμž‘

  • μ»¨ν…Œμ΄λ„ˆ ꡬ동 (podman start) / 쀑지 (podman stop) / μž¬μ‹œμž‘ (podman restart)
# μ»¨ν…Œμ΄λ„ˆ 쀑지 (podman stop)
[root@localhost home]# podman stop jenkins
jenkins
[root@localhost home]# podman ps -a
CONTAINER ID  IMAGE                          COMMAND     CREATED        STATUS                       PORTS                                             NAMES
d7020c058f90  docker.io/jenkins/jenkins:lts              7 minutes ago  Exited (143) 16 seconds ago  0.0.0.0:8080->8080/tcp, 0.0.0.0:50000->50000/tcp  jenkins

# μ»¨ν…Œμ΄λ„ˆ ꡬ동 (podman start)
[root@localhost home]# podman start jenkins
jenkins
[root@localhost home]# podman ps -a
CONTAINER ID  IMAGE                          COMMAND     CREATED        STATUS         PORTS                                             NAMES
d7020c058f90  docker.io/jenkins/jenkins:lts              8 minutes ago  Up 11 seconds  0.0.0.0:8080->8080/tcp, 0.0.0.0:50000->50000/tcp  jenkins

# μ»¨ν…Œμ΄λ„ˆ μž¬μ‹œμž‘ (podman restart)
[root@localhost home]# podman restart jenkins
jenkins
[root@localhost home]# podman ps -a
CONTAINER ID  IMAGE                          COMMAND     CREATED        STATUS       PORTS                                             NAMES
d7020c058f90  docker.io/jenkins/jenkins:lts              8 minutes ago  Up 1 second  0.0.0.0:8080->8080/tcp, 0.0.0.0:50000->50000/tcp  jenkins
  • μ»¨ν…Œμ΄λ„ˆ μ‚­μ œ (podman rm)
[root@localhost home]# podman rm jenkins

πŸ”Ά Podman μ»¨ν…Œμ΄λ„ˆ μ‚¬μš©λ²•

  • μ»¨ν…Œμ΄λ„ˆμ˜ ν”„λ‘œμ„ΈμŠ€ μ‹€ν–‰ 및 접속 (podman exec)
[root@localhost home]# podman exec -it jenkins /bin/bash
jenkins@d7020c058f90:/$ whoami
jenkins
jenkins@d7020c058f90:/$ cd /var/jenkins_home/secrets
jenkins@d7020c058f90:~/secrets$ cat initialAdminPassword
070b01f500e94ca1b1a3c3fa01b0c911
  • μ»¨ν…Œμ΄λ„ˆμ˜ ν”„λ‘œμ„ΈμŠ€ 확인 (podman top)
[root@localhost home]# podman top jenkins
USER        PID         PPID        %CPU        ELAPSED          TTY         TIME        COMMAND
jenkins     1           0           0.000       4m19.290914938s  ?           0s          /usr/bin/tini -- /usr/local/bin/jenkins.sh
jenkins     2           1           8.485       4m19.29096756s   ?           22s         java -Duser.home=/var/jenkins_home -Djenkins.model.Jenkins.slaveAgentPort=50000 -Dhudson.lifecycle=hudson.lifecycle.ExitLifecycle -jar /usr/share/jenkins/jenkins.war
  • μ»¨ν…Œμ΄λ„ˆμ˜ 포트 μƒνƒœ 확인 (podman port)
[root@localhost home]# podman port jenkins
8080/tcp -> 0.0.0.0:8080
50000/tcp -> 0.0.0.0:50000

15-4. Jenkins 접속

  • μ°Έκ³  : Jenkins μ„€μΉ˜ κ°€μ΄λ“œ
  • 15-2. Podman μ»¨ν…Œμ΄λ„ˆ 생성 및 ꡬ동 μ—μ„œ ν™•μΈλœ λΉ„λ°€λ²ˆν˜Έ 볡사 : 070b01f500e94ca1b1a3c3fa01b0c911
  • http://192.168.1.111:8080 둜 μ ‘μ†ν•˜μ—¬ κ΅¬λ™λœ 것 확인
  • λΉ„λ°€λ²ˆν˜Έ μž…λ ₯ > Continue
  • Customize Jenkins > Install suggested plugins
  • Create First Admin User > 계정 정보 μž…λ ₯
    • 계정λͺ… : projyj
    • μ•”ν˜Έ : password$$
    • 이름 : projyj
    • 이메일 μ£Όμ†Œ : [email protected]
  • Jenkins URL : Jenkins Web UI에 μ ‘κ·Όν•˜κΈ° μœ„ν•œ Jenkins URL μ„€μ • (기본으둜 μœ μ§€ν•¨)
  • Jenkins is ready! > Start using Jenkins

16. Jenkins 에 Github 연동

16-1. Github Token λ°œκΈ‰

  • Github > Settings(https://github.com/settings/profile) > Developer Settings > Personal access tokens > Tokens (classic)
  • Generate new token (classic) 클릭
    • Note : CentOS 9 ProjYj
    • Expiration : No expiration (The token will never expire!)
    • Select scopes : repo, admin:org, admin:repo_hook 선택
  • Generate token : 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 (λ°œκΈ‰ 받은 token 은 λ‹€μ‹œ λ³Ό 수 μ—†μœΌλ―€λ‘œ λ”°λ‘œ μ €μž₯)

16-2. Jenkins Credentials 생성

  • Dashboard > Jenkins 관리 > Credentials
  • Stores scoped to Jenkins > System 의 Domains (global) 선택
  • Add Credentials
    • Kind : Username with password
    • Scope : Global (Jenkins, nodes, items, all child items, etc)
    • Username : projyj (GitHub 아이디)
    • Treat username as secret 체크 ν•΄μ œ
    • Password : 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 (μœ„μ—μ„œ λ°œκΈ‰ 받은 GitHub token)
    • ID : github_token (Credentials 이름)
    • Description : github_token (Optional)

16-3. Jenkinsfile μž‘μ„±

  • λΉŒλ“œν•  GitHub Repository 경둜 μ•ˆμ— Jenkinsfile 이 μ‘΄μž¬ν•΄μ•Ό 함
  • 2024.04.12 > Pipeline 으둜 ꡬ성할 λ•Œλ§Œ ν•„μš”
pipeline {
    agent any
    
    stages {
        
        stage('github-clone') {
            steps {
                git branch: 'ProjYj2024main', credentialsId: 'github_token', url: 'https://github.com/projyj/ProjYj2024.git'
            }
        }
        
   		// stage...
   	}
}

16-4. Jenkins Freestyle project μ„€μ •

  • Dashboard > μƒˆλ‘œμš΄ Item > Freestyle project 선택
  • item name : ProjYj2024
  • 2024.04.12 > Pipeline 으둜 κ΅¬μ„±ν–ˆμ—ˆμœΌλ‚˜, λΉŒλ“œ ν›„ 쑰치 μ‚¬μš©μ„ μœ„ν•΄ Freestyle project 둜 λ³€κ²½ν•˜μ˜€μŒ (각 νƒ€μž…λ³„ Configure λŠ” ν•˜λ‹¨ μ°Έκ³ )
  • μžλ™ μ‹€ν–‰ λ“± λΉŒλ“œ ν›„ μž‘μ—…μ€ 21. Jenkins λΉŒλ“œ 및 μ‹€ν–‰ μ—μ„œ μ΄μ–΄μ„œ 확인

πŸ”Ά Freestyle project Configure

  • μ°Έκ³  : Jenkins μƒˆλ‘œμš΄ Item 생성 및 μ„€μ • / Jenkins와 github μ—°λ™ν•˜κΈ°
  • General > GitHub project 선택
    • Project url : https://github.com/projyj/ (GitHub Repository 경둜)
  • μ†ŒμŠ€ μ½”λ“œ 관리 > Git
    • Repository URL : https://github.com/projyj/ProjYj2024.git (GitHub Repository 경둜.git)
    • Credentials : (μœ„μ—μ„œ μƒμ„±ν•œ Credentials)
    • Branch Specifier : */ProjYj2024main (trigger Branch)
  • λΉŒλ“œ 유발(Build Triggers) > GitHub hook trigger for GITScm polling 선택
    • push에 μ˜ν•œ hook μ΄λ²€νŠΈκ°€ λ°œμƒν•  경우 μ €μž₯μ†Œλ₯Ό pollingν•΄μ„œ μ  ν‚¨μŠ€μ˜ μžλ™ λΉŒλ“œλ₯Ό 유발
    • GitHub 의 hook trigger λ₯Ό λ°›μœΌλ©΄ λΉŒλ“œ ν•˜κ² λ‹€λŠ” 의미
  • λΉŒλ“œ ν™˜κ²½ > Provide Node & npm bin/ folder to PATH 선택
    • NodeJS Installation : NodeJS 20.9.0
    • npmrc file : - use system default -
    • Cache location : Default (~/.npm or %APP_DATA%\npm-cache)
  • μ €μž₯

πŸ”Ά Pipeline Configure

  • General > GitHub project 선택
    • Project url : https://github.com/projyj/ (GitHub Repository 경둜)
  • Build Triggers > GitHub hook trigger for GITScm polling 선택
  • Pipeline > Definition > Pipeline script from SCM 선택
    • SCM : Git 선택
    • Repository URL : https://github.com/projyj/ProjYj2024.git (GitHub Repository 경둜.git)
    • Credentials : (μœ„μ—μ„œ μƒμ„±ν•œ Credentials)
    • Branch Specifier : ProjYj2024main (trigger Branch)
    • Script Path : Jenkinsfile (루트 ν”„λ‘œμ νŠΈμ—μ„œ Jenkinsfile의 경둜 - κΈ°λ³Έκ°’ μœ μ§€)
  • μ €μž₯

16-5. GitHub Repository Webhooks μ„€μ •

  • GitHub Repository 의 Settings > Webhooks > Add webhook
    • Payload URL : http://192.168.1.111:8080/github-webhook/ (http://Jenkinsμ£Όμ†Œ/github-webhook/)
    • Content type : application/json
    • Let me select individual events 선택 > Pull requests, Pushes 선택
    • Active 체크 μœ μ§€
  • Add webhook

πŸ”Ά μ§€κΈˆ λΉŒλ“œ

  • μ§€κΈˆ λΉŒλ“œ > μ•„λž˜μ™€ 같이 workspace κ°€ 생김
[root@localhost workspace]# pwd
/var/lib/containers/storage/volumes/4e56f41adaca53fa1652bb2d5e0aaa4f80905a278588c911343a283eb21be2fb/_data/workspace
[root@localhost workspace]# ls
ProjYj2024  ProjYj2024@tmp
  • μ»¨ν…Œμ΄λ„ˆμ˜ ν”„λ‘œμ„ΈμŠ€ μ‹€ν–‰ 및 접속 (podman exec)
[root@localhost home]# podman exec -it jenkins /bin/bash
jenkins@d7020c058f90:~/workspace$ cd /var/jenkins_home/workspace
jenkins@d7020c058f90:~/workspace$ ls
ProjYj2024  ProjYj2024@tmp

πŸ”Ά Jenkins λ₯Ό μœ„ν•œ κΆŒν•œ λΆ€μ—¬

  • Jenkins λΉŒλ“œ μ‹œ Permission denied λ°©μ§€
[root@localhost storage]# pwd
/var/lib/containers/storage
[root@localhost storage]# chmod 755 volumes/
[root@localhost storage]# ls -al
total 144
drwxr-xr-x   3 root root     78 Mar 29 14:31 volumes

[root@localhost volumes]# pwd
/var/lib/containers/storage/volumes
[root@localhost volumes]# chmod 755 4e56f41adaca53fa1652bb2d5e0aaa4f80905a278588c911343a283eb21be2fb

[root@localhost _data]# pwd
/var/lib/containers/storage/volumes/4e56f41adaca53fa1652bb2d5e0aaa4f80905a278588c911343a283eb21be2fb/_data
[root@localhost _data]# chmod 777 logs/* #파일 생성 κΆŒν•œ
[root@localhost _data]# chmod 777 logs

16-6. Plugin μ„€μΉ˜ - Post build task

16-7. Plugin μ„€μΉ˜ - NodeJS

  • Jenkins λΉŒλ“œ μ‹œ npm not found error λ°©μ§€
  • Jenkins > Dashboard > Jenkins 관리 > Plugins > Available plugins
  • NodeJS μ„ νƒν•˜μ—¬ μ„€μΉ˜
  • Dashboard > Jenkins 관리 > Tools > NodeJS installations > Add NodeJS 클릭
    • Name : NodeJS 20.9.0
    • Version : NodeJS 20.9.0 (node -version 일치)

17. Node.js, NPM

  • μ°Έκ³  : How to Install Node.js on CentOS Stream 9
  • ProjYj2024 ν”„λ‘œμ νŠΈ 싀행을 μœ„ν•œ 단계
  • Before installing Node.js, it’s essential to ensure your system is up to date
[root@localhost ~]# dnf update -y
Last metadata expiration check: 0:18:29 ago on Fri 29 Mar 2024 02:00:07 PM KST.
Dependencies resolved.
=========================================================================================================================================================================
 Package                                                    Architecture               Version                               Repository                             Size
=========================================================================================================================================================================
Installing:
 kernel                                                     x86_64                     5.14.0-432.el9                        baseos                                 66 k
Upgrading:
 bpftool                                                    x86_64                     7.3.0-432.el9                         baseos                                842 k
############ (μ€‘λž΅) ############

Transaction Summary
=========================================================================================================================================================================
Install    5 Packages
Upgrade  142 Packages

Total download size: 227 M
Downloading Packages:
(1/147): kernel-5.14.0-432.el9.x86_64.rpm                                                                                                345 kB/s |  66 kB     00:00
(2/147): kernel-core-5.14.0-432.el9.x86_64.rpm                                                                                           2.2 MB/s |  15 MB     00:06
############ (μ€‘λž΅) ############

17-1. Node.js

  • Node.js list
[root@localhost ~]# dnf module list nodejs
Last metadata expiration check: 0:24:35 ago on Fri 29 Mar 2024 02:00:07 PM KST.
CentOS Stream 9 - AppStream
Name                            Stream                          Profiles                                                       Summary
nodejs                          18                              common [d], development, minimal, s2i                          Javascript runtime
nodejs                          20                              common [d], development, minimal, s2i                          Javascript runtime

Hint: [d]efault, [e]nabled, [x]d
  • Install Node.js 20
[root@localhost ~]# dnf module install nodejs:20 -y
Last metadata expiration check: 0:25:33 ago on Fri 29 Mar 2024 02:00:07 PM KST.
Dependencies resolved.
=========================================================================================================================================================================
 Package                               Architecture                Version                                                          Repository                      Size
=========================================================================================================================================================================
Installing group/module packages:
 nodejs                                x86_64                      1:20.9.0-1.module_el9+743+ad38546c                               appstream                       14 M
 npm                                   x86_64                      1:10.1.0-1.20.9.0.1.module_el9+743+ad38546c                      appstream                      2.6 M
Installing weak dependencies:
 nodejs-docs                           noarch                      1:20.9.0-1.module_el9+743+ad38546c                               appstream                      8.1 M
 nodejs-full-i18n                      x86_64                      1:20.9.0-1.module_el9+743+ad38546c                               appstream                      8.5 M
Installing module profiles:
 nodejs/common
Enabling module streams:
 nodejs                                                            20

Transaction Summary
=========================================================================================================================================================================
Install  4 Packages

Total download size: 33 M
Installed size: 175 M
Downloading Packages:
(1/4): nodejs-docs-20.9.0-1.module_el9+743+ad38546c.noarch.rpm                                                                           2.4 MB/s | 8.1 MB     00:03
(2/4): npm-10.1.0-1.20.9.0.1.module_el9+743+ad38546c.x86_64.rpm                                                                          1.0 MB/s | 2.6 MB     00:02
(3/4): nodejs-full-i18n-20.9.0-1.module_el9+743+ad38546c.x86_64.rpm                                                                      1.3 MB/s | 8.5 MB     00:06
(4/4): nodejs-20.9.0-1.module_el9+743+ad38546c.x86_64.rpm                                                                                1.3 MB/s |  14 MB     00:10
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Total                                                                                                                                    2.8 MB/s |  33 MB     00:11
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                                                                                                                 1/1
  Installing       : nodejs-docs-1:20.9.0-1.module_el9+743+ad38546c.noarch                                                                                           1/4
############ (μ€‘λž΅) ############

Installed:
  nodejs-1:20.9.0-1.module_el9+743+ad38546c.x86_64                                      nodejs-docs-1:20.9.0-1.module_el9+743+ad38546c.noarch
  nodejs-full-i18n-1:20.9.0-1.module_el9+743+ad38546c.x86_64                            npm-1:10.1.0-1.20.9.0.1.module_el9+743+ad38546c.x86_64

Complete!

17-2. NPM

  • NPM list
[root@localhost ~]# dnf list npm
Last metadata expiration check: 0:27:47 ago on Fri 29 Mar 2024 02:00:07 PM KST.
Installed Packages
npm.x86_64                                1:10.1.0-1.20.9.0.1.module_el9+743+ad38546c                             @appstream
  • Install NPM (Node Package Manager)
[root@localhost ~]# dnf install npm -y
Last metadata expiration check: 0:29:43 ago on Fri 29 Mar 2024 02:00:07 PM KST.
Package npm-1:10.1.0-1.20.9.0.1.module_el9+743+ad38546c.x86_64 is already installed.
Dependencies resolved.
Nothing to do.
Complete!

πŸ”Ά Node.js, NPM 버전 확인

  • 개인 둜컬 PC 버전은 각각 v20.10.0 / 10.2.3
[root@localhost ~]# node --version
v20.9.0
[root@localhost ~]# npm --version
10.1.0

17-3. npm run dev

  • npm run dev
[root@localhost ProjYj2024]# npm run dev

> [email protected] dev
> quasar dev

sh: line 1: quasar: command not found
  • ProjYj2024main Branch μ—λŠ” .quasar, node_modules 폴더가 μ—†μŒ (gitignore μΊμ‹œ μ‚­μ œ 처리 git rm -r --cached μ§„ν–‰ν–ˆκΈ° λ•Œλ¬Έ)
    • FileZilla > /var/lib/containers/storage/volumes/4e56f41adaca53fa1652bb2d5e0aaa4f80905a278588c911343a283eb21be2fb/_data/workspace > μˆ˜λ™μœΌλ‘œ 볡사 λΆ™μ—¬λ„£κΈ°
[root@localhost .bin]# npm run dev

> [email protected] dev
> quasar dev

sh: line 1: /var/lib/containers/storage/volumes/4e56f41adaca53fa1652bb2d5e0aaa4f80905a278588c911343a283eb21be2fb/_data/workspace/ProjYj2024/ProjYj2024/node_modules/.bin/quasar: Permission denied
  • κΆŒν•œ λΆ€μ—¬
[root@localhost .bin]# pwd
/var/lib/containers/storage/volumes/4e56f41adaca53fa1652bb2d5e0aaa4f80905a278588c911343a283eb21be2fb/_data/workspace/ProjYj2024/ProjYj2024/node_modules/.bin

[root@localhost .bin]# chmod 755 *

πŸ”Ά 9000 Port μƒμ‹œ ν—ˆμš©

  • 방화벽에 9000 Portλ₯Ό μƒμ‹œ ν—ˆμš©μœΌλ‘œ 등둝 및 μž¬μ‹€ν–‰
[root@localhost ~]# firewall-cmd --permanent --zone=public --add-port=9000/tcp
success
[root@localhost ~]# firewall-cmd --reload
success
[root@localhost ~]# firewall-cmd --list-port
3306/tcp 3389/tcp 8070/tcp 8888/tcp 9000/tcp

18. projyjengine

  • /projyjengine κ²½λ‘œμ— logs, projyj, blib 디렉토리 생성
[root@localhost projyjengine]# pwd
/projyjengine
[root@localhost projyjengine]# mkdir logs
[root@localhost projyjengine]# mkdir projyj
[root@localhost projyjengine]# mkdir blib
[root@localhost projyjengine]# ls
blib  projyj  logs

18-1. FTP 파일 μ—…λ‘œλ“œ

  • FileZilla > C:\home\projyj\projyjengine\blib 의 폴더 및 νŒŒμΌμ„ /projyjengine/blib κ²½λ‘œμ— μ—…λ‘œλ“œ
    • λ‹€μš΄λ‘œλ“œ 경둜 : C:\Users\PROJYJ\PROJYJ_YJ\2. ProjYj\1. μ„€μΉ˜\μ„œλ²„ν™˜κ²½ ꡬ좕

19. ProjYjSvr 배포

  • Eclipse > ProjYjSvr μ†ŒμŠ€ Export > WAR file > κΈ°λ³Έ μ„€μ •μœΌλ‘œ 'Finish'
  • FileZilla > μƒμ„±λœ ProjYjSvr.war νŒŒμΌμ„ /tomcat/apache-tomcat-8.0.36/webapps κ²½λ‘œμ— 이동
[root@localhost webapps]# cd /tomcat/apache-tomcat-8.0.36/webapps
[root@localhost webapps]# ls
docs  examples  ProjYjSvr.war  host-manager  manager  ROOT

19-1. globals.properties

  • WAR 파일 생성 전에 globals.properties νŒŒμΌμ—μ„œ DB μ—°κ²° 정보 μˆ˜μ • ν•„μš”
# \uc6b4\uc601\uc11c\ubc84 \ud0c0\uc785(WINDOWS, UNIX)
Globals.OsType=UNIX

# G4C \uc5f0\uacb0\uc6a9 IP (localhost)
Globals.LocalIp=192.168.1.111

# DB\uc11c\ubc84 \ud0c0\uc785(mysql,oracle,altibase,tibero) - datasource \ubc0f sqlMap \ud30c\uc77c \uc9c0\uc815\uc5d0 \uc0ac\uc6a9\ub428
Globals.DbType=mysql
Globals.DbServer=192.168.1.111
Globals.DbName=projyj
Globals.UserName=projyj
Globals.Password=password\$\$

#Globals.DbType = mysql
#Globals.UserName=root
#Globals.Password=

#oracle
#Globals.DriverClassName=oracle.jdbc.driver.OracleDriver
#Globals.Url=jdbc:oracle:thin:@192.168.1.104:1521:ORCL

# mysql
Globals.DriverClassName=net.sf.log4jdbc.DriverSpy
Globals.Url=jdbc:mysql://192.168.1.111:3306/projyj
  • WAR 파일 ν’€λ¦° ν›„μ˜ 경둜 : /tomcat/apache-tomcat-8.0.36/webapps/ProjYjSvr/WEB-INF/classes/egovframework/egovProps

πŸ”Ά Could not open JDBC Connection

  • globals.properties > νŠΉμˆ˜λ¬ΈμžλŠ” μ—­μŠ¬λž˜μ‰¬(\) 뢙일 것 : Globals.Password=password\$\$
    • μ—­μŠ¬λž˜μ‰¬ 뢙이지 μ•ŠμœΌλ©΄ μ•„λž˜μ™€ 같은 였λ₯˜κ°€ λ°œμƒλ¨
  • μ—λŸ¬ νŒμ—… 문ꡬ가 loadError : xhr=[object Object], st=parseerror, err=SyntaxError: Unexpected token '<'," 이고,
  • ProjYjServer.log 둜그 λ©”μ‹œμ§€κ°€ μ•„λž˜μ™€ κ°™μŒ
2024-04-01 15:45:34,148 ERROR [egovframework.projsvr.service.impl.OptionServiceImpl] Could not open JDBC Connection for transaction; nested exception is org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Access denied for user 'projyj'@'192.168.1.999' (using password: YES))
org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Access denied for user 'projyj'@'192.168.1.999' (using password: YES))
        at org.apache.commons.dbcp.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:1549) ~[commons-dbcp-1.4.jar:1.4]
(...μ€‘λž΅)
Caused by: java.sql.SQLException: Access denied for user 'projyj'@'192.168.1.999' (using password: YES)

19-2. MySQL DB 데이터 μ„ΈνŒ…

  • bmig_option_tbl ν…Œμ΄λΈ”μ˜ κ°’ 일뢀 λ³€κ²½
    • WasURL : http://192.168.1.111:8070/ProjYjSvr/projsvr
    • JVM : /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.362.b09-4.el9.x86_64/jre/bin/java
    • JarHome : /projyjengine

19-3. Tomcat μž¬μ‹€ν–‰

  • ./startup.sh μ‹€ν–‰ν•˜μ—¬ WAR 파일이 ν’€λ¦° 것 확인
[root@localhost bin]# ./startup.sh
Using CATALINA_BASE:   /tomcat/apache-tomcat-8.0.36
Using CATALINA_HOME:   /tomcat/apache-tomcat-8.0.36
Using CATALINA_TMPDIR: /tomcat/apache-tomcat-8.0.36/temp
Using JRE_HOME:        /usr
Using CLASSPATH:       /tomcat/apache-tomcat-8.0.36/bin/bootstrap.jar:/tomcat/apache-tomcat-8.0.36/bin/tomcat-juli.jar
Tomcat started.
[root@localhost bin]# cd ../webapps/
[root@localhost webapps]# ls
docs  examples  ProjYjSvr  ProjYjSvr.war  host-manager  manager  ROOT
  • 둜그인 ν…ŒμŠ€νŠΈκΉŒμ§€ μ™„λ£Œλ˜λ©΄ OK (ID : admin / PW : admin)

πŸ”Ά 둜그 μ‘°νšŒν•˜κΈ°

  • log4j2.xml > <RollingFile name="rollingFile" fileName="/home/projyj/tomcat/projyjlog/ProjYjServer.log" 경둜 확인
[root@localhost projyjlog]# cd /home/projyj/tomcat/projyjlog
[root@localhost projyjlog]# tail -f ProjYjServer.log

πŸ”Ά Alias 영ꡬ 등둝

  • .bash_aliases 파일 μƒμ„±ν•˜μ—¬ alias 등둝
[root@localhost ~]# ls -al | grep bashrc
-rw-r--r--.  1 root root   429 Aug 10  2021 .bashrc
[root@localhost ~]# vi .bash_aliases

alias zlog='tail -f /home/projyj/tomcat/projyjlog/ProjYjServer.log'
alias ztc='cd /tomcat/apache-tomcat-8.0.36/bin/'
alias zstart='/tomcat/apache-tomcat-8.0.36/bin/startup.sh'
alias zshut='/tomcat/apache-tomcat-8.0.36/bin/shutdown.sh'
  • source .bash_aliases λͺ…λ Ήμ–΄λ₯Ό μ‹€ν–‰ν•΄μ•Ό μ‚¬μš© κ°€λŠ₯

19-4. λˆ„λ½ 파일 μΆ”κ°€

  • Monitoring* 파일이 λˆ„λ½λ˜μ–΄ 각 κ²½λ‘œμ— 좔가함
    • .class λ‹€μš΄λ‘œλ“œ 경둜 : C:\Users\PROJYJ\PROJYJ_YJ\2. ProjYj\1. μ„€μΉ˜\μ„œλ²„ν™˜κ²½ ꡬ좕\λˆ„λ½ 파일
  • ProjYjSvr ν”„λ‘œμ νŠΈ μžμ²΄μ— μΆ”κ°€ν•˜μ—¬ WAR 파일 Export ν•˜λŠ” κ²ƒμœΌλ‘œ λ³€κ²½ (24.04.03)
    • .java λ‹€μš΄λ‘œλ“œ 경둜 : C:\Users\PROJYJ\PROJYJ_YJ\2. ProjYj\1. μ„€μΉ˜\ProjYjWAS λˆ„λ½νŒŒμΌ
    • .war 파일 경둜 : C:\Users\PROJYJ\PROJYJ_YJ\2. ProjYj\1. μ„€μΉ˜\μ„œλ²„ν™˜κ²½ ꡬ좕
[root@localhost projsvr]# pwd # MonitoringController / MonitoringService / MonitoringServiceImpl / MonitoringDAO
/tomcat/apache-tomcat-8.0.36/webapps/ProjYjSvr/WEB-INF/classes/egovframework/projsvr
[root@localhost projsvr]# pwd # Monitoring_SQL_Mysql
/tomcat/apache-tomcat-8.0.36/webapps/ProjYjSvr/WEB-INF/classes/egovframework/sqlmap/projsvr

[root@localhost egovframework]# find | grep Monitoring
./projsvr/controller/MonitoringController.class
./projsvr/dao/MonitoringDAO.class
./projsvr/service/impl/MonitoringServiceImpl.class
./projsvr/service/MonitoringService.class
./sqlmap/projsvr/Monitoring_SQL_Mysql.xml

20. npm run dev

  • ProjYj2024 ν”„λ‘œμ νŠΈ μ‹€ν–‰
  • 17-3-npm-run-dev 의 절차 μˆ˜ν–‰ ν›„ λ‹€μ‹œ npm run dev
[root@localhost ProjYj2024]# npm run dev

> [email protected] dev
> quasar dev


 .d88888b.
d88P" "Y88b
888     888
888     888 888  888  8888b.  .d8888b   8888b.  888d888
888     888 888  888     "88b 88K          "88b 888P"
888 Y8b 888 888  888 .d888888 "Y8888b. .d888888 888
Y88b.Y8b88P Y88b 888 888  888      X88 888  888 888
 "Y888888"   "Y88888 "Y888888  88888P' "Y888888 888
       Y8b


 Β» Reported at............ 3/29/2024 3:28:11 PM
 Β» App dir................ /var/lib/containers/storage/volumes/4e56f41adaca53fa1652bb2d5e0aaa4f80905a278588c911343a283eb21be2fb/_data/workspace/ProjYj2024/ProjYj2024
 Β» App URL................ http://localhost:9000/
                           http://192.168.1.999:9000/
                           http://192.168.1.111:9000/
                           http://10.88.0.1:9000/
 Β» Dev mode............... spa
 Β» Pkg quasar............. v2.14.1
 Β» Pkg @quasar/app-vite... v1.7.0
 Β» Browser target......... es2019|edge88|firefox78|chrome87|safari13.1

 App β€’ Opening default browser at http://localhost:9000/


You installed esbuild on another platform than the one you're currently using.
This won't work because esbuild is written with native code and needs to
install a platform-specific binary executable.

Specifically the "esbuild-windows-64" package is present but this platform
needs the "esbuild-linux-64" package instead. People often get into this
situation by installing esbuild on Windows or macOS and copying "node_modules"
into a Docker image that runs Linux, or by copying "node_modules" between
Windows and WSL environments.

If you are installing with npm, you can try not copying the "node_modules"
directory when you copy the files over, and running "npm ci" or "npm install"
on the destination platform after the copy. Or you could consider using yarn
instead which has built-in support for installing a package on multiple
platforms simultaneously.

If you are installing with yarn, you can try listing both this platform and the
other platform in your ".yarnrc.yml" file using the "supportedArchitectures"
feature: https://yarnpkg.com/configuration/yarnrc/#supportedArchitectures
Keep in mind that this means multiple copies of esbuild will be present.

Another alternative is to use the "esbuild-wasm" package instead, which works
the same way on all platforms. But it comes with a heavy performance cost and
can sometimes be 10x slower than the "esbuild" package, so you may also not
want to do that.

 App β€’ ⚠️  Failed to open default browser

πŸ”Ά 2024.03.29 ν˜„μž¬ 상황

  • http://192.168.1.111:9000/ 접속 μ‹œ 연결은 λ˜λ‚˜, console 창에 λ‹€μŒ λ‚΄μš©λ§Œ 좜λ ₯되고 아무것도 λœ¨μ§€ μ•ŠμŒ
  • npm run dev μ‹€ν–‰ μƒνƒœλ₯Ό μ’…λ£Œν•˜λ©΄ 'μ‚¬μ΄νŠΈμ— μ—°κ²°ν•  수 μ—†μŒ' 이 λœ¨λŠ” κ²ƒμœΌλ‘œ 보아 싀행은 λ˜μ—ˆμŒ
/* console μ°½ */
[vite] connecting...      client.ts:16
[vite] connected.         client.ts:53

πŸ”Ά 2024.03.29 였λ₯˜ λ‚΄μš©

ν˜„μž¬ μ‚¬μš© 쀑인 ν”Œλž«νΌμ΄ μ•„λ‹Œ λ‹€λ₯Έ ν”Œλž«νΌμ— esbuildλ₯Ό μ„€μΉ˜ν–ˆμŠ΅λ‹ˆλ‹€.
esbuildλŠ” λ„€μ΄ν‹°λΈŒ μ½”λ“œλ‘œ μž‘μ„±λ˜μ—ˆμœΌλ©° λ‹€μŒμ„ μˆ˜ν–‰ν•΄μ•Ό ν•˜κΈ° λ•Œλ¬Έμ— μ΄λŠ” μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
ν”Œλž«νΌλ³„ λ°”μ΄λ„ˆλ¦¬ μ‹€ν–‰ νŒŒμΌμ„ μ„€μΉ˜ν•©λ‹ˆλ‹€.

특히 "esbuild-windows-64" νŒ¨ν‚€μ§€κ°€ μžˆμ§€λ§Œ 이 ν”Œλž«νΌμ€ λŒ€μ‹  "esbuild-linux-64" νŒ¨ν‚€μ§€κ°€ ν•„μš”ν•©λ‹ˆλ‹€.
Windows λ˜λŠ” macOS에 esbuildλ₯Ό μ„€μΉ˜ν•˜κ³  "node_modules"λ₯Ό λ³΅μ‚¬ν•˜μ—¬ 상황을 ν•΄κ²°ν•˜μ„Έμš”.
Linuxλ₯Ό μ‹€ν–‰ν•˜λŠ” Docker μ΄λ―Έμ§€λ‘œ λ˜λŠ” "node_modules"λ₯Ό λ³΅μ‚¬ν•˜μ—¬ Windows 및 WSL ν™˜κ²½.

npm으둜 μ„€μΉ˜ν•˜λŠ” 경우 "node_modules"λ₯Ό λ³΅μ‚¬ν•˜μ§€ μ•Šμ•„λ„ λ©λ‹ˆλ‹€.
νŒŒμΌμ„ λ³΅μ‚¬ν•˜κ³  "npm ci" λ˜λŠ” "npm install"을 μ‹€ν–‰ν•  λ•Œ 디렉터리 볡사 ν›„ λŒ€μƒ ν”Œλž«νΌμ—μ„œ. μ•„λ‹ˆλ©΄ 원사 μ‚¬μš©μ„ κ³ λ €ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.
λŒ€μ‹  μ—¬λŸ¬ 곳에 νŒ¨ν‚€μ§€λ₯Ό μ„€μΉ˜ν•˜λŠ” κΈ°λŠ₯이 λ‚΄μž₯λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

(μ€‘λž΅)

20-1. You installed esbuild on another platform ν•΄κ²°

[root@localhost ProjYj2024]# ls
index.html     node_modules  package-lock.json   public            README.md  test1-src240131am.zip  test1-src240205pm.zip  test1-src240216pm.zip
jsconfig.json  package.json  postcss.config.cjs  quasar.config.js  src        test1-src240201pm.zip  test1-src240213pm.zip
[root@localhost ProjYj2024]# rm -rf node_modules/
  • npm i 둜 λ‹€μ‹œ install ν•˜μ—¬, node_modules 폴더 μƒμ„±λœ 것 확인
[root@localhost ProjYj2024]# npm i
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '[email protected]',
npm WARN EBADENGINE   required: { node: '^18 || ^16 || ^14.19', npm: '>= 6.13.4', yarn: '>= 1.21.1' },
npm WARN EBADENGINE   current: { node: 'v20.9.0', npm: '10.1.0' }
npm WARN EBADENGINE }

added 424 packages, and audited 425 packages in 9s

84 packages are looking for funding
  run `npm fund` for details

3 vulnerabilities (2 moderate, 1 high)

To address all issues, run:
  npm audit fix

Run `npm audit` for details.

[root@localhost ProjYj2024]# ls
index.html     node_modules  package-lock.json   public            README.md  test1-src240131am.zip  test1-src240205pm.zip  test1-src240216pm.zip
jsconfig.json  package.json  postcss.config.cjs  quasar.config.js  src        test1-src240201pm.zip  test1-src240213pm.zip
  • npm run dev
[root@localhost ProjYj2024]# npm run dev

> [email protected] dev
> quasar dev


 .d88888b.
d88P" "Y88b
888     888
888     888 888  888  8888b.  .d8888b   8888b.  888d888
888     888 888  888     "88b 88K          "88b 888P"
888 Y8b 888 888  888 .d888888 "Y8888b. .d888888 888
Y88b.Y8b88P Y88b 888 888  888      X88 888  888 888
 "Y888888"   "Y88888 "Y888888  88888P' "Y888888 888
       Y8b


 Β» Reported at............ 4/12/2024 10:14:15 AM
 Β» App dir................ /var/lib/containers/storage/volumes/4e56f41adaca53fa1652bb2d5e0aaa4f80905a278588c911343a283eb21be2fb/_data/workspace/ProjYj2024/ProjYj2024
 Β» App URL................ http://localhost:9000/
                           http://192.168.1.999:9000/
                           http://192.168.1.111:9000/
                           http://10.88.0.1:9000/
 Β» Dev mode............... spa
 Β» Pkg quasar............. v2.14.1
 Β» Pkg @quasar/app-vite... v1.7.0
 Β» Browser target......... es2019|edge88|firefox78|chrome87|safari13.1

 App β€’ Opening default browser at http://localhost:9000/

 App β€’ ⚠️  Failed to open default browser

21. Jenkins λΉŒλ“œ 및 μ‹€ν–‰

  • μ •μƒμ μœΌλ‘œ ProjYj2024κ°€ μ‹€ν–‰λ˜λ―€λ‘œ, npm run dev κ°€ μžλ™ μ‹€ν–‰λ˜λ„λ‘ λ³€κ²½

21-1. log 파일 생성 경둜 μ„ΈνŒ…

  • log νŒŒμΌμ„ μ €μž₯ν•  ProjYj2024_log 폴더 생성
  • 경둜 : /var/lib/containers/storage/volumes/4e56f41adaca53fa1652bb2d5e0aaa4f80905a278588c911343a283eb21be2fb/_data/logs
[root@localhost logs]# pwd
/var/lib/containers/storage/volumes/4e56f41adaca53fa1652bb2d5e0aaa4f80905a278588c911343a283eb21be2fb/_data/logs
[root@localhost logs]# mkdir ProjYj2024_log
[root@localhost logs]# chmod 777 ProjYj2024_log/
[root@localhost logs]# ls -al
total 8
drwxrwxrwx  2 root  root     6 Apr 12 17:18 ProjYj2024_log
drwxr-xr-x  2 root  root  4096 Apr 12 03:01 tasks

21-2. npmrun.sh 파일 생성

  • npmrun.sh 파일 생성 및 κΆŒν•œ λΆ€μ—¬
  • 경둜 : /var/lib/containers/storage/volumes/4e56f41adaca53fa1652bb2d5e0aaa4f80905a278588c911343a283eb21be2fb/_data
[root@localhost _data]# pwd
/var/lib/containers/storage/volumes/4e56f41adaca53fa1652bb2d5e0aaa4f80905a278588c911343a283eb21be2fb/_data
[root@localhost _data]# vi npmrun.sh
[root@localhost _data]# chmod 777 npmrun.sh
  • νŒŒμΌμ„ μ—΄μ–΄ μ•„λž˜μ™€ 같이 νŽΈμ§‘
#!/bin/sh
nowDate=`date "+%Y-%m-%d_%H:%M:%S"`
fileName="ProjYj2024_$nowDate.log"

cd ./workspace/ProjYj2024/ProjYj2024
pwd
nohup npm run dev > ../../../logs/ProjYj2024_log/$fileName &
  • μ‹€ν–‰ ν›„ log 파일이 μ •μƒμ μœΌλ‘œ μƒμ„±λ˜λŠ”μ§€ 확인
[root@localhost _data]# ./npmrun.sh
/var/lib/containers/storage/volumes/4e56f41adaca53fa1652bb2d5e0aaa4f80905a278588c911343a283eb21be2fb/_data/workspace/ProjYj2024/ProjYj2024
[root@localhost _data]# nohup: redirecting stderr to stdout

[root@localhost _data]# cd logs/ProjYj2024_log/
[root@localhost ProjYj2024_log]# ls
ProjYj2024_2024-04-12_13:57:26.log

πŸ”Ά λ°±κ·ΈλΌμš΄λ“œ μ‹€ν–‰ μ€‘λ‹¨μ‹œν‚€κΈ°

  • ps -ef | grep "quasar dev" : npm run dev 둜 인해 μ‹€ν–‰λœ λͺ©λ‘ 확인 및 쀑단
[root@localhost ProjYj2024]# ps -ef | grep "quasar dev"
root     1131847 1131836  0 11:49 pts/0    00:00:00 node /var/lib/containers/storage/volumes/4e56f41adaca53fa1652bb2d5e0aaa4f80905a278588c911343a283eb21be2fb/_data/workspace/ProjYj2024/ProjYj2024/node_modules/.bin/quasar dev
root     1131951 1131940  0 11:50 pts/0    00:00:00 node /var/lib/containers/storage/volumes/4e56f41adaca53fa1652bb2d5e0aaa4f80905a278588c911343a283eb21be2fb/_data/workspace/ProjYj2024/ProjYj2024/node_modules/.bin/quasar dev
root     1132841 1124565  0 11:56 pts/0    00:00:00 grep --color=auto quasar dev

[root@localhost ProjYj2024]# kill -9 1131847
[root@localhost ProjYj2024]# kill -9 1131951
[2]-  Exit 137                nohup ./startup.sh  (wd: /var/lib/containers/storage/volumes/4e56f41adaca53fa1652bb2d5e0aaa4f80905a278588c911343a283eb21be2fb/_data/workspace)
(wd now: /var/lib/containers/storage/volumes/4e56f41adaca53fa1652bb2d5e0aaa4f80905a278588c911343a283eb21be2fb/_data/workspace/ProjYj2024/ProjYj2024)

21-3. Jenkins ꡬ성

  • Jenkins λΉŒλ“œ ν›„ μ‘°μΉ˜λŠ” μ•„λž˜ 두 κ°€μ§€ λ°©λ²•μœΌλ‘œ ν•  수 있음
    • Item > Configure > Build Steps > Execute shell
    • Item > Configure > λΉŒλ“œ ν›„ 쑰치 > Post build task
  • Command : podman exec -it jenkins /bin/bash μ—μ„œ λ³΄λŠ” 경둜 κΈ°μ€€μœΌλ‘œ μž‘μ„±ν•˜κ²Œ 됨

21-4. Execute shell

  • 무쑰건 μ‹€ν–‰λ˜λŠ” λͺ…λ Ήμ–΄λ‘œ, Command 에 μž‘μ„±
echo "ProjYj2024 BUILD > Execute shell START ======================="
echo "ProjYj2024 BUILD > Execute shell END ======================="
  • μ§€κΈˆ λΉŒλ“œ > Console Output 확인
ProjYj2024 BUILD > Execute shell START =======================
ProjYj2024 BUILD > Execute shell END =======================

21-5. Post build task

  • 쑰건에 따라 μ‹€ν–‰λ˜λŠ” λͺ…λ Ήμ–΄λ‘œ, Script 에 μž‘μ„±
  • git rev-list --no-walk λΌλŠ” ν‚€μ›Œλ“œκ°€ log 에 좜λ ₯되면(즉, μ„±κ³΅ν•˜λ©΄) μ‹€ν–‰ν•˜λ„λ‘ ꡬ성
echo "ProjYj2024 BUILD > Post build task START ======================="
cd /var/jenkins_home
pwd
ps -ef | grep "quasar dev"
./npmrun.sh
ps -ef | grep "quasar dev"
echo "ProjYj2024 BUILD > Post build task END ======================="

21-6. npm: not found

  • Jenkins 에 NodeJS ν”ŒλŸ¬κ·ΈμΈ λ―Έμ„€μΉ˜ μ‹œ 였λ₯˜ λ°œμƒ
    • ssh μ‹€ν–‰ μ‹œ, npm: not found 문ꡬ 좜λ ₯
jenkins@d7020c058f90:~$ ./npmrun.sh
/var/jenkins_home/workspace/ProjYj2024/ProjYj2024
./npmrun.sh: 7: npm: not found
  • Jenkins λΉŒλ“œ μ‹œ nohup: failed to run command 'npm': No such file or directory 문ꡬ 좜λ ₯
  • Plugin μ„€μΉ˜ - NodeJS λ‚΄μš©λ„ μˆ˜ν–‰ν•˜μ˜€μœΌλ‚˜, 계속 였λ₯˜ λ°œμƒν•˜λŠ” 상황
    • μžλ™ 싀행은 ν˜„μž¬ μ•ˆλ˜κ³  있음 > μš°μ„ μ€ 직접 ./npmrun.sh 을 μˆ˜ν–‰ν•˜λŠ” λ°©μ‹μœΌλ‘œ μ§„ν–‰
⚠️ **GitHub.com Fallback** ⚠️