version: '3.3'
services:
stirling-pdf:
image: frooodle/s-pdf
ports:
- '8080:8080'
volumes:
- ./trainingData:/usr/share/tesseract-ocr/4.00/tessdata #Required for extra OCR languages
- ./extraConfigs:/configs
# environment:
# APP_LOCALE: en_GB
# APP_HOME_NAME: Stirling PDF
# APP_HOME_DESCRIPTION: Your locally hosted one-stop-shop for all your PDF needs.
# APP_NAVBAR_NAME: Stirling PDF
# APP_ROOT_PATH: /
# ALLOW_GOOGLE_VISIBILITY: true
시스템을 일시 중단하면 시스템을 사용하지 않을 때 전원을 절약할 수 있습니다.시스템을 다시 사용하려면 간단한 마우스 클릭이나 키보드 버튼을 탭하기만 하면 됩니다.경우에 따라 전원버튼을 눌러야 할 수도 있습니다.
Linux에는 3가지 정지 모드가 있습니다.
Suspend to RAM(Normal Suspend): PC가 배터리로 작동 중일 때 일정 시간 동안 사용하지 않거나 덮개를 닫으면 대부분의 노트북이 자동으로 들어가는 모드입니다.이 모드에서 전원은 RAM용으로 예약되며 대부분의 구성 요소에서 차단됩니다.
Suspend to Disk (Hibernate): 이 모드에서는 시스템 상태가 스왑 공간에 저장되고 시스템 전원이 완전히 꺼집니다.그러나 전원을 켜면 모든 것이 복원되고 떠난 곳에서 픽업합니다.
Suspend to both (Hybrid suspend): 여기서 머신 상태는 스왑에 저장되지만 시스템이 꺼지지는 않습니다.대신 PC가 RAM으로 일시 중단됩니다.배터리는 사용되지 않으며 디스크에서 시스템을 안전하게 재개하고 작업을 계속 진행할 수 있습니다.이 방법은 RAM 일시 중단보다 훨씬 느립니다.
Linux에서 일시 중단 및 최대 절전 모드 비활성화
Linux 시스템이일시 중단 되거나최대 절전 모드로 전환되지 않도록 하려면다음systemd대상을 비활성화해야 합니다.
Act as CODEX ("COding DEsign eXpert"), an expert coder with experience in multiple coding languages. Always follow the coding best practices by writing clean, modular code with proper security measures and leveraging design patterns. You can break down your code into parts whenever possible to avoid breaching the chatgpt output character limit. Write code part by part when I send "continue". If you reach the character limit, I will send "continue" and then you should continue without repeating any previous code. Do not assume anything from your side; please ask me a numbered list of essential questions before starting. If you have trouble fixing a bug, ask me for the latest code snippets for reference from the official documentation. I am using [MacOS], [VSCode] and prefer [brew] package manager. Start a conversation as "CODEX: Hi, what are we coding today?"
오늘 우리는Linux에서 일시 중지 및 최대 절전 모드를 비활성화하는 방법을 배웁니다 .주제에 들어가기 전에 컴퓨터의 일시 중단 및 최대 절전 모드에 대한 간략한 소개를 살펴보겠습니다.
일시 중단 및 최대 절전 모드란 무엇입니까?
시스템을 일시 중단할 때마다컴퓨터는 절전 모드로 들어갑니다.의미 - 열려 있는 모든 응용 프로그램, 파일 및 문서는 열린 상태로 유지되지만 모니터와 시스템의 다른 부분은 전원을 절약하기 위해 꺼집니다.컴퓨터를 일시 중단해도 전원이 완전히 꺼지는 것은 아닙니다.컴퓨터는 여전히 켜져 있고 여전히 소량의 전력을 사용합니다.
최대 절전 모드는일시 중지 유형 중 하나입니다.현재 세 가지 일시 중단 방법을 사용할 수 있습니다.
RAM 일시 중단또는일반 일시 중단 - 이 모드에서는RAM을 제외하고 화면과 시스템의 대부분이 꺼집니다(완전히 꺼지는 것은 아님).모든 랩탑은 사용자가 특정 시간 동안 활동하지 않거나 시스템이 배터리로 실행 중이거나 덮개가 닫혀 있을 때 이 일시 중지 모드에 들어갑니다.키를 누르거나 마우스 버튼을 클릭하면 컴퓨터가 일반 모드로 깨어납니다.
Suspend to DISK또는Hibernate- 이 모드에서는 현재 컴퓨터의 상태가스왑 공간에 저장되고 시스템이 완전히 꺼집니다.시스템을 다시 켜면 상태가 복원됩니다.이것은 일반적으로최대 절전 모드로 알려져 있습니다 .
둘 다 일시 중단또는하이브리드 일시 중단- 이 모드에서는 현재 컴퓨터의 상태가 스왑 공간에 저장되고 일반적인 RAM 일시 중단 모드가 호출됩니다.따라서 컴퓨터가 완전히 꺼지지 않습니다.배터리가 고갈되면 디스크에서 컴퓨터를 다시 시작할 수 있습니다.배터리가 고갈되지 않은 경우 RAM에서 컴퓨터를 다시 시작할 수 있습니다.이를 하이브리드 일시 중단이라고도합니다.
일시 중지 및 최대 절전 모드에 대한 기본 아이디어를 얻으시기 바랍니다.이제 주제로 돌아가 일시 중지 및 최대 절전 모드를 비활성화하는 방법을 살펴보겠습니다.
Linux에서 일시 중지 및 최대 절전 모드 비활성화
Linux 시스템이 일시 중단 및 최대 절전 모드로 전환되지 않도록 하려면 systemd 수준에서 다음 대상을 비활성화하십시오.
Created symlink /etc/systemd/system/sleep.target → /dev/null.
Created symlink /etc/systemd/system/suspend.target → /dev/null.
Created symlink /etc/systemd/system/hibernate.target → /dev/null.
Created symlink /etc/systemd/system/hybrid-sleep.target → /dev/null.
Linux에서 일시 중지 및 최대 절전 모드 비활성화
만일을 대비하여 모든 작업을 저장하고 다음 명령을 실행하여 변경 사항을 적용합니다.
$ sudo systemctl restart systemd-logind.service
또는 이를 적용하려면 시스템을 재부팅하십시오.
변경 사항이 실제로 적용되었는지 확인합니다.
$ systemctl status sleep.target suspend.target hibernate.target hybrid-sleep.target
Docker 컨테이너(container)는 격리된 환경에서 돌아가기 때문에 기본적으로 다른 컨테이너와의 통신이 불가능합니다. 하지만 여러 개의 컨테이너를 하나의 Docker 네트워크(network)에 연결시키면 서로 통신이 가능해집니다. 이번 포스팅에서는 컨테이너 간 네트워킹이 가능하도록 도와주는 Docker 네트워크에 대해서 알아보도록 하겠습니다.
네트워크 조회
Docker 네트워크의 기본은 내 컴퓨터에서 어떤 네트워크가 생성되어 있는지를 아는 것일 겁니다.docker network ls커맨드를 사용하면 현재 생성되어 있는 Docker 네트워크 목록을 조회할 수 있습니다.
$ docker network ls
NETWORK ID NAME DRIVER SCOPE
143496b94e57 bridge bridge local
311d6534f79f host host local
aa89f58200a6 none null local
bridge,host,none은 Docker 데몬(daemon)이 실행되면서 디폴트로 생성되는 네트워크입니다. 대부분의 경우에는 이러한 디폴트 네트워크를 이용하는 것 보다는 사용자가 직접 네트워크를 생성해서 사용하는 것이 권장됩니다.
네트워크 종류
Docker 네트워크는bridge,host,overlay등 목적에 따라 다양한 종류의 네트워크 드라이버(driver)를 지원하는데요.
bridge네트워크는 하나의 호스트 컴퓨터 내에서 여러 컨테이너들이 서로 소통할 수 있도록 해줍니다.
host네트워크는 컨터이너를 호스트 컴퓨터와 동일한 네트워크에서 컨테이너를 돌리기 위해서 사용됩니다.
overlay네트워크는 여러 호스트에 분산되어 돌아가는 컨테이너들 간에 네트워킹을 위해서 사용됩니다.
본 포스팅에서는 기본값이고 가장 많이 사용되는bridge네트워크에 대해서만 다루도록 하겠습니다.
네트워크 생성
먼저docker network create커맨드를 사용해서 새로운 Docker 네트워크를 생성해보도록 하겠습니다.
$ docker network create our-net
e6dfe4a9a5ec85abcb484662c30a3a0fc76df217dde76d52fac39fae8412ca68
$ docker network ls
NETWORK ID NAME DRIVER SCOPE
143496b94e57 bridge bridge local
311d6534f79f host host local
aa89f58200a6 none null local
e6dfe4a9a5ec our-net bridge local
추가된 네트워크는docker network ls커맨드로 확인할 수 있습니다.-d옵션을 사용하지 않았기 때문에 기본값인bridge네트워크로 생성된 것을 볼 수 있습니다.
네트워크 상세 정보
방금 추가한 네트워크의 상세 정보를docker network inspect커맨드로 확인해보도록 하겠습니다.
이제 두 개의 컨테이너가 네트워크를 통해 서로 소통이 가능한지 테스트를 해보도록 하겠습니다.
먼저one컨테이너에서two컨테이너를 상대로ping명령어를 날려보겠습니다. 컨테이너 이름을 호스트네임(hostname)처럼 사용할 수 있습니다.
$ docker exec one ping two
PING two (172.19.0.3): 56 data bytes
64 bytes from 172.19.0.3: seq=0 ttl=64 time=0.119 ms
64 bytes from 172.19.0.3: seq=1 ttl=64 time=0.105 ms
64 bytes from 172.19.0.3: seq=2 ttl=64 time=0.116 ms
64 bytes from 172.19.0.3: seq=3 ttl=64 time=0.883 ms
64 bytes from 172.19.0.3: seq=4 ttl=64 time=0.127 ms
반대로two컨테이너에서one컨테이너를 상대로ping명령어를 날려보겠습니다. 이번에는 컨테이너 이름 대신에 IP를 사용하겠습니다.
$ docker exec two ping 172.19.0.2
PING 172.19.0.2 (172.19.0.2): 56 data bytes
64 bytes from 172.19.0.2: seq=0 ttl=64 time=0.927 ms
64 bytes from 172.19.0.2: seq=1 ttl=64 time=0.079 ms
64 bytes from 172.19.0.2: seq=2 ttl=64 time=0.080 ms
64 bytes from 172.19.0.2: seq=3 ttl=64 time=0.079 ms
64 bytes from 172.19.0.2: seq=4 ttl=64 time=0.107 ms
$ docker network rm our-net
Error response from daemon: error while removing network: network our-net id e6dfe4a9a5ec85abcb484662c30a3a0fc76df217dde76d52fac39fae8412ca68 has active endpoints
위와 같이 제거하려는 네트워크 상에서 실행 중인 컨테이너가 있을 때는 제거가 되지가 않습니다.
그럴 때는 해당 네트워크에 연결되어 실행 중인 모든 컨테이너를 먼저 중지 시키고, 네트워크를 삭제해야 합니다.
$ docker stop one two
one
two
$ docker network rm our-net
our-net
네트워크 청소
하나의 호스트 컴퓨터에서 다수의 컨테이너를 돌리다 보면 아무 컨테이너도 연결되어 있지 않은 네트워크가 생기가 마련입니다. 이럴 때는docker network prune커맨드를 이용해서 불필요한 네트워크를 한번에 모두 제거할 수 있습니다.
$ docker network prune
WARNING! This will remove all networks not used by at least one container.
Are you sure you want to continue? [y/N] y
마치면서
이상으로 Docker 네트워크의 전반적인 라이프사이클에 대해서 살펴보았습니다. 본 포스팅에서 사용했던 각 커맨드에 대한 좀 더 자세한 내용은 아래 Docekr CLI 레퍼런스를 참고바라겠습니다.
$ sudo docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
2db29710123e: Pull complete
Digest: sha256:975f4b14f326b05db86e16de00144f9c12257553bba9484fed41f9b6f2257800
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/
오늘 빠른 것은 NIC를 Promxox VE의 가상 머신으로 전달하기 위한 매우 간단한 자습서입니다.통과 NIC는 하이퍼바이저 오버헤드를 방지하고 가상 NIC와 pfSense 및 OPNsense와 같은 일부 방화벽 어플라이언스를 사용하여 호환성 문제를 해결하는 데 도움이 될 수 있습니다.단점은 NIC가 SR-IOV를 지원하지 않는 한 이 구성에서 공유 장치가 아닐 가능성이 높다는 것입니다.
1단계: BIOS 설정
가장 먼저 해야 할 일은 시스템에서 IOMMU 기능을 켜는 것입니다.이를 위해서는 CPU와 플랫폼이 해당 기능을 지원해야 합니다.오늘날 대부분의 플랫폼은 IOMMU를 지원하지만 일부 이전 플랫폼은 지원하지 않습니다.Intel 플랫폼에서는 이를 "VT-d"라고 합니다.Intel Virtualization Technology for Directed I/O(VT-d)의 약자입니다.
Intel VT D를 활성화하여 IOMMU 작동
AMD 플랫폼에서는 AMD-Vi를 옵션으로 볼 수 있습니다.때로는 다른 시스템 펌웨어에서 IOMMU를 볼 수 있습니다.활성화하려는 옵션입니다.
물론 이것은 Proxmox VE이므로 BIOS에 있는 동안에도 기본 가상화가 켜져 있는지 확인하고 싶을 것입니다.또한 이 가이드를 사용하는 사람들에게 주요 초점이 될 것이므로 시스템에 방화벽/라우터를 만드는 경우 일반적으로 AC 전원 설정을 "항상 켜짐" 또는 "마지막 상태"로 설정하는 것이 좋습니다. 정전이 발생하면 네트워크가 즉시 복구됩니다.
다음으로 GRUB 또는 systemd를 부트로더로 사용하고 있는지 확인해야 합니다.
2단계: GRUB 또는 systemd를 사용 중인지 확인
이것은 새로운 단계이지만 최신 버전의 Proxmox VE를 설치하고 ZFS를 루트로 사용하는 경우(향후 확장될 수 있음) GRUB이 아닌 systemd를 사용하고 있을 가능성이 높습니다.설치 후 이 명령을 사용하여 사용 중인 것을 확인합니다.
efibootmgr -v
"File(\EFI\SYSTEMD\SYSTEMD-BOOTX64.EFI)"와 같은 내용이 표시되면 GRUB이 아닌 systemd를 사용하고 있는 것입니다.
또 다른 이점은 부팅할 때 GRUB이 포함된 블루 스크린과 OS로 들어가기 직전에 여러 옵션이 표시되면 GRUB을 사용하고 있는 것입니다.다음과 같은 내용이 표시되면 systemd를 사용하고 있는 것입니다.
Proxmox VE 시스템 부팅 메뉴
이는 많은 이전 가이드가 GRUB를 사용하고 있기 때문에 중요하지만 systemd를 사용하고 GRUB 지침을 따르는 경우 NIC 패스스루에 필요한 IOMMU를 활성화하지 않습니다.
3a단계: GRUB를 사용하여 IOMMU 활성화
GRUB가 있고 현재 대부분의 설치가 있는 경우 구성 파일을 편집해야 합니다.
nano /etc/default/grub
Intel CPU의 경우 quiet intel_iommu=on을 추가합니다.
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on"
AMD CPU의 경우 quiet amd_iommu=on을 추가합니다.
GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on"
다음은 배치할 위치를 보여 주는 인텔 라인이 있는 스크린샷입니다.
Proxmox VE Nano Grub Quiet Intel Iommu On
선택적으로IOMMU PT 모드를 추가할 수도 있습니다.PT 모드는 패스스루가 사용될 때 시스템의 다른 PCIe 장치의 성능을 향상시킵니다.이것은 Intel 및 AMD CPU에서 작동하며 iommu=pt입니다.다음은 추가될 AMD 버전이며 인텔 스크린샷은 다음과 같습니다.
이전에는 CLI 편집을 통해 통과 NIC를 VM에 추가했습니다.이제 Proxmox는 PCIe 장치 ID와 장치 공급업체 및 이름을 가져옵니다.이렇게 하면 시스템에서 NIC를 매우 쉽게 선택할 수 있습니다.많은 온보드 NIC에 대한 한 가지 좋은 점은 NIC가 시스템에 레이블이 지정되어 있기 때문에 물리적 순서는 순차적인 MAC 주소와 PCIe ID가 있음을 의미해야 한다는 것입니다.위의 0000:01:00.0에서 첫 번째 NIC(ETH0)입니다.장치 0000:02:00.0은 두 번째 등입니다.
Hunsn 4포트 2.5GbE I225 인텔 J4125 방화벽 박스 NIC 포트
이 시점에서 이미 완료되었습니다.OPNsense와 pfSense 모두에서 이 작업이 수행되고 프로세스가 매우 유사하다는 것을 알 수 있습니다.좋은 점은 이렇게 하면 pfSense/OPNsense가 가상화된 NIC 장치를 사용하는 대신 NIC에 직접 액세스할 수 있다는 것입니다.
pfSense 및 OPNsense를 사용하는 IOMMU에 대한 몇 가지 참고 사항
이러한 NIC가 할당된 후 염두에 두어야 할 몇 가지 주요 고려 사항이 있습니다.
통과 NIC를 사용하면 VM이 라이브 마이그레이션되지 않습니다.VM이 PCIe 위치에서 물리적 NIC를 기대하는데 이를 얻지 못하면 문제가 됩니다.
개념적으로 SR-IOV라는 고급 기능이 있어 NIC를 통해 여러 장치로 전달할 수 있습니다.pfSense 및 OPNsense 어플라이언스에서 일반적으로 볼 수 있는 저가형 i210 및 i225-V NIC의 경우 개념적으로 NIC를 VM 전용으로 지정합니다.즉, 다른 VM은 NIC를 사용할 수 없습니다.다음은 OPNsense NIC에도 할당된 NIC를 사용하는 pfSense VM(600)이 있는 예입니다.OPNsense를 시작하려고 하면 오류가 발생합니다.Proxmox VE GUI를 사용하면 두 VM이 꺼져 있는 경우 두 VM에서 패스스루를 구성할 수 있지만 한 번에 하나만 전용 NIC에서 켜고 활성화할 수 있습니다.
Proxmox VE 웹 GUI NIC가 이미 pfSense에 할당된 경우 OPNsense용 두 번째 VM에 할당됨
이전 하드웨어에는 IOMMU 기능이 없을 수 있습니다.최신 하드웨어에는 IOMMU와 ACS가 모두 있으므로 대부분의 최신 플랫폼에서는 PCIe 장치를 쉽게 분리하고 VM 전용으로 사용할 수 있습니다.이전 하드웨어에서 때때로 PCIe 장치가 그룹화되는 방식은 이 예에서와 같이 NIC를 다른 VM에 개별적으로 통과시키려는 경우 문제를 일으킵니다.
동일한 VM의 전용 통과 NIC와 함께 브리지에서 두 가상 NIC를 모두 활용할 수 있습니다.
1GbE 속도에서 통과는 가상화된 NIC를 사용할 때와 큰 차이가 없습니다.25GbE/100GbE 속도에서는 매우 큰 차이가 됩니다.
DPU에대해 논의할 때주요 차이점 중 하나는 DPU가 가상 네트워크 포트를 물리적 고속 포트에 브리징하는 것과 같은 기능을 처리할 수 있으며 호스트 CPU가 아닌 DPU에서 모두 발생한다는 것입니다.
이것은 베어 메탈 설치보다 설정하는 데 시간이 오래 걸리고 pfSense 또는 OPNsense 설치에 복잡성을 추가하는 영역입니다.이점은 재부팅과 같은 작업을 수행하는 것이 일반적으로 가상 머신에서 훨씬 빠르다는 것입니다.주요 변경 사항이 있는 경우 pfSense 또는 OPNsense 이미지의 스냅샷을 찍을 수도 있습니다.
Proxmox VE 관리 및 기타 VM 기능을 위해 시스템에 하나 이상의 NIC를 추가하는 것이 좋습니다.모든 NIC에 대한 패스스루를 사용하여 VM을 방화벽화하는 경우 시스템 NIC가 없습니다.
이것은 완전하지는 않지만 도움이 되기를 바랍니다.
마지막 말
이것은 pfSense, OPNsense 또는 다른 솔루션을 가상화할 때 Proxmox VE에서 PCIe 패스스루 NIC를 설정하는 빠른 가이드입니다.2017년 또는 2020년 이후에 만들어진 최신 하드웨어에 더 적합하므로 이전 시스템을 사용하는 경우 더 많은 조정이 필요할 수 있습니다.이것은 Intel과 같은 회사가 시장에서 자사 칩의 세분화에 사용했던 기능이었지만 요즘에는 대부분 VT-d를 지원할 것입니다.