2019/04/08

system 리눅스 부팅 시작 프로세스 정리

리눅스 부팅 시작 프로세스 정리

시스템이 응용 프로그램을 실행할 준비가 되려면 무엇이 필요한지 궁금한가?

리눅스 부팅 및 시작 프로세스를 이해하는 것은 리눅스를 구성하고 시작 문제를 해결할 수 있다는 점에서 중요하다.
이 문서는 grub2 부트로더를 사용하는 부트업 시퀀스와 systemd 초기화 시스템이 동작하는 순서에 대해 간략하게 설명한다.

grub2: https://en.wikipedia.org/wiki/GNU_GRUB
system: https://en.wikipedia.org/wiki/Systemd

실제로 리눅스 컴퓨터를 부팅중 일때 필요한 두 가지 이벤트가 있다.

- 부팅 및 시작
컴퓨터 전원 ON
커널 초기화
systemd 시작

시작 프로세스는 동작/점거 상태 정보를 리눅스 컴퓨터로 가져 오는 작업을 완료한다.

전반적인 리눅스 부팅 및 시작 프로세스는 이해하기 쉽다.

- BIOS POST
- 부트로더 (GRUB2)
- 커널 초기화
- 모든 프로세스의 부모인 system를 시작

GRUB2와 system는 최근에 발표된 리눅스에서 초기화 소프트웨어로 사용되고 있다.

1 부팅 프로세스
컴퓨터 전원 ON
부팅 프로세스 시작
루트 사용자 및 일반사용자 로그인

부팅 순서 변경
재 부팅

2. BIOS POST
컴퓨터 전원 ON
BIOS(기본 입출력 시스템)의 일부인 POST(Power On Self Test) 실행.

1981년 IBM 최초의 PC 설계.
BIOS 하드웨어 구성 요소로 하드웨어 초기화 설계.
POST는 컴퓨터 하드웨어가 올바르게 동작하는지 확인하기 위함이며, BIOS의 일 부분이다.
POST가 실패하면 컴퓨터를 사용할 수 없음(즉 부팅 프로세스를 진행 불 가능)

BIOS POST는 하드웨어의 기본 동작 가능성을 검사 한 다음 연결된 모든 부팅 장치에서 부팅 섹터를 찾는다.
부팅 섹터는 BIOS 인터럽트 INT 13H를 실행한다.
유효한 부트 레코드를 포함 하는 첫 번째 부트 섹터는 RAM에 로드 된 후 제어 명령을 부트 섹터에 로드 된 코드(grub)로 전송 된다.

부트 섹터가 실제 부트 로더의 첫 단계이다.
리눅스 사용되는 부트로더 grub, grub2, lilo가 있음.

3. GRUB
GRUB2는 "GRand Unified Bootloader, version 2"의 약자이다.
현재 대부분의 최신 리눅스 배포판에서 기본 부트로더를 사용한다.
GRUB2는 컴퓨터 운영체제 커널을 찾아 메모리에 로드 할 정도로 잘 만들어진 프로그램이다.

GRUB은 멀티 부트 사양과 호환되도록 설계되었다.
https://en.wikipedia.org/wiki/Multiboot_Specification
단일 운영 체제의 부트 레코드를 변경해 로드 할 수 있다.

GRUB은 설치된 리눅스 배포본에 대해 여러 다른 커널 중 하나를 선택해 부팅 할 수 있다.
업데이트 된 커널이 부팅이 안 될 경우 또는 특정 프로그램에서 동작 안할 경우 다른 이전 버전의 커널로 부팅 할 수 있다.
이러한 구성 파일은 /boot/grub/gurb.cnf 파일을 사용해 설정 할 수 있다.

grub1은 현재 레거시로 간주되며 대부분의 리눅스 배포판에서는 grub2로 변경 되었다.
grub2는 grub1을 다시 작성한 소프트웨어 프로그램이다.
grub2는 grub1과 동일한 부트 기능을 제공한다.
grub2는 메인 프레임과 유사한 명령 기반의 미리 정해진 OS 환경이기 때문에 부팅 전 단계에서 더 많은 유연성을 제공한다.
grub2는 /boot/grub2/gurb.cfg 파일로 설정 가능하다.

두 grub의 주요 기능은 리눅스 커널을 메모리에 로드해 실행하는 것이다.
두 버전의 grub은 본질적으로 동일한 방식으로 동작하며 동일한 세 단계를 거치지 만 grub 역할을 수행하는 방법에 대한 설명을 위해 grub2를 사용한다.

4. 단계별 절차.
1 시작
- BIOS POST 섹션 동작
- POST 끝날 때 연결된 디스크 MBR(마스터 부트 레코드)에 있는 부트 레코드 검색 찾기
- 부트 레코드 메모리 로드
- 부트 스트랩 코드, 즉 GRUB2 1 단계은 파티션 테이블 함께 하드 드라이브의 첫 번째 섹터 512 바이트 맞춤.
- 마스트 부트 레코드(https://en.wikipedia.org/wiki/Master_boot_record)에서 실제 부트 스트랩 코드에 할당 된 총 공간은 446 바이트 이다
- 1 단계 446 바이트 파일의 이름은 boot.img이며 별도로 부트 레코드에 추가되는 파티션 테이블은 포함하지 않는다.

부트 레코드는 작아야 하기 때문에 파일 시스템 구조를 이해하지 못한다.
따라서 1 단계의 유일한 목적은 1.5 단계 RAM에 로드 한 후 1 단계를 1.5 단계에서 제어 전환한다.

1.5 단계
위에서 언급했듯이 grub의 1.5 단계는 부트 레코드 자체와 디스크 드라이브의 첫 번째 파티션 사이의 공간에 있어야 한다.
이 공간은 기술적 이유(역사적)로 사용되지 않고 남겨놓았다.
하드 드라이브의 첫 번째 파티션은 섹터 63에서 시작 하고 섹터 0의 MBR과 함께 62 512-바이트 섹터-31744 바이트- 남겨둔다.
GRUB은 1.5단계인 core.img 파일을 저장 한다.
core.img 파일은 25389 바이트 이므로 MBR과 이를 저장할 첫 번째 디스크 파티션 사이에 충분 한 공간이다.

이 단계에서 수용 할 수 있는 많은 양의 코드로 인해 표준 ext linux 파일 시스템, fat, NTFS와 같은 공통 파일 시스템 드라이버를 포함 할 수 있다.
grub2의 2단계에서 표준 ext 파일 시스템을 사용할 수 있지만, 논리 볼륨에는 사용할 수 없다.
따라서 2단계 파일의 표준 위치는 /boot/ 파일시스템, /boot/grub2 에 있다.

/boot 디렉토리는 grub에서 지원하는 파일 시스템에 있어야 한다.
전체 파일 시스템은 아니다.
1.5 단계의 기능은 /boot 파일 시스템에서 2 단계에서 필요한 파일을 찾고 필요한 드라이버를 로드하는 데 필요한 파일 시스템 드라이버를 실행해 시작하는 것이다.

2 단계
이 단계의 grub 관련 모든 파일은 /boot/grub2 디렉토리 하위 디렉토리에 있다.
grub2에는 1단계와 2단계와 같은 이미지 파일은 없다.
대신, 대부분은 /boot/grub2/i386-pc 디렉토리에서 필요에 따라 로드되는 런타임 커널 모듈로 구성된다.

grub2 2단계의 기능은 리눅스 커널을 찾아서 RAM에 로드하고 컴퓨터를 제어하는 것이다.
커널 및 관련 파일은 /boot/ 디렉토리에 있다.
보통 커널 파일은 vmlinuz로 시작하는 이름으로 식별 할 수 있다.
/boot/ 디렉토리의 내용을 나열하여 현재 시스템에 설치된 커널을 볼 수 있다.

grub2는 여러 리눅스 커널 중 하나를 선택해 부팅을 지원한다.

grub2의 2단계는 선택한 커널을 메모리에 로드하고 컴퓨터 제어를 커널에게 넘기는 것이다.

3 핵심
모든 커널은 공간을 절약하기 위해 압축 해제 된 자체 압축 형식으로 되어있다.
커널은 RAM 디스크 이미지 및 하드 드라이브의 장치 맵과 함께 /boot 디렉토리에 있다.

선택한 커널을 메모리에 로드하고 실행 한 후에는 RAM 디스크 압축을 풀기 전 커널 버전과 맞는 RAM 디스크 파일을 풀어야 한다.
커널이 압축을 풀면 systemd를 로드한다.
systemd는 이전 방식 sysv(BSD) init(유닉스) 프로그램을 대체하는 방식이다.

https://en.wikipedia.org/wiki/Systemd
https://en.wikipedia.org/wiki/Init#SysV-style

여기 까지가 부팅 과정이 끝이다.
이 시점에서, 리눅스 커널 및 systemd 실행 하지만, 최종 사용자는 아직 아무런 작업을 수행할 수 없다.

4. 시작 프로세스
시작 프로세스는 부팅 프로세스를 따르고, Linux 컴퓨터는 생산적인 작업에 사용할 수 있는 작동 상태를 제공 합니다.

5. systemd
systemd는 모든 프로세스의 모체이며 리눅스 호스트를 생산적인 작업을 수행 할 수 있는 상태로 만든다.
이전 init 프로그램보다 훨씬 광범위한 기능 중 일부는 파일 시스템 마운트, 시스템 서비스 시작 및 관린, 실행중인 리눅스 호스트 관리가 여러 측면에 보강 되었다.
시동 순서와 관련이 없는 systemd의 작업은 여기서는 언급하지 않느다.

먼저, systemd는 스왑 파일이나 파티션을 포함하여 /etc/fstab에 정의 된대로 파일 시스템을 마운트 한다.
이 시점에서 /etc/ 에 있는 구성 파일에 접근 할 수 있다.
구성 파일 /etc/systemd/system/default.target 을 사용하여 호스트를 부트하기 위해 상태 또는 대상을 결정 한다.
default.target 파일은 실제 대상 파일 만 심볼릭 링크한다.
데스크탑 워크스테이션의 경우 일반적으로 이전의 systemV init에서 runlevel 5와 동일한 graphical.target이 된다.
서버의 경우 기본값은 SystemV에서 실행 레벨 3과 같은 다중 사용자 모드일 가능성이 크다.
emergency.target은 단일 사용자 모드와 유사하다.

systemd 시작과 이전 버전의 systemV 시작 런레벨을 비교 한다.
halt.target: 시스템 전원을 끄지 않고 시스템 정지
0|poweroff.target|runlevel0.target: 시스템을 정지하고 전원을 끈다
S|emergency.target|:단일 사용자 모드. 실행중인 서비스가 없다. 파일 시스템이 마운트되지 않는다. 사용자가 시스템과 상호 작용할 수 있도록 복구 쉘만 주 콘솔에서 실행
1|rescue.target|runlevel1.target: 기본 시스템이며 가장 기본적인 서비스만 실행하고 기본 콘솔 구조 쉘을 마운트한다.
2||runrevel2.target: 다중 사용자, NFS, GUI 지원 하지 않는 모드
3|multi-user.target|runlevel3.target: 모든 서비스가 실행 중이자만 명령해 인터페이스 CLI 모드
4||runlevel4.target: 미사용
5|graphicla.target|runlevel5.target:GUI 다중 사용자 모드
6|reboot.target|runlevel6.target: 재부팅

default.target : 이 대상은 multi-user.target 또는 graphical.target에 대한 심볼릭 링크로 앨리어싱된다.
systemd는 항상 default.target을 사용하여 시스템을 시작한다.
default.target은 절대로 halt.target, poweroff.target, reboot.target 으로 지정하면 된다.

현 런레벨 확인.
sudo systemctl get-default
graphical.target ---> 그래픽 모드

런레벨 종류
0: poweroff.target
1: rescue.target
2,3,4: multi-user.target
5: graphical.target
6: reboot.target

런레벨 변경.
sudo systemctl set-default multi-user.target
Alt+F1 = 로그인 화면 이동.

각 런레벨 구성 파일에는 일련의 종속성이 있다.
systemd가 필요한 종속성을 시작한다.
이러한 종속성은 특정 기능 수준에서 리눅스 호스트를 실행하는 데 필요한 서비스이다.

system는 또한 레거시 SystemV init 디렉토리를 보고 거기에 시작 파일이 있는지 확인한다.
SystemV init 구성 파일이 있으면 서비스를 시작한다.

부트업 맨 페이지 확인.
http://man7.org/linux/man-pages/man7/bootup.7.html

sysinit.target 및 basic.target 은 시작 프로세스의 체크 위치로 간주 된다.
systemd가 서비스를 시작 할 때 병렬로 서비스를 동작 시키기 위한 방법으로 설계 되었다.
하지만, 더욱 유연성을 고려해 systemd 가 시작 하기전 동작 해야할 특정 서비스 실행 할 수 있다.
이러한 검사 방법으로 모든 서비스에 대해 동작 시킬 수 가 있게된다.

sysinit.target 은 종속되는 모든 유닛이 완료 처리.
모든 유닛. 마운트 파일 시스템, 스왑 파일 설정, udev 시작, 임의 생성 시드 설정, 하위 레벨 서비스 시작, 하나 이상의 파일 시스템이 암호화 되어있는 경우 암호화 서비스 설정은 sysinit 내용에 완료된다.
targeting 이러한 작업을 병렬로 처리한다.

sysinit.target는 간략한 시스템 기능 측면이 고 basic.target으로 이동 하는 데 필요한 모든 하위 수준 서비스와 장치를 시작 한다.

           local-fs-pre.target
                    |
                    v
           (various mounts and   (various swap   (various cryptsetup
            fsck services...)     devices...)        devices...)       (various low-level   (various low-level
                    |                  |                  |             services: udevd,     API VFS mounts:
                    v                  v                  v             tmpfiles, random     mqueue, configfs,
             local-fs.target      swap.target     cryptsetup.target    seed, sysctl, ...)      debugfs, ...)
                    |                  |                  |                    |                    |
                    \__________________|_________________ | ___________________|____________________/
                                                         \|/
                                                          v
                                                   sysinit.target
                                                          |
                     ____________________________________/|\________________________________________
                    /                  |                  |                    |                    \
                    |                  |                  |                    |                    |
                    v                  v                  |                    v                    v
                (various           (various               |                (various          rescue.service
               timers...)          paths...)              |               sockets...)               |
                    |                  |                  |                    |                    v
                    v                  v                  |                    v              rescue.target
              timers.target      paths.target             |             sockets.target
                    |                  |                  |                    |
                    v                  \_________________ | ___________________/
                                                         \|/
                                                          v
                                                    basic.target
                                                          |
                     ____________________________________/|                                 emergency.service
                    /                  |                  |                                         |
                    |                  |                  |                                         v
                    v                  v                  v                                 emergency.target
                display-        (various system    (various system
            manager.service         services           services)
                    |             required for            |
                    |            graphical UIs)           v
                    |                  |           multi-user.target
                    |                  |                  |
                    \_________________ | _________________/
                                      \|/
                                       v
                             graphical.target


system.target이 완료된 후 systemd는 basic.target을 시작하여 이를 수행하는 데 필요한 모든 유닛을 시작한다.
기본 목표는 다음 target(대상)에 필요한 유닛을 시작하여 몇 가지 추가 기능을 제공한다.
여기에는 다양한 실행 가능한 디렉토리 위치에, 통신 소켓 및 타이머에 대한 경로 설정과 같은 것들이 포함된다.

마지막으로, 사용자 레벨 목표 인 multi-user.target 또는 graphical.target 을 초기화 할 수 있다.

multi-user.target은 콘솔 텍스트 모드로 로그인 할 수 있다.
graphical.target이 기본이면 그래픽 로그인을 볼 수 있다.
GUI 로그인 화면은 사용 하는 기본 디스플레이 관리자에 따라 다르다.

DM: Displayer Manager
|Desktop|Display manager|설명|
|GNOME  |GDM|그놈 디스플레이 메니저|
|KDE    |KDM|KDE 기반 디스플레이 메니저|
||LightDM|조그만한 디스플레이 메니저|
|LXDE|LXDM|LXDE 디스플레이 메니저|
|KDE|SDDM|단순한 데스크탑 디스플레이 메니저|
||XDM|기본 X 윈도우 시스템 디스플레이 메니저|

WM: Windows Manager: X window System:https://en.wikipedia.org/wiki/X_Window_System
|Desktop|Window manager|설명|
|Unity|Compiz
||FluxBox||
||FVWM||
||IceWM||
|KDE|Kwin|2008년 KDE Plasma 4 시작|
|GNOME|Metacity|그놈 2의 기본값
|GNOME|Mutter|그놈 3의 기본값
||twm|아주 오래되고 간단한 창 관리자|
|Xfce|Xfwm||

요즘 새롭게 나온 WM: Windows Manager인 Wayland: https://en.wikipedia.org/wiki/Wayland_(display_server_protocol)


6. 문제점
/etc/default/grub 수정시 원하는 커널로 부팅 되지 않을 경우가 발생.
GRUB_DEFAULT = GRUB_DEFAULT = 2

수정 후 저장.
grub2-mkconfig > /boot/grub2/grub.cfg
또는
grub-mkconfig > /boot/grub/grub.cfg

7. 결론
grub2 및 systemd init 시스템은 대부분 최신 리눅스 배포판에서 사용된다.
부팅 및 시작 단계의 핵심 구성 요소이다.
특히 systemd를 둘러싼 논쟁이 있었음에도 불구하고 이 두 구성 요소는 커널을 처음 로드하고 리눅스 시스템의 기능을 생성하는 데 필요한 모든 서비스를 시작 할 수 있다.

이전 버전보다 grub2와 systemd가 더 복잡하지만, 기능을 습듭하면 관리하기가 쉽다.
systemd 메뉴얼 페이지: https://www.freedesktop.org/software/systemd/man/index.html

2019/02/27

pci-e 리얼텍 랜카드 설정.

sudo lspci -v

커널에서 r8169 로 잡히는게 문제
r8168 드라이버를 받아서 설치
r8169 드라이버를 blacklist에 넣어 로딩하지 않게 하면 문제가 해결

8169는 pci 기반 칩셋이고 8168은 pci-e 기반 칩셋

다운로드
http://www.realtek.com/downloads/downloadsView.aspx?Langid=1&PNid=13&PFid=5&Level=5&Conn=4&DownTypeID=3&GetDown=false
linux 버전으로 2016년에 나온 것으로 다운

압축 해제 후 예전 커널 드라이버 사용하지 않기위해 blacklist 에 추가
echo "blacklist r8169" >> /etc/modprobe.d/blacklist.conf

컴파일이 안 될 경우에는 헤더가 없다는 메세지가 나온다.
즉 /lib/modules/`uname -r`/ build 심볼 링크가 없었서 그런다.
이걸 해결 하기 위해서 헤더를 설치해 준다.

sudo apt-get install linux-headers-$(uname -r)
또는
sudo apt-get install linux-generic
sudo apt-get install linux-source

참고 명령어
apt-get install linux-headers-$(uname -r)
apt-get install kernel-package
sudo apt-get update && sudo apt-get install linux-headers-3.5.0-36-generic
sudo apt-get update && sudo apt-get install linux-headers-`uname -r`

다운로드 받는 파일로 이동
rmmod r8169
네트웍 동작 하지 않음

컴파일
./autorun.sh

자동 모듈적제
depmod -a

수동 모듈 적제
insmod ./src/r8168.ko
ERROR: could not insert module ./src/r8168.ko: File exists --> 모듈이 적제 되었다는 의미

램디스크 드라이버 추가
mkinitramfs -o /boot/initrd.img-'uname -r' 'uname -r'

부팅시 자동 적재
echo "r8168" >> /etc/modules

재부팅
reboot

확인
lsmod | grep r8168

ubuntu 16.04 server zentyal install

sudo apt-get update
sudo apt-get upgrade

sudo add-apt-repository "deb http://archive.zentyal.org/zentyal 5.1 main extra"
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 10E239FF wget -q http://keys.zentyal.org/zentyal-5.1-archive.asc -O- | sudo apt-key add -


sudo apt-get update
sudo apt-get install zentyal

2019/02/11

우분투 설치 이미지 관련

우분투 설치 이미지 관련
http://archive.ubuntu.com/ubuntu/dists/bionic-updates/main/installer-amd64/current/images/

Live : CD/DVD 또는 USB에서 부팅
cdrom : CD로 부팅후 HDD 설치.
hd-media: ISO 부팅 후 HDD 설치.

영국의 캐노니컬에서 개발하는 우분투 14.04 리눅스 커널의 새로운 기능 추가나 버그 수정 또는 보안 취약점 문제 해결한 HWE 커널 4.4.0-119 버전이 업데이트를 통해 배포

*LTS : Long Term Support - 5년 간의 장기 지원
*HWE : Hardware Enablement - 하드웨어 지원 강화를 위한 커널로, 6개월마다 4번에 걸쳐 판올림하면서 지원
*GA : General Availability - 출시 당시의 커널로, 5년 간 판올림 없이 지원

hwe-cdrom: CD로 부팅후 HDD 설치.
hwe-hd-media: ISO 부팅 후 HDD 설치.
hwe-netboot: 네트워을 통한 설치

우분투 버전 04, 10 차이점

16.04 LTS, Long Term Release 버전 5년간 지원

16.10버전 9개월 지원

2019/02/01

mkisofs ios 파일 재 패키징

mkisofs: ISO 이미지 파일 재 패키지 후 설치

설치 원본 이미지 다운로드 후 마운트
mkdir -p /mnt/linux
mount -o loop /tmp/linux-install.iso /mnt/linux

ISO 파일 복사
cd /mnt
tar -cvf - linux | (cd /var/tmp/ && tar -xf - )

파일 수정 후 재 패키징
cd /var/tmp/linux
mkisofs -o ../your-new.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no -emul-boot -boot-load-size 4 -boot-info-table -J -R -V Your Disk Name Here .

2019/01/30

16.04 nimf 파일 패키징

Nimf의 .deb 패키지 빌드하기

빌드를 위해서 devscripts, build-essential를 먼저 설치합니다.

username:~$ sudo apt install devscripts build-essential
username:~$ cd
username:~$ mkdir tmp-build
username:~$ cd tmp-build
username:~/tmp-build$ wget https://github.com/cogniti/nimf/archive/2017.02.21.tar.gz
username:~/tmp-build$ tar zxf 2017.02.21.tar.gz
username:~/tmp-build$ cd nimf-2017.02.21
username:~/tmp-build/nimf-2017.02.21$ dpkg-checkbuilddeps

그랬는데 이런 메시지가 나오면
dpkg-checkbuilddeps: Unmet build dependencies:
하면서 여러가지 패키지들 이름이 나오면 그 모든 패키지들을 설치하면 됩니다.

Ubuntu 16.04 계열에서는 librime-dev 의존성 이슈를 해결하기 위해서 해당 rime을 빼고 빌드합니다.
nimf/configure.ac 에서 PKG_CHECK_MODULES(NIMF_RIME_DEPS, [rime> = 1.2.9 $ LIBNIMF_REQUIRES]) 줄 제거
nimf/modules/engines/Makefile.am 에서 nimf-rime 을 제거
nimf/debian/control 에서 librime-dev (> = 1.2.9) 줄 제거
하고 빌드하면 됩니다.

username:~/tmp-build/nimf-2017.02.21$ debuild
하면 빌드를 시작합니다.

다 되면 패키지들을 확인해보세요.
username:~/tmp-build/nimf-2017.02.21$ cd ..
username:~/tmp-build$ ls
2017.02.21.tar.gz              nimf_2017.02.21_amd64.deb
nimf-2017.02.21                nimf_2017.02.21.dsc
nimf_2017.02.21_amd64.build    nimf_2017.02.21.tar.xz
nimf_2017.02.21_amd64.changes  nimf-dev_2017.02.21_amd64.deb

출처 : https://github.com/cogniti/nimf/issues/33#issuecomment-282760133
기본 문서 : https://cogniti.github.io/nimf/ko/support.html

2019/01/29

라이브 cd 이용한 grub 부트로더 복구

grub 복구
- 다른 운영체제 설치 할 때 부트로더 재 적용.

라이브 CD 마운트
sudo mount /dev/sdXY /mnt

디렉토리 바인딩
sudo mount --bind /dev /mnt/dev &&
sudo mount --bind /dev/pts /mnt/dev/pts &&
sudo mount --bind /proc /mnt/proc &&
sudo mount --bind /sys /mnt/sys

마운트 디렉토리 루트 접근
sudo chroot /mnt

부트로더 설치  및 적용
grub-install /dev/sdX
grub-install --recheck /dev/sdX
update-grub

루트 종료 및 마운트 해제
exit &&
sudo umount /mnt/sys &&
sudo umount /mnt/proc &&
sudo umount /mnt/dev/pts &&
sudo umount /mnt/dev &&
sudo umount /mnt

120 초 대기 IO 처리.

vnc 및 ssh 접근 시 타임 아웃 문제.
/proc/sys/kernel/hung_task_timeout_secs

메모리 자원 사용 확인
sar -r

cpu 자원 사용 확인
sar -u

hung_task_timeout_secs
기본적 리눅스 파일 시스템 캐싱에서 사용할 수 있는 메모리는 최대 40%.
40% 메모리를 사용하게 되면, 미 해결된 데이터를 디스크로 플래시 한 후 IO 동기화 진행.
flush out 하기 위해 기본적으로 120초의 시간 제한을 둠.
입출력 하위 시스템은 데이터를 120 초 동안 플래시 할 만큼 빠르지 않음.
입출력 하위 시스템은 느리게 응답하고 더 많은 요청을 처리하게 되면 시스템 메모리 오류가 발생 http 요청을 처리.

테스트
sudo sysctl -w vm.dirty_ratio=10
sudo sysctl -w vm.dirty_background_ratio=5

적용(시스템 재 부팅 시 정보 사라짐)
sudo sysctl -p

시스템 적용
sudo vi /etc/sysctl.conf
vm.dirty_background_ratio = 5
vm.dirty_ratio = 10

sudo reboot

2019/01/28

우분투 16.04 메인보드 교체후 시스템 안정화.

dmesg | grep -i "error\|fail\|warn"

1 asmp -> 바이오스 설정.
활성화

2 사운드 문제 해결
사운드 카드 확인
cat /proc/asound/cards

사운드 드라이버 검색
lsmod | grep snd

드라이버 정보 확인(인텔 온보드)
modinfo snd_hda_audio

snd_hda_intel(인텔 온보드 드라이버 이름)

블랙리스트 추가
sudo nano /etc/modprobe.d/blacklist.conf
blacklist snd_hda_intel

sudo update-initramf -u

블랙 리스트 적용 확인
cat /proc/asound/cards

사운드 관련 프로그램 사용 없을 때 USB 자동 해제 방지
sudo nano /etc/pulse/default.pa
#load-module module-suspend-on-idle

사운드 구성 추가 프로그램 설치
sudo apt-get install pavucontrol

3 기계식 USB 키보드 문제
usb_submit_urb(ctrl) failed
hid-generic 0003:0853:0145.0004: usb_submit_urb(ctrl) failed: -1

lsusb
Bus 001 Device 005: ID 0853:0145 Topre Corporation

vi /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="usbhid.quirks=0x0853:0x0145:0x20000408"

부트로더 업데이트
sudo update-grub

부트로더 2.0 업데이트 명령어
sudo grub-mkconfig -o /boot/grub/grub.cfg:wq

4. pci error
vi /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="usbhid.quirks=0x0853:0x0145:0x20000408 quiet splash pci=noaer"

5 NVIDIA 커널 버전 및 설치 드라이버 확인.
 nvidia: module verification failed: signature and/or required key missing - tainting kernel
서명문제.
CONFIG_MODULE_SIG_FORCE 커널 옵션 활성화 문제.

드라이버 확인
sudo ubuntu-drivers devices

vga 확인
lspci | grep -i vga

디스플레이 정보 확인
sudo lshw -C display

로그 파일
 /var/log/Xorg.0.log
 /var/log/gpu-manager.log

설치 가능 패키지 확인
dpkg -l | grep -i nvidia

커널 메세지 확인
dmesg | egrep -i "bbswitch | nvidia"

시스템 정보 요약
inxi -Fxz

그랙픽 드라이버 설치 정보 확인
inxi -G

하드웨어 확인
sudo lshw -C display | grep product

운영체제 확인
/etc/etc/issue

커널 지원 설치 버전 확인.
dpkg --list | fgrep nvidia

소스 설치
드라이브 다운로드 : GTX 1070 드라이버 설치
http://www.nvidia.co.kr/Download/index.aspx?lang=kr

sudo vi /etc/modprobe.d/blacklist.conf
blacklist amd76x_edac #this might not be required for x86 32 bit users.
blacklist vga16fb
blacklist nouveau
blacklist rivafb
blacklist nvidiafb
blacklist rivatv

기존 바이너리 패키지 삭제
sudo apt-get remove --purge nvidia*

윈도우 메니저 서비스 중지
sudo service lightdm stop

다운로드 받은 드라이버 설치
chmod +x NVIDIA-Linux-x86_64-384.98.run
sudo ./NVIDIA-Linux-x86_64-384.98.run

윈도우 메니저 시작
sudo service lightdm start

설치 확인
nvidia-smi
nvidia-settings

삭제
sudo sh ~/Downloads/NVIDIA-Linux-*-384.98.run --uninstall

아직 미 해결... dmesg 메세지 출력 됨.
드라이버는 동작 명령으로 확인... 커널 메세지의 때문에 흠...






7 vmware
 sudo /usr/bin/vmware-modconfig --console --install-all

2019/01/27

ubuntu pxe boot install

1. 유틸 설치
apt-get install isc-dhcp-server tftpd-hpa syslinux ntf-kernel-server initramfs-tools

2. dhcp 원격 서버 설정
cat /etc/dhcp/dhcpd.conf
# DHCP server is authoritative for all networks
authoritative;

# extra options
# RFC3442 routes
option rfc3442-classless-static-routes code 121 = array of integer 8;

# MS routes
option ms-classless-static-routes code 249 = array of integer 8;

pid-file-name "/var/run/dhcp-server/dhcpd.pid";

ddns-update-style none;

option domain-name-servers 127.0.0.1;

allow booting;
allow bootp;

default-lease-time 1800;
max-lease-time 7200;
        shared-network eth1 {
    subnet 10.10.10.0 netmask 255.255.255.0 {
            option routers 10.10.10.1;
            option domain-name "nemo.lan";
            option domain-name-servers 10.10.10.1;
                option ntp-servers 10.10.10.1;
                default-lease-time 1800;
                max-lease-time 7200;
            pool {
                   next-server 10.10.10.1;
                   option tftp-server-name "10.10.10.1";
                   filename    "/netboot_setup/pxelinux.0";
                range 10.10.10.2 10.1apt-get install -y samba genisoimage wimtools cabextract0.10.254;
            }
        }
        group {
            option routers 10.10.10.1;
            option domain-name "nemo.lan";
            option domain-name-servers 10.10.10.1;
                option ntp-servers 10.10.10.1;
                default-lease-time 1800;
                max-lease-time 7200;
        }
}

3. tftpd 설정
vi /etc/init/tftpd-hpa.conf
# tftp-hpa - trivial ftp server

description    "tftp-hpa server"
author        "Chuck Short <zulcss@ubuntu.com>"

start on runlevel [2345]
stop on runlevel [!2345]

console output
expect fork
respawn

env PIDFILE="/var/run/tftpd-hpa.pid"
env DEFAULTS="/etc/default/tftpd-hpa"

script

    if [ -f ${DEFAULTS} ]; then
        . ${DEFAULTS}
    fi

    if [ ! -d "${TFTP_DIRECTORY}" ]; then
        echo "${TFTP_DIRECTORY} missing, aborting."
        exit 1
    fi

    exec /usr/sbin/in.tftpd --listen  --user ${TFTP_USERNAME} --address ${TFTP_ADDRESS} ${TFTP_OPTIONS} ${TFTP_DIRECTORY}
end script
root@ss:/var/

vi /etc/default/tftpd-hpa
# /etc/default/tftpd-hpa

TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/var/lib/tftpboot"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="--secure"

4. 웹 서버 및 inetd 설정
apt-get install apache2 inetutils-inetd

cat /etc/inetd.conf
# /etc/inetd.conf:  see inetd(8) for further informations.
#
# Internet superserver configuration database
#
#
# Lines starting with "#:LABEL:" or "#<off>#" should not
# be changed unless you know what you are doing!
#
# If you want to disable an entry so it isn't touched during
# package updates just comment it out with a single '#' character.
#
# Packages should modify this file by using update-inetd(8)
#
# <service_name> <sock_type> <proto> <flags> <user> <server_path> <args>
#
#:INTERNAL: Internal services
#discard        stream    tcp    nowait    root    internal
#discard        dgram    udp    wait    root    internal
#daytime        stream    tcp    nowait    root    internal
#time        stream    tcp    nowait    root    internal

#:STANDARD: These are standard services.

#:BSD: Shell, login, exec and talk are BSD protocols.

#:MAIL: Mail, news and uucp services.
#<off># smtp    stream    tcp    nowait    root    /usr/sbin/sendmail sendmail -Am -bs
#<off># submission    stream    tcp    nowait    root    /usr/sbin/sendmail sendmail -Am -bs
#<off># smtps    stream    tcp    nowait    root    /usr/sbin/sendmail sendmail -Am -bs

#:INFO: Info services

#:BOOT: TFTP service is provided primarily for booting.  Most sites
#       run this only on machines acting as "boot servers."

#:RPC: RPC based services

#:HAM-RADIO: amateur-radio services

#:OTHER: Other services
#<off># sane-port    stream    tcp    nowait    saned:saned    /usr/sbin/saned saned

#kerberos-adm    stream    tcp    nowait    root    /usr/sbin/tcpd /usr/lib/heimdal-servers/kadmind
#krb_prop    stream    tcp    nowait    root    /usr/sbin/tcpd /usr/sbin/hpropd
9571           stream  tcp     nowait  nobody /usr/sbin/tcpd /usr/sbin/ldminfod

5. 우분투 서버 iso 파일 다운로드 후 마운트
mount -o loop iso_download_file /mnt
cp -a /mnt/install/netboot/* /var/lib/tftpboot/
mkdir /var/www/html/ubuntu
cp -a /mnt/* /var/www/html/ubuntu/

vi /var/lib/tftpboot/pxelinux.cfg/default
label linux
 kernel ubuntu-installer/amd64/linux
 append ks=http://172.16.1.97/ks.cfg vga=normal initrd=ubuntu-installer/amd64/initrd.gz ramdisk_size=16432 root=/dev/rd/0 rw --

06 서비스 재 시작
/etc/init.d/apache2 restart
/etc/init.d/tftpd-hpa restart
/etc/init.d/isc-dhcp-server restart

iscsi 방식 pxe boot install

nas: 파일전송 방식(서버에 다운로드 작업 후 전송)
das: 블록 전송 방식(서버에 직접 접근 작업)

iscsi 프로토콜을 사용해 NAS를 DAS 처럼 사용 한다.
스토리지 장비에서 반틈을 das, 또 다른 반틈은 NAS를 사용할 때 iscsi 방식을 사용한다.

iPXE 부팅

필수 패키지 설치
apt-get -y install tftpd-hpa isc-dhcp-server build-essential samba liblzma-dev mkisofs unzip iscsitarget

syslinux 다운로드 및 설치
cd /usr/src
mkdir pxe
cd pxe
wget https://www.kernel.org/pub/linux/utils/boot/syslinux/6.xx/syslinux-6.03.tar.gz
tar -zxvf syslinux-6.03.tar.gz
cd syslinux-6.0.3
make #this will fail, it's ok
cp ./bios/core/pxelinux.0 /var/lib/tftpboot/
cp ./bios/com32/elflink/ldlinux/ldlinux.c32 /var/lib/tftpboot/
cp ./bios/com32/libutil/libutil.c32 /var/lib/tftpboot/
cp ./bios/com32/menu/menu.c32 /var/lib/tftpboot/
cp ./bios/memdisk/memdisk /var/lib/tftpboot/

dhcpd eth1 적용
auth eth1
iface eth1 inet static
address 192.168.69.1
netmask 255.255.255.0

인터페이스 활성화
ifup eth1

DHCP 구성 설정 파일 /etc/dhcp/dhpcd.conf 추가
cat /etc/dhcp/dhcpd.conf
# DHCP server is authoritative for all networks
authoritative;

# extra options
# RFC3442 routes
option rfc3442-classless-static-routes code 121 = array of integer 8;
# MS routes
option ms-classless-static-routes code 249 = array of integer 8;

pid-file-name "/var/run/dhcp-server/dhcpd.pid";

ddns-update-style none;
option domain-name-servers 127.0.0.1;

allow booting;
allow bootp;

default-lease-time 1800;
max-lease-time 7200;
        shared-network eth1 {
    subnet 10.10.10.0 netmask 255.255.255.0 {
            option routers 10.10.10.1;
            option domain-name "nemo.lan";
            option domain-name-servers 10.10.10.1;
                option ntp-servers 10.10.10.1;
                default-lease-time 1800;
                max-lease-time 7200;
            pool {
                   next-server 10.10.10.1;
                   option tftp-server-name "10.10.10.1";
                   filename    "pxelinux.0";
                range 10.10.10.2 10.10.10.254;
            }
        }
        group {
            option routers 10.10.10.1;
            option domain-name "nemo.lan";
            option domain-name-servers 10.10.10.1;
                option ntp-servers 10.10.10.1;
                default-lease-time 1800;
                max-lease-time 7200;
        }
}

dhcp 서비스 시작
/etc/init.d/isc-dhcp-server start

iPXE 설치
cd /usr/src
git clone git://git.ipxe.org/ipxe.git
cd ipxe/src
make
cp ./bin/undionly.kpxe /var/lib/tftpboot/

wimboot 다운로드
cd /usr/src
wget http://git.ipxe.org/releases/wimboot/wimboot-latest.zip
unzip wimboot-latest.zip
cp wimboot-2.5.1-signed/wimboot /var/lib/tftpboot/

iPXE 스크립트 생성
cd /var/lib/tftpboot
vi win7.ipxe

#!ipxe
    dhcp
    set keep-san 1
    sanhook iscsi:10.10.10.1::::iqn.2013-10.net.thebugshop:windows7
    set boot-url tftp://10.10.10.1
    initrd ${boot-url}/distros/windows/winpe4_amd64.iso
    kernel ${boot-url}/memdisk iso raw
    boot

디렉토리 생성
cd /var/lib/tftpboot
mkdir -p distros/windows
cd distros/windows

tftpboot 파일 수정
/etc/default/tftpd-hpa

cat /etc/default/tftpd-hpa

TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/var/lib/tftpboot"
TFTP_ADDRESS=":69"
TFTP_OPTIONS="--secure"

tftpd 시작
/etc/init.d/tftpd-hpa start

lkrn 다운로드
wget --no-check-certificate "https://rom-o-matic.eu/build.fcgi?BINARY=ipxe.lkrn&BINDIR=bin&REVISION=master&DEBUG=&EMBED.00script.ipxe=&general.h/PXE_STACK:=1&general.h/DOWNLOAD_PROTO_NFS:=1&general.h/SANBOOT_PROTO_ISCSI:=1&" -O /var/lib/tftpboot/ipxe.lkrn

pxelinux.cfg 구성
cd /var/lib/tftpboot
mkdir pxelinux.cfg
cd pxelinux.cfg
vi default

DEFAULT menu.c32

LABEL Windows 7 Install
    MENU LABEL Windows 7 Install
    KERNEL ipxe.lkrn
    INITRD win7.ipxe

타켓 컴퓨터 pxe 부팅 모드 진입

윈도우 7 빈 이미지 파일 생성
cd /var/lib/tftpboot
dd if=/dev/zero of=/var/lib/tftpboot/windows7.img bs=1M count=20000

iscsi 타켓 수정
vi /etc/default/iscsitarget

ISCSITARGET_ENABLE=true
ISCSITARGET_MAX_SLEEP=3


# ietd options
# See ietd(8) for details
ISCSITARGET_OPTIONS=""

ietd.conf 수정
vi /etc/iet/ietd.conf
Target iqn.2013-10.net.thebugshop:windows7
    IncomingUser
    OutgoingUser
    Lun 0 Path=/var/lib/tftpboot/windows7.img,Type=fileio
    Alias Windows7

서비스 시작
/etc/init.d/iscsitarget start

ADK 다운로드 설치
http://www.microsoft.com/en-US/download/details.aspx?id=39982

AIK 다운로드 설치
http://www.microsoft.com/en-us/download/details.aspx?id=5753

내 컴퓨터> 등록 정보> 고급 시스템 설정> 환경 변수> 시스템 변수> 경로> 편집
다음 내용 추가
;C:\Program Files (x86)\Windows Kits\8.1\Assessment and Deployment Kit\Windows Preinstallation Environment

배포 및 이미지 환경
cd \
copype amd64 C:\WinPE_amd64
cd WinPE_amd64
mkdir ISO
copy "c:\Program Files\Windows AIK\Tools\PETools\amd64\winpe.wim" c:\WinPE_amd64\ISO\
copy "C:\Program Files\Windows AIK\Tools\amd64\Imagex.exe" C:\Winpe_amd64\ISO\
MakeWinPEMedia /ISO C:\WinPE_amd64 C:\WinPE_amd64\winpe4_amd64.iso

winpe4_amd64.iso를 /var/lib/tftpboot/distros/windows/ 서버 복사(winscp)

pxe 부팅화면 확인

삼바 설정
mkdir -p /var/lib/tftpboot/windows/win7
mkdir /mnt/cdrom
mount -o loop win7.iso /mnt/cdrom
cp -R /mnt/cdrom/*

[global]
   workgroup = WORKGROUP
   server string = %h server (Samba, Ubuntu)
   dns proxy = no
   log file = /var/log/samba/log.%m
   max log size = 1000
   panic action = /usr/share/samba/panic-action %d
   server role = standalone server
   passdb backend = tdbsam
   obey pam restrictions = yes
   unix password sync = yes
   passwd program = /usr/bin/passwd %u
   passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
   pam password change = yes
   map to guest = bad user
   usershare allow guests = yes

[win7]
   path = /var/lib/tftpboot/windows/win7
   comment = Windows 7 Installation DVD
   valid users = "bugshop"
   writeable = no
   browseable = yes
   read only = yes

암호설정
useradd bugshop
smbpasswd -a bugshop

서비스 시작
service smbd start
service nmbd start

파일 생성
vi /var/lib/tftpboot/win7.iscsi
#!ipxe
dhcp set keep-san 1
sanboot iscsi:192.168.69.1::::iqn.2013-10.net.thebugshop:windows7
boot

vi /var/lib/tftpboot/pxelinux.cfg/default
DEFAULT menu.c32

LABEL Windows 7
    MENU LABEL Windows 7
    KERNEL ipxe.lkrn
    INITRD win7.iscsi


LABEL Windows 7 Install
    MENU LABEL Windows 7 Install
    KERNEL ipxe.lkrn
    INITRD win7.ipxe

윈도우 설치 시작

syslinux 사용 tftpboot windows7 pxe install

1. 유틸 다운로드
apt-get install isc-dhcp-server tftpd-hpa syslinux ntf-kernel-server initramfs-tools

vmliuz : 리눅스 커널을 컴파일한 바이너리 파일을 압축한 것으로 리눅스 부팅 시 이 파일의 압축을 해제하여 메모리 적재
initrd : 커널 모듈을 모아 놓은 이미지로 커널이 로딩되기 전에 메모리에 로딩된다.
pxelinux.0 : 네트워크 부트 로더로 리눅스의 grub나 lilo의 역할을 한다. (OS 상관없이 tftp 기본 디렉터리에 하나만 있으면 된다.)
menu.c32 : PXE 부팅 메뉴를 꾸밀 수 있게 해주는 파일



2. 필요파일 복사.

윈도우즈 커널
cp /usr/lib/syslinux/memdisk /var/lib/tftpboot/

syslinux 부팅 파일 복사
cp /usr/lib/syslinux/pxelinux.0 /var/lib//tftpboot/
cp /usr/lib//syslinux/menu.c32 /var/lib/tftpboot/

3. 부팅 TUI 메뉴 구성
DEFAULT menu.c32 : menu UI 파일 지정
timeout 100 : 자동 선택 시간

mkdir /var/lib/tftpboot/pxelinux.cfg
vi /var/lib/tftpboot/pxelinux.cfg/default

DEFAULT menu.c32
timeout 100

menu title ### OS Installer Boot Menu ###

LABEL
menu label --Windows-------------------------------------------------------
LABEL Windows7

        menu label Windows7
        kernel memdisk
        initrd Windows7/Windows7.iso
                         
        APPEND iso raw

4. 윈도우7 자동 설치 키트 다운로드
https://www.microsoft.com/ko-kr/download/details.aspx?id=5753

5. 윈도우 PE 부팅을 위한 저장소 등록
sudo add-apt-repository ppa:nilarimogard/webupd8

sudo apt-get update

sudo apt-get install wimtools

부팅 ios 이미지 형식 생성 패키지
sudo apt-get install genisoimage

cab 확장자 압축해제
sudo apt-get install cabextract

다운로드 파일 마운트
mount image_file.iso /mnt

부팅 이미지 제작
mkwinpeimg --iso --arch=amd64 --waik-dir=/mnt /var/lib/tftpboot/winpe.iso

umount /mnt

6. 삼바설정
path = /var/lib/tftpboot/Windows7/64bit
browseable = yes
writable = yes
guest ok = yes
read only = no

/etc/init.d/samba4 restart
/etc/init.d/smbd restart
/etc/init.d/nmbd restart


7. 윈도우 설치 명령어.
삼바 공유 파일 검색
net view
서버 이름 확인

net view \\서버이름
공유 디렉토리 확인

드라이버 할당
net use z: \\서버이름\\공유디렉토리

경로 이동
z:

설치 파일 이동후 설치
setup.exe

tftpboot windows 10 install

필수 패키지 설치
apt-get update
apt-get install -y samba genisoimage wimtools cabextract

mkisofs 링크
ln -s /usr/bin/genisoimage /usr/bin/mkisofs

디렉토리 생성
mkdir -p /mnt/waik
mkdir -p /var/lib/tftpboot/windows

다운로드
https://www.microsoft.com/en-us/download/confirmation.aspx?id=5753
wget https://download.microsoft.com/download/8/E/9/8E9BBC64-E6F8-457C-9B8D-F6C9A16E6D6A/KB3AIK_EN.iso

다운로드 파일 마운트
mount KB3AIK_EN.iso /mnt/waik

부팅 이미지 생성
mkwinpeimg --iso --arch=amd64 --waik-dir=/mnt/waik /var/lib/tftpboot/winpe.iso

마운트 해제
umount /mnt/waik

삼바 설정
vi /etc/samba/smb.conf
[global]
  workgroup = WORKGROUP
  map to guest = bad user
  usershare allow guests = yes

[windows]
  browsable = true
  read only = yes
  guest ok = yes
  path = /var/lib/tftpboot/windows

공유 서비스 시작
systemctl restart smbd

12.04 일때
/etc/init.d/samba4 restart
/etc/init.d/smbd restart
/etc/init.d/nmbd restart

윈도우 10 마운트
mount <WINDOWS_ISO> /var/lib/tftpboot/windows

램디스크 심볼 생성
ln -s /usr/lib/syslinux/memdisk /var/lib/tftpboot/

PXE 부팅 메뉴 생성
vi /var/lib/tftpboot/pxelinux.cfg/default
LABEL windows10
MENU LABEL Windows 10
KERNEL /memdisk
INITRD /winpe.iso
APPEND iso raw

윈도우 설치
PXE 부팅
DHCP 할당 IP 대기
마운트
net use Z:\\IPADDRESS\windows

실행
z:\setup.exe

2019/01/21

UEFI, BIOS MBR 윈도우 10 설치 요약

UEFI 설정
- BIOS 호환 모드(CSM 또는 BIOS) 부팅시 GParted 파일 관리자만 있으면 됨.

ISO 구성시 UEFI 구성 확인
- winusb 또는 woeusb로 운영체제 설치를 만들 경우 자동으로 생성.

UEFI 펌웨어 부팅 USB 생성 방법.

BIOS MBR 파티션 구성
1. USB 드라이버 GPT 파티션 테이블 생성.
GParted 사용해 usb 파티션 테이블 msdos를 ntfs 포맷 후 부트 플래그 추가

2. GParted 실행 후 USB 파티션 오른쪽 마우스 클릭 정보 선택 UUID 복사

3. 윈도우 ISO 파일을 마운트 모든 파일 USB 복사

4. usb 이동 후 boot 디렉토리 대문자 일 경우 소문자로 변경

5. usb 부트로더 grup 설치
sudo grub-install --target=i386-pc --boot-directory="/<USB_mount_folder>/boot" /dev/sdX

6. grub 구성 파일 생성
cd usb/boot/grub

vi grub.conf
echo "If you see this, you have successfully booted from USB :)"
insmod ntfs
insmod search_fs_uuid
search --no-floppy --fs-uuid <UUID_복사한 값 붙여넣기> --set root
ntldr /bootmgr
boot

7. USB 마운트 해제

8. USB 부팅 확인

UEFI GPT 파티션 구성
윈도우에서 GPT 파티션 지원 ISO 확인
자세한 내용 https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-8.1-and-8/hh824898(v=win.10)

1. Gparted 사용 USB GPT 파티션 테이블 생성

2. 주 파티션 생성 후 fat32 포맷

3. 윈도우 ISO 파일 내용 USB 복사

4. USB 부트로더 수정
efi/boot 이동
bootx64.efi(bootia32.efi) 파일 존재 여부 확인

4.1 bootxxx.efi 없을 경우
sources/install.wim 7z 프로그램을 사용 파일 열기
./1/Windows/Boot/EFI 이동후 bootmgfw.efi 이름 bootxxx.efi 변경
efi/boot 복사

4.2 윈도우 7 USB 일 경우
boot/efi/microsoft 에 efi 폴더 복사

5. USB 드라이브 마운트 해제, BIOS에서 EFI 로더 선택

2019/01/20

우분투 네트워크 명령어 패키지

net-tools

sudo apt-get install net-tools

ubuntu 18.04 cuda9.2 install

nvidia 확인
lspci | grep NVIDIA

nvidia 드라이버 설치
https://nautilusleenssi.blogspot.com/2019/01/ubuntu-1804-drvier-nvidia.html

현대 드라이버 설치 버전 nvidia-390 사용.
sudo apt-get install gcc-6 g++-6 linux-headers-$(uname -r) -y

CUDA Toolkit 설치
다운로드
wget -O cuda_9.2.88_396.26_linux.run -c https://developer.nvidia.com/compute/cuda/9.2/Prod/local_installers/cuda_9.2.88_396.26_linux

실행
sudo chmod +x cuda_9.2.88_396.26_linux.run
sudo ./cuda_9.2.88_396.26_linux.run --verbose --silent --toolkit --override

설치 성공 메시지 확인
===========
= Summary =
===========

Toolkit: Installed in /usr/local/cuda-9.2
Samples: Not Selected

Please make sure that
 - PATH includes /usr/local/cuda-9.2/bin
 - LD_LIBRARY_PATH includes /usr/local/cuda-9.2/lib64, or, add /usr/local/cuda-9.2/lib64 to /etc/ld.so.conf and run ldconfig as root

bashrc 설정
vi ~/.bashrc
export PATH="$PATH:/usr/local/cuda-9.2/bin"

동적 라이브러리 경로 지정
sudo echo "/usr/local/cuda-9.2/lib64" >> /etc/ld.so.conf
또는
vi /etc/ld.so.conf.d/cuda9-2.conf
/usr/local/cuda-9.2/lib64
sudo ldconfig

NVIDIA 패치 적용
wget https://developer.nvidia.com/compute/cuda/9.2/Prod/patches/1/cuda_9.2.88.1_linux
sudo chmod +x cuda_9.2.88.1_linux
sudo ./cuda_9.2.88.1_linux --silent --accept-eula

패치 설정 메시지 확인
Welcome to the CUDA Patcher.
Installation complete!
Installation directory: /usr/local/cuda-9.2

gcc 버전 설정
sudo ln -s /usr/bin/gcc-6 /usr/local/cuda-9.2/bin/gcc
sudo ln -s /usr/bin/g++-6 /usr/local/cuda-9.2/bin/g++

ubuntu 18.04 drvier 자동 검색 설치(NVIDIA)

1. 자동 설치 
드라이버 검색 
ubuntu-drivers devices

출력 정보 확인
== /sys/devices/pci0000:00/0000:00:03.1/0000:20:00.0 ==
modalias : pci:v000010DEd00001B80sv00001458sd00003702bc03sc00i00
vendor   : NVIDIA Corporation
model    : GP104 [GeForce GTX 1080]
driver   : nvidia-396 - third-party non-free
driver   : nvidia-driver-390 - distro non-free recommended
driver   : xserver-xorg-video-nouveau - distro free builtin

드라이버 설치
sudo ubuntu-drivers autoinstall

특정 버전 설치 할 경우
sudo apt install nvidia-390

2. 수동 설치
설치된 드라이버 검색

dpkg --get-selections | grep nvidia

기존 설치 드라이버 삭제
sudo apt-get purge nvidia*

최신 드라이버 설치 파일 다운로드
https://www.nvidia.com/Download/index.aspx

  • 제품 유형 : GeForce
  • 제품 시리즈 : GeForce 10 시리즈
  • 제품 GeForce GTX 1080
  • 운영 체제 : Linux 64 비트
  • 언어 : 영어

설치
sudo sh NVIDIA-Linux-x86_64-390.48.run

지원하는 카드 목록 확인.
NVIDIA TITAN 시리즈

Geforce MX 100 시리즈(노트북)

Geforce 10 시리즈
현재 사용하는 건 geforce gtx 1070

reboot

설치 확인
nvidia-smi

UEFI 설정
보안부팅 리눅스 변경 또는 사용 금지

Nouveau 비 활성화 전 확인 사항(GUI 모들 설정 현 드라이버 확인)  system settings > details
sudo bash -c "echo blacklist nouveau > /etc/modprobe.d/blacklist-nvidia-nouveau.conf"
sudo bash -c "echo options nouveau modeset=0 >> /etc/modprobe.d/blacklist-nvidia-nouveau.conf"

모듈 확인
cat /etc/modprobe.d/blacklist-nvidia-nouveau.conf

커널 initramfs 생성
sudo update-initramfs -u

재 부팅
reboot

GUI 모드 설정 방법(현재 드라이버 확인 방법.)
system settings > details

변경.
softare & updates 또는 소프트웨어 & 업데이트
추가 드라이버 선택
NVIDI 선택

드라이버 업데이트 금지
sudo apt-mark hold nvidia-390

업데이트 금지 해제
sudo apt-mark unhold nvidia-390

wget 사용법

URL 지정 다운로드
wget http://releases.ubuntu.com/18.04/ubuntu-18.04-desktop-amd64.iso

다수의 URL 지정 다운로드
wget <url_1> <url_2>

ftp 다운로드
wget ftp://ftp.example.com/ubuntu/ubuntu-18.04-desktop-amd64.iso

ftp 계정 및 패스워드 입력 다운로드
wget --ftp-user=booleanworld --ftp-password=passw0rd <ftp_url>

사용자 사용할 파일 이름 변경 다운로드
wget <url> -O Ubuntu.iso

사용자 디렉토리 지정 후 파일 다운로드
wget <url> -O /media/sdb1/Software/Ubuntu.iso

사용자 디렉토리 생성 후 다운로드
wget <url> -P /media/sdb1/Software

중단된 다운로드 시작
wget -c <url>

중단된 사용자 지정 파일 다운로드
wget -c <url> -O <path_to_downloaded_file>

다운로드 속도 조절
wget <url> --limit-rate=512k

백그라운드 파일 다운로드
wget -b <url>
tail -f wget-log

다운로드 확인 파일명.
wget-log, wget-log.1

실시간 파일 다운로드 확인
tail -f wget-log

인터넷 속도 문제(gwt 20회 접속)
wget -t inf --waitretry=3 --timeout=10 --retry-connrefused <url>

-t inf 스위치 : 문제 발생시 다운로드 완료할 때 까지 무한반복.
--waitretry 스위치 : 재시도 지연 3초
--timeout 스위치 : 네트워크 시간 초가 10 초 설정
--retry-connrefused 스위치 : 서버가 동작 않을때 "연결 거부 됨" 오류 발생, 연결 거부 오류가 발생시 다운로드 재시도.

재귀적 파일 다운로드.
wget 동작 방법 :
- 초기 파일 다운로드 저정 후 링크 검색.
- 각 랑크 다운로드 저장 후 링크 추출
- 기본 값으로 5개 링크 추출

페이지 반복적 다운로드
wget -r https://en.wikipedia.org/

-l 플래그 사용 재귀 호출 수 지정 7
wget -r -l 7 https://en.wikipedia.org/

-A(허용) 옵션을 사용 특정 유형의 파일 다운로드
wget -r https://en.wikipedia.org/ -A png,jpg,jpeg

-R(거부) 옵션을 사용 특정 유형의 파일 다운로드 금지
wget -r https://en.wikipedia.org/ -R pdf

-k 링크 변환기능, 웹 페이지 링크를 로컬 링크로 변환
wget -k -r https://en.wikipedia.org/

wget 사이트 차단될 경우, 사용자 문자열 지정을 통해 다운로드
wget <url> -U "<user-agent-string>"

Mac 사용자 문자열 지정 다운로드
wget <url> -U "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36"

웹 개발자 http 헤더 테스트
wget <url> --header "X-Foo: 123"

보호된 파일 다운로드
크롬
https://chrome.google.com/webstore/detail/curlwget/jmocjfidanebdlinpbcdgcmgdifblncg?hl=en

filrefox
https://addons.mozilla.org/en-US/firefox/addon/cliget/

웹 사이트 링크 깨짐 해결.
wget --spider -r https://example.com/

웹 사이트 링크 깨짐 해결 로그 설정.
wget --spider -r https://example.com -o wget.log

301 리다디렉션 검색.
grep -B 301 wget.log

ubuntu 18.04 desktop download

다운로드 
wget http://releases.ubuntu.com/18.04/ubuntu-18.04.1-desktop-amd64.iso

무결성 확인

wget http://releases.ubuntu.com/18.04/SHA256SUMS


체크 
sha256sum ubuntu-18.04.1-desktop-amd64.iso

5748706937539418ee5707bd538c4f5eabae485d17aa49fb13ce2c9b70532433  ubuntu-18.04.1-desktop-amd64.iso

확인 
cat SHA256SUMS
5748706937539418ee5707bd538c4f5eabae485d17aa49fb13ce2c9b70532433 *ubuntu-18.04.1-desktop-amd64.iso
7b37dfcd082726303528e47c82f88f29c1dc9232f8fd39120d13749ae83cc463 *ubuntu-18.04.1.0-live-server-amd64.iso