Original posting

https://gist.github.com/bramtechs/50d724a33d37278d7ca003c6119c8fea

 

Upgrade Debian 9, (current WSL) to Debian 12 (bookworm testing)

Upgrade Debian 9, (current WSL) to Debian 12 (bookworm testing) - upgrade-debian-wsl.md

gist.github.com

 

Just copying contenst for backup. 

  1. Install and open Debian on WSL (if not already)
wsl --install -d debian
wsl -d debian
  1. Go into root
sudo -s
  1. Upgrade Debian 9 to 10
apt update -y && \
apt upgrade -y && \
echo "deb http://deb.debian.org/debian/ buster main
deb http://deb.debian.org/debian/ buster-updates main
deb http://security.debian.org/debian-security buster/updates main" > /etc/apt/sources.list && \
apt update -y && \
apt upgrade -y && \
apt dist-upgrade -y
  1. Upgrade Debian 10 to 11
echo "deb http://deb.debian.org/debian/ bullseye main
deb http://deb.debian.org/debian/ bullseye-updates main" > /etc/apt/sources.list && \
apt update -y && \
apt upgrade -y && \
apt dist-upgrade -y
  1. Debian 11 to 12
echo "deb http://deb.debian.org/debian/ bookworm main
deb http://deb.debian.org/debian/ bookworm-updates main" > /etc/apt/sources.list && \
apt update -y && \
apt upgrade -y && \
apt dist-upgrade -y && \
apt autoremove -y && \
exit

helm 을 설치하기 위해서는 일반적으로 msi 라던지 설치 패키지를 다운받아서 설치할 수 없습니다. 

helm 의 공식 안내페이지(https://helm.sh/docs/intro/install/) 에서는 choco 패키지 관리자나 scoop 패키지 관리자를 이용하여 설치하라고 설명합니다. 

 

choco 는 Chocolatey 라는 패키지 관리 소프트웨어입니다. 이것 또한 설치 방법(https://docs.chocolatey.org/en-us/choco/setup)이 일반적이지 않는데, 파워쉘 스크립트를 이용해야합니다. 하지만 파워쉘 스크립트가 중간에 오류가 나서 제대로 설치가 되지 않고, 익숙하지 않아 msi 버전(https://github.com/chocolatey/choco/releases)으로 설치하였습니다. 

 

choco 를 설치한뒤에는 간단하게 아래 명령어로 설치가 가능합니다. 

choco install kubernetes-helm

 

 

 

 

 

C:\Users\test>choco install kubernetes-helm
Chocolatey v2.2.2
Chocolatey detected you are not running from an elevated command shell
 (cmd/powershell).
 ....
 ....
 Extracting C:\Users\hgchoi\AppData\Local\Temp\chocolatey\kubernetes-helm\3.13.1\helm-v3.13.1-windows-amd64.zip to C:\ProgramData\chocolatey\lib\kubernetes-helm\tools...
C:\ProgramData\chocolatey\lib\kubernetes-helm\tools
 ShimGen has successfully created a shim for helm.exe
 The install of kubernetes-helm was successful.
  Software installed to 'C:\ProgramData\chocolatey\lib\kubernetes-helm\tools'

Chocolatey installed 1/1 packages.
 See the log for details (C:\ProgramData\chocolatey\logs\chocolatey.log).

C:\Users\test>helm
The Kubernetes package manager

Common actions for Helm:

- helm search:    search for charts
- helm pull:      download a chart to your local directory to view
- helm install:   upload the chart to Kubernetes
- helm list:      list releases of charts
....
....
Use "helm [command] --help" for more information about a command.

C:\Users\test>

...

미국에서 드론을 시작하려면 FAA TRUST 시험을 먼저 시작하세요. 

다른 여러 규정이나 정보를 보는것 보다 FAA TRUST 시험을 치는것이 좋습니다.

왜냐하면 기본적인 정보를 시험(퀴즈) 시작전에 모두 훑어볼수 있기 때문입니다. (TRUST 는 필수이므로 어짜피 공부해야 합니다.)

 

TRUST 는 레슨으로부터 시작합니다. 32장의 간단한 장표들로 구성되어 있습니다. 운전면허증 시험보다 훨씬 쉽습니다.  

* 항공 관련 갅단한 규정들

* 앱이나 각종 서비스 설명

첫번째  퀴즈 7문항. 약 10개 장표의 레슨이 지난뒤에 시작합니다. 

* 개인의 책임

* 준비사항등

두번째 퀴즈 6문항

* Community based organizations 

* Visual Line of Sight 규정

세번째 퀴즈 5문항

* 자신의 드론 스펙, 사용법 이해하기

네번째 퀴즈 5문항

 

모든 퀴즈는 맞추어야 하며, 틀리면 다시 시도해 볼 수 있습니다. 시험을  빠르게 치는 사람은 20~30분 이내에 될 것 같고, 저는 이런저런 규정 찾으면서, 포스팅에 글을 쓰면서 대충 40분 정도 걸렸습니다. 

 

 

 

이 내용은 미국 지역에 대한 드론 규정에 대해서 설명하고 있습니다. 

이 내용은 개인적으로 조사한 내용이며 일부 내용에 오류가 있을 수도 있습니다. 

이 페이지에서 명명한 드론은 UAS(Unmanned Aircraft Systems)를 지칭하는 이름 사용되었습니다. 

 

규정 이해하기

필수 사항

* 자기 드론이 어떤 규정에 포함되는지 이해해야 합니다. 

 

취미용 드론

* 반드시 FAA TRUST 인증을 받아야 합니다. FAA TRUST 인증은 만료가 없는 간단한 시험으로써 드론을 운여하기 위한 최소한의 지식을 갖고 있는지 확인하기 위함입니다. https://www.faa.gov/uas/recreational_flyers/knowledge_test_updates

* 취미용 드론은 0.55LB (250g) 이하의 소형 드론과 그 이상부터 55LB 이하의 드론으로 나눌수 있는데, 0.55LB 이상의 드론은 모두 FAA 에 등록을 해야 합니다. (약 5달러).  https://www.faa.gov/uas/getting_started/register_drone

* FAA에 등록된 드론은 반드시 RID(Remote ID) 를 부착해야합니다. (2023년 9월 16일부터). https://www.faa.gov/uas/getting_started/remote_id

* RID 는 표준 모듈(약 $100 ~ $300, 10 ~ 30g)을 따로 부착하는 방식과, 드론 자체적으로 RID 기능을 포함하는 방식으로 나뉩니다. 드론에서 RID가 지원하는 장비는 다음 링크에서 확인 할 수 있습니다. https://uasdoc.faa.gov/listDocs

 

상업적 드론 - 추후 상업용으로 드론을 사용하게 될 경우 이 항목을 업데이트 하겠습니다. 

* Part 107 을 패스 해야합니다. Part 107 은 상업적 목적으로 드론을 운용할 경우 필요한 여러가지 규정, 특히 항공규정(지도보는법)에 중점을 둔 시험입니다. 시험에는 대충 $160 ~ $200 정도의 비용이 소요됩니다. 

* 모든 상업의 목적으로 하는 드론은 반드시 Part 107 자격증을 가지고 있어야 합니다. (55파운드 이하 모든 드론 대상)

 

드론 운용전 체크해야할 사항.

드론을 운용하기 전에는 해당 지역이 드론을 띄울수 있는 지역인지 알아봐야 합니다. 해당 정보는 몇가지 유명한 Application 혹은 웹사이트를 통해서 알 수 있습니다. 

자신이 드론을 운용할 지역이 Controlled Airspace 이라면 반드시 FAA 에서 지정한 승인을 받아야 합니다.

LAANC - 모든 드론 운용 승인을 커버하지 않습니다. 만일 LAANC에서 승인을 할 수 없는 지역은 DroneZone 에서 승인을 받아야 합니다. 

 

이상 규정에 대해서 얘기해봤습니다. 

이걸 열심히 조사한 이유는 규정을 지키지 않을 경우 최고 $27,500 의 처벌과, $250,000 의 벌금을 받을 수 있기 때문입니다. 새로 구매한 드론이 DJI Mini 3 Pro 인데 위에서 언급한 250g 의 규정에 자유로운 모델입니다. 그런데 추가 베터리를 구매하려고 했더니 고용량 배터리가 눈에 띄어서 어떤 규정을 따라야 하는지 살펴봤습니다.

* DJI Mini 제품은 250g 규정 이하이므로 FAA 에 등록할 필요 없습니다. 

* 만일 고용량 배터리를 사용하거나 드론에 추가 부착물이 있다면 FAA에 등록해야합니다.

* DJI 제품은 대부분 Remote ID 를 자체 내장하고 있기 때문에 추가 모듈을 구매할 필요가 없습니다. (구형 제외)

 

내일 배송되는 드론위해 지금 규정을 익히고 TRUST 자격증을 따는중입니다. 

ggil@RAZ-188:~$ ssh
-bash: ssh: command not found

When you fresh install Debian on WSL, you need to install essential packages. 

 

1. Update the Package Manager

ggil@RAZ-188:~$ sudo apt-get update

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.

[sudo] password for ggil:
Get:1 http://security.debian.org/debian-security stretch/updates InRelease [53.0 kB]
Ign:2 http://deb.debian.org/debian stretch InRelease
Get:3 http://deb.debian.org/debian stretch-updates InRelease [93.6 kB]
Get:4 http://deb.debian.org/debian stretch Release [118 kB]
Get:5 http://deb.debian.org/debian stretch Release.gpg [3,177 B]
Get:6 http://security.debian.org/debian-security stretch/updates/main amd64 Packages [778 kB]
Get:7 http://deb.debian.org/debian stretch/main amd64 Packages [7,080 kB]
Get:8 http://security.debian.org/debian-security stretch/updates/main Translation-en [365 kB]
Get:9 http://deb.debian.org/debian stretch/main Translation-en [5,377 kB]
Fetched 13.9 MB in 2s (5,337 kB/s)
Reading package lists... Done
ggil@RAZ-188:~$​

 

2. Install SSH Client Service

 

ggil@RAZ-188:~$ sudo apt-get install openssh-client
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
  krb5-locales libedit2 libgssapi-krb5-2 libk5crypto3 libkeyutils1 libkrb5-3 libkrb5support0 libx11-6 libx11-data
  libxau6 libxcb1 libxdmcp6 libxext6 libxmuu1 xauth
Suggested packages:
  krb5-doc krb5-user keychain libpam-ssh monkeysphere ssh-askpass
The following NEW packages will be installed:
  krb5-locales libedit2 libgssapi-krb5-2 libk5crypto3 libkeyutils1 libkrb5-3 libkrb5support0 libx11-6 libx11-data
  libxau6 libxcb1 libxdmcp6 libxext6 libxmuu1 openssh-client xauth
0 upgraded, 16 newly installed, 0 to remove and 56 not upgraded.
Need to get 2,954 kB of archives.
After this operation, 10.7 MB of additional disk space will be used.
Do you want to continue? [Y/n] y
Get:1 http://security.debian.org/debian-security stretch/updates/main amd64 krb5-locales all 1.15-1+deb9u3 [94.1 kB]
Get:2 http://deb.debian.org/debian stretch/main amd64 libxau6 amd64 1:1.0.8-1 [20.7 kB]
....
....
Setting up openssh-client (1:7.4p1-10+deb9u7) ...
Processing triggers for libc-bin (2.24-11+deb9u3) ...
ldconfig: /usr/lib/wsl/lib/libcuda.so.1 is not a symbolic link

ggil@RAZ-188:~$

 

2.1 Setup key store. If you don't have ".ssh" folder at account home folder, your SSH key store is not configured. 

ggil@RAZ-188:~$ ls -l ~/.ssh
ls: cannot access '/home/ggil/.ssh': No such file or directory
ggil@RAZ-188:~$

2.2 Create folder and set permission

ggil@RAZ-188:~$ mkdir -p ~/.ssh
ggil@RAZ-188:~$ chmod -R go= ~/.ssh
ggil@RAZ-188:~$ ls -al
total 24
drwxr-xr-x 3 ggil ggil 4096 Jun 16 23:01 .
drwxr-xr-x 3 root root 4096 Jun 16 22:41 ..
-rw-r--r-- 1 ggil ggil  220 Jun 16 22:41 .bash_logout
-rw-r--r-- 1 ggil ggil 3526 Jun 16 22:41 .bashrc
-rw-r--r-- 1 ggil ggil  675 Jun 16 22:41 .profile
drwx------ 2 ggil ggil 4096 Jun 16 23:01 .ssh
ggil@RAZ-188:~$

 

3. git installation

ggil@RAZ-188:~$ sudo apt-get install git
[sudo] password for ggil:
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
  ca-certificates git-man less libcurl3-gnutls liberror-perl libexpat1 libgdbm3 libldap-2.4-2 libldap-common
  libnghttp2-14 libperl5.24 librtmp1 libsasl2-2 libsasl2-modules libsasl2-modules-db libssh2-1 libssl1.1 openssl patch
  perl perl-base perl-modules-5.24 rename rsync
Suggested packages:
  gettext-base git-daemon-run | git-daemon-sysvinit git-doc git-el git-email git-gui gitk gitweb git-arch git-cvs
  git-mediawiki git-svn libsasl2-modules-gssapi-mit | libsasl2-modules-gssapi-heimdal libsasl2-modules-ldap
  libsasl2-modules-otp libsasl2-modules-sql ed diffutils-doc perl-doc libterm-readline-gnu-perl
  | libterm-readline-perl-perl make openssh-server
The following NEW packages will be installed:
  ca-certificates git git-man less libcurl3-gnutls liberror-perl libexpat1 libgdbm3 libldap-2.4-2 libldap-common
  libnghttp2-14 libperl5.24 librtmp1 libsasl2-2 libsasl2-modules libsasl2-modules-db libssh2-1 libssl1.1 openssl patch
  perl perl-modules-5.24 rename rsync
The following packages will be upgraded:
  perl-base
1 upgraded, 24 newly installed, 0 to remove and 55 not upgraded.
Need to get 17.6 MB of archives.
After this operation, 80.9 MB of additional disk space will be used.
Do you want to continue? [Y/n] y
Get:1 http://deb.debian.org/debian stretch/main amd64 perl-base amd64 5.24.1-3+deb9u7 [1,346 kB]
....
....
Processing triggers for ca-certificates (20200601~deb9u2) ...
Updating certificates in /etc/ssl/certs...
0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.
ggil@RAZ-188:~$ git --version
git version 2.11.0
ggil@RAZ-188:~$

 

4. wget installation

ggil@RAZ-188:~$ sudo apt-get install wget
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages will be upgraded:
  wget
1 upgraded, 0 newly installed, 0 to remove and 54 not upgraded.
Need to get 800 kB of archives.
After this operation, 0 B of additional disk space will be used.
Get:1 http://deb.debian.org/debian stretch/main amd64 wget amd64 1.18-5+deb9u3 [800 kB]
Fetched 800 kB in 0s (5,564 kB/s)
(Reading database ... 13295 files and directories currently installed.)
Preparing to unpack .../wget_1.18-5+deb9u3_amd64.deb ...
Unpacking wget (1.18-5+deb9u3) over (1.18-5+deb9u2) ...
Setting up wget (1.18-5+deb9u3) ...
ggil@RAZ-188:~$ wget --version
GNU Wget 1.18 built on linux-gnu.
....
....
Originally written by Hrvoje Niksic <hniksic@xemacs.org>.
Please send bug reports and questions to <bug-wget@gnu.org>.
ggil@RAZ-188:~$

 

5. Python installation

5.1 Before install Python, it is required to install necessary packages or dependencies. 

ggil@RAZ-188:~$ sudo apt-get install wget build-essential libreadline-gplv2-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev libffi-dev zlib1g-dev
Reading package lists... Done
Building dependency tree
....
....
The following packages will be upgraded:
  libc6 libsqlite3-0 zlib1g
3 upgraded, 148 newly installed, 0 to remove and 51 not upgraded.
Need to get 103 MB of archives.
After this operation, 463 MB of additional disk space will be used.
Do you want to continue? [Y/n] y
Get:1 http://deb.debian.org/debian stretch/main amd64 libc6 amd64 2.24-11+deb9u4 [2,694 kB]
....
....
Processing triggers for sgml-base (1.29) ...
Processing triggers for systemd (232-25+deb9u4) ...
ggil@RAZ-188:~$

 

5.2 Python 3.10 requires openssl 1.1.1 or newer. Following instruction is for upgrading openssl.

  1. Fetch the tarball: wget https://www.openssl.org/source/openssl-1.1.1o.tar.gz  
    1. When you experience certificate error for openssl.org, please refer following guide. (https://blog.puiup.net/2021/11/solved-issued-certificate-has-expired.html)
  2. Unpack the tarball with tar -zxf openssl-1.1.1o.tar.gz && cd openssl-1.1.1o
  3. Issue the command ./config.
  4. Issue the command make (You may need to run sudo apt install make gcc before running this command successfully).
  5. Run make test to check for possible errors.
  6. Backup current openssl binary: sudo mv /usr/bin/openssl ~/tmp
  7. Issue the command sudo make install.
  8. Create symbolic link from newly install binary to the default location:
    sudo ln -s /usr/local/bin/openssl /usr/bin/openssl
    
  9. Run the command sudo ldconfig to update symlinks and rebuild the library cache.

 

5.3 Download Python release, unzip

ggil@RAZ-188:~$ wget https://www.python.org/ftp/python/3.10.5/Python-3.10.5.tgz
--2022-06-16 23:37:49--  https://www.python.org/ftp/python/3.10.5/Python-3.10.5.tgz
Resolving www.python.org (www.python.org)... 146.75.92.223, 2a04:4e42:87::223
Connecting to www.python.org (www.python.org)|146.75.92.223|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 25628472 (24M) [application/octet-stream]
Saving to: ‘Python-3.10.5.tgz’

Python-3.10.5.tgz             100%[=================================================>]  24.44M  6.87MB/s    in 3.6s

2022-06-16 23:37:52 (6.85 MB/s) - ‘Python-3.10.5.tgz’ saved [25628472/25628472]

ggil@RAZ-188:~$ tar xzf Python-3.10.5.tgz
ggil@RAZ-188:~$ cd Python-3.10.5
ggil@RAZ-188:~/Python-3.10.5$

5.4 Build and install

ggil@RAZ-188:~/Python-3.10.5$ ./configure --enable-optimizations
checking build system type... x86_64-pc-linux-gnu
....
....
config.status: creating pyconfig.h
creating Modules/Setup.local
creating Makefile
ggil@RAZ-188:~/Python-3.10.5$
ggil@RAZ-188:~/Python-3.10.5$ make -j 2
Running code to generate profile data (this can take a while):
# First, we need to create a clean build with profile generation
# enabled.
make profile-gen-stamp
make[1]: Entering directory '/home/ggil/Python-3.10.5'
....
....
renaming build/scripts-3.10/2to3 to build/scripts-3.10/2to3-3.10
make[1]: Leaving directory '/home/ggil/Python-3.10.5'
ggil@RAZ-188:~/Python-3.10.5$ 
ggil@RAZ-188:~/Python-3.10.5$ sudo make install
[sudo] password for ggil:
if test "no-framework" = "no-framework" ; then \
....
....
Installing collected packages: setuptools, pip
Successfully installed pip-22.0.4 setuptools-58.1.0
WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv
ggil@RAZ-188:~/Python-3.10.5$
ggil@RAZ-188:~/Python-3.10.5$ python3 --version
Python 3.10.5
ggil@RAZ-188:~/Python-3.10.5$

5.5 install pip

ggil@RAZ-188:~/Python-3.10.5$ sudo apt-get install python3-pip
Reading package lists... Done
Building dependency tree
Reading state information... Done
....
....
After this operation, 102 MB of additional disk space will be used.
Do you want to continue? [Y/n] y
Get:1 http://security.debian.org/debian-security stretch/updates/main amd64 libpython3.5-minimal amd64 3.5.3-1+deb9u5 [574 kB]
....
....
Processing triggers for systemd (232-25+deb9u4) ...
ggil@RAZ-188:~/Python-3.10.5$
ggil@RAZ-188:~/Python-3.10.5$ pip3 --version
pip 22.0.4 from /usr/local/lib/python3.10/site-packages/pip (python 3.10)
ggil@RAZ-188:~/Python-3.10.5$

5.6 install pipenv

ggil@DESKTOP-6OL58HT:~/$ sudo pip3 install pipenv
Collecting pipenv
  Downloading pipenv-2022.11.30-py3-none-any.whl (2.9 MB)
  ....
Installing collected packages: distlib, virtualenv-clone, platformdirs, filelock, certifi, virtualenv, pipenv
Successfully installed certifi-2022.9.24 distlib-0.3.6 filelock-3.8.0 pipenv-2022.11.30 platformdirs-2.5.4 virtualenv-20.17.0 virtualenv-clone-0.5.7
WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv

[notice] A new release of pip available: 22.2.2 -> 22.3.1
[notice] To update, run: pip3 install --upgrade pip
ggil@DESKTOP-6OL58HT:~/$ pipenv --version
pipenv, version 2022.11.30
ggil@DESKTOP-6OL58HT:~/$

 

1. Enable Windows Hypervisor Platform

If you didn't enable this feature, you may see "No action was taken as a system reboot is required." message when you install WSL.

2. Install WSL with Administrative Powershell

wsl --install --d debian

 

2.1 Checking list of WSL distro

wsl --list --online 

 

3. Create account for distro plaform. New windows may show "Installing, this may take a few minutes..." awhile, just type Enter. So you can create new UNIX account. 

 

아래 에러가 나오는 경우

$ aws --version
dyld[46479]: Library not loaded: @executable_path/../.Python
  Referenced from: /usr/local/aws/bin/python
  Reason: tried: '/usr/local/aws/bin/../.Python' (no such file), '/usr/local/lib/.Python' (no such file), '/usr/lib/.Python' (no such file)
Abort trap: 6
$

 

원인은 구버전 파이썬으로 aws cli를 설치하고 파이선을 업그레이드를 하면 이런 현상이 발생합니다. 

이럴 경우에는 aws cli 를 다시 설치하고 링크를 갱신하면 된다고 합니다. 

$ aws --version
dyld[46479]: Library not loaded: @executable_path/../.Python
  Referenced from: /usr/local/aws/bin/python
  Reason: tried: '/usr/local/aws/bin/../.Python' (no such file), '/usr/local/lib/.Python' (no such file), '/usr/lib/.Python' (no such file)
Abort trap: 6

$ brew uninstall awscli
Uninstalling /usr/local/Cellar/awscli/2.6.4... (12,629 files, 101.5MB)

$ brew install awscli
==> Downloading https://ghcr.io/v2/homebrew/core/awscli/manifests/2.6.4
...
==> Summary
🍺  /usr/local/Cellar/awscli/2.6.4: 12,629 files, 101.5MB
==> Running `brew cleanup awscli`...
Disable this behaviour by setting HOMEBREW_NO_INSTALL_CLEANUP.
Hide these hints with HOMEBREW_NO_ENV_HINTS (see `man brew`).

$ brew link --overwrite awscli
Linking /usr/local/Cellar/awscli/2.6.4... 6 symlinks created.

$ aws --version
aws-cli/2.6.4 Python/3.9.12 Darwin/21.4.0 source/x86_64 prompt/off
$

Ref : https://stackoverflow.com/questions/59605991/how-do-i-fix-dyld-library-not-loaded-if-i-installed-the-aws-cli-with-pip3

 

How do I fix "dyld: Library not loaded" if I installed the AWS CLI with pip3?

I am trying to deploy a lambda with the AWS CLI. It was working a few months ago but now it's not. Followed these instructions to install the CLI: https://docs.aws.amazon.com/cli/latest/userguide/

stackoverflow.com

 

 

update-alternatives --install /usr/bin/python python /usr/local/bin/python3.9 10

Ref : https://www.vultr.com/docs/update-python3-on-debian/

 

Update Python 3 on Debian

We are simplifying the cloud. One Login, 16 Countries, 25 Cities, Infinite Possibilities.

www.vultr.com

Ref : https://exitcode0.net/debian-9-how-to-upgrade-python-3-5-to-python-3-7/

 

Debian 9 - How to upgrade python 3.5 to python 3.7

I recently spent 30 minutes figuring out how to upgrade to python 3.7 and subsequently pip version on a fresh install of Debian 9. I ran into a number of issues doing this so I though that I would put this quick post together to make this a little

exitcode0.net

 

기존에 설치된 파이썬의 버전을 리눅스에서 업그레이드 하려면 소스를 받은뒤에 빌드를 해야합니다. 빌드를 하고 설치를 한뒤에 기존 파이썬 명령어를 새 버전으로 바꾸는 작업을 하게 됩니다. 아래 순서대로 진행하면 문제 없이 

 

1. 버전 체크

python3 -V

 

2. 필수 라이브러리 설치

apt-get install wget build-essential libreadline-gplv2-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev libffi-dev zlib1g-dev liblzma-dev -y

 

3. 소스 다운로드

wget https://www.python.org/ftp/python/3.9.12/Python-3.9.12.tgz

 

4. 적당한위치에 소스 압축파일 풀기

tar xzf Python-3.9.12.tgz

 

5. 압축 해제한 곳에 들어가서 빌드하고 설치하기(빌드 후 설치할때 root 권한 필요)

cd ./Python-3.9.12 
./configure
make
sudo make install

 

6. 기존 명령어를 설치한 버전으로 교체하기(root 권한 필요)

 

sudo update-alternatives --install /usr/bin/python python /usr/local/bin/python3.9 10

Windump 

* 실행파일 하나로 덤프할 수 있다. 

* 실행 방법이 간단하다. 

* 특정 크기/파일 갯수, 연속 캡쳐 및 로테이팅이 가능하다.

* 다양한 옵션으로 필터링을 할 수 있다. tcpdump 랑 같은 옵션을 지원한다.

* winpcap 라이브러리가 필요하다.

 

덤프 방법 - https://www.winpcap.org/windump/docs/manual.htm

1. 패킷 덤프를 뜰 인터페이스를 선택한다. windump.exe -D

2. windump.exe 를 이용하여 패킷을 덤프한다. 

ex) windump.exe -n -i 1 -s 0 -C 10 -W 20 "packetdump_path"

-n : 아이피를 호스트이름으로 바꾸지 않음

-i 1 : 1번 네트워크 인터페이스를 모니터링함

-s 0 : snaplen 의 설정으로 0일 경우 전체 패킷 모니터링함

-C 10 : 10메가 바이트. 이때 메가바이트 단위는 1,000,000. 

-W 20 : 20개의 파일을 로테이션 한다. 기존 파일은 덮어씌운다. 

 

 

netsh

* 별도 라이브러리가 필요없다. 

* 다양한 옵션으로 덤프를 할 수 없다.

* 덤프파일 etl 을 pcapng 로 변환해야한다.

 

덤프 방법

1. 패킷 덤프를 뜰 인터페이스를 선택한다. netsh trace show interfaces

2. netsh trace 를 이용하여 패킷을 덤프한다.

ex) netsh trace start capture=yes CaptureInterface=”Ethernet 3” IPv4.Address=192.168.1.1 tracefile="dump.etl" maxsize=11

 

etl 파일을 pcapng 로 변환하는 방법 - https://github.com/microsoft/etl2pcapng/releases

1. etl2pcapng 를 다운로드 받는다.

2. etl2pcapng.exe 를 실행한다. etl2pcapng.exe source.etl output.pcapng

 

1. nslookup 으로 조회

nslookup

set q=MX

mxdomainname.name

 

2. 웹사이트에서 조회

http://check.mx/mx/

 

자주 사용하는 명령어 정리

 

1. Git을 사용하기 전에 SSH Agent 가 키를 적절하게 로딩해야한다.

 

1.1 SSH Agent 에 로딩된 키 목록 표시

mymacbook:test ggil$ ssh-add -l
4096 SHA256:2Csx/g+iw?????????????8fSPH7Ryfg test@gmail.com (RSA)
mymacbook:test ggil$

 

 

 

1.2 SSH Agent 에 키 등록하기. (기본 id_rsa 가 로딩되나 비밀번호가 반영되어 있으면 이 과정을 거쳐야 한다.)

mymacbook:test ggil$ ssh-add -K ~/.ssh/id_rsa
Enter passphrase for /Users/ggil/.ssh/id_rsa: 
Identity added: /Users/ggil/.ssh/id_rsa (test@gmail.com)
mymacbook:test ggil$ 

 

 

1.3 SSH Agent 에 비밀번호가 등록된 키를 사용할 때, 키체인에 비밀번호를 등록해서 자동으로 등록하기.

https://help.github.com/en/articles/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent#adding-your-ssh-key-to-the-ssh-agent

 

1.3.1 ~/.ssh/config 파일을 편집한다.

macbookpro-01:nsmon hgchoi$ vi ~/.ssh/config

1.3.2 아래와 같이 수정한다. 

Host *
  AddKeysToAgent yes
  UseKeychain yes
  IdentityFile ~/.ssh/id_rsa

1.3.3 다시 SSH Agent 에 키를 등록한다.

mymacbook:test ggil$ ssh-add -K ~/.ssh/id_rsa
Enter passphrase for /Users/ggil/.ssh/id_rsa: 
Identity added: /Users/ggil/.ssh/id_rsa (test@gmail.com)
mymacbook:test ggil$ 

 

 

2. Git Push

 

2.1 최종 커밋된 로컬 저장소 내용을 리모트 저장소에 반영하기

mymacbook:test ggil$ git push origin master
Warning: Permanently added the ECDSA host key for IP address '1.1.1.1' to the list of known hosts.
Enumerating objects: 42, done.
Counting objects: 100% (42/42), done.
Delta compression using up to 12 threads
Compressing objects: 100% (21/21), done.
Writing objects: 100% (23/23), 12.63 MiB | 6.65 MiB/s, done.
Total 23 (delta 16), reused 0 (delta 0)
To git.test.domain.io:Group1/test.git
   a27a018..dc6e8cb  master -> master
mymacbook:test ggil$ 

 

 

3. Git Branch

 

3.1 Branch 목록 보기

mymacbook:test ggil$ git branch -r
  origin/HEAD -> origin/master
  origin/master
  origin/branch1
  origin/branch2
mymacbook:test ggil$ 

 

 

4. Git Remote

 

4.1 Remote 정보 보기

mymacbook:test ggil$ git remote -v
origin	git@git.test.domain.io:Group1/test.git (fetch)
origin	git@git.test.domain.io:Group1/test.git (push)
mymacbook:test ggil$

 

4.2 Remote 정보 변경하기

mymacbook:test ggil$ git remote set-url origin git@git.test.domain.io:Group1/test.git
mymacbook:test ggil$

바뀐거 확인

mymacbook:test ggil$ git remote -v
origin	git@git.test.domain.io:Group1/test.git (fetch)
origin	git@git.test.domain.io:Group1/test.git (push)
mymacbook:test ggil$

 

 

5. Git pull

 

5.1 original master 원격 저장소를 로컬 저장소에 반영하기

mymacbook:test ggil$ git pull origin master
From ssh://git.test.domain.io:1234/test/test
 * branch            master     -> FETCH_HEAD
Already up to date.
mymacbook:test ggil$ 

 

 

 

 

에러가 나는 상황 및 참고 URL

javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed Error

 

 

webconn = (HttpsURLConnection)new URL(uri).openConnection();
webconn.setHostnameVerifier(new HostnameVerifier() {
	@Override
	public boolean verify(String arg0, SSLSession arg1) {
		return true;
	}
});

1. 직접 HttpsURLConnection 를 사용하다 오류난 경우(Self-signed Certification) 위와 같이 코드상에서 간단히 예외처리 가능. 또한 아래 2번 항목으로도 예외처리 가능.

 

 

 

2. 프록시를 이용하는데 proxy 가 Self-signed Certification 을 사용해서 오류난 경우는 1번으로 해결 불가능. 직접 키 스토어에 인증서를 등록한뒤에 해당 키스토어를 신뢰하도록 설정함.

2.1 먼저 proxy 에서 사용중인 Self-signed certification 을 keystore 으로 등록한다.

keytool -import -noprompt -trustcacerts -alias <AliasName> -file   <certificate> -keystore <KeystoreFile> -storepass <Password>

2.2 keystore 파일을 적당한곳에 위치시키고 자바 실행 인자에 아래와 같이 추가한다. 만일 Tomcat의 경우 Tomcat 실행인자를 수정한다.(단 이때 정상적인 HTTPS 도 오류가 날수 있다. 반드시 테스트 후에는 해당 인자를 제거해야 기존 신뢰인증서에 대한 검증을 제대로 수행한다.)

-Djavax.net.ssl.trustStore=<keystore path> -Djavax.net.ssl.trustStorePassword=<keystore password>

 

[Eclipse 에서 Tomcat 실행 환경 변수]

 

 

 

 

 

 


Step by Step guide to Enable HTTPS or SSL correct way on Apache Tomcat Server – Port 8443 

keystore 를 만들어서 Tomcat이 HTTPS 서비스를 할 수 있도록 하기 위한 방법
https://crunchify.com/step-by-step-guide-to-enable-https-or-ssl-correct-way-on-apache-tomcat-server-port-8443/




Create a PKCS12 (.pfx / .p12) from a JKS / JAVA keystore


만들어진 keystore 를 다시 PKCS12 로 변환 하는 방법. 변환한 뒤에 OS의 인증서 관리 툴에서 import 시킨뒤에 trusted로 지정하면 인증서 오류가 사라짐.

https://www.tbs-certificates.co.uk/FAQ/en/627.html



뭔가 신박하고 복잡한 과정이 있는줄 알았다.


하지만 그냥 ISO 를 설치하면 된다. 


6.5 에서 6.7 방법

https://www.youtube.com/watch?v=lZGGTVy9BW8


이걸 참고삼아 설치를 하는데 N54L 은 HPE Custom Image 를 받아서 진행한다. 

6.5까지만 AMD Turion II CPU 를 지원하고 6.7 부터는 각자 알아서 잘 업글 한다는데 거기까진 시간과 노력이 부족하다.



https://www.hpe.com/us/en/servers/hpe-esxi.html


에서 클릭해서 보이지 않으면 제품 검색에 "OEM-ESXI65U2-HPE" 를 입력한다.

https://my.vmware.com/group/vmware/details?downloadGroup=OEM-ESXI65U2-HPE&productId=614


HPE Custom Image for VMware ESXi 6.5 U2 Install CD
실제 파일이름 : VMware-ESXi-6.5.0-Update2-9298722-HPE-Gen9plus-650.U2.10.3.5.5-Sep2018.iso

1. ESXi-6.0.0-20151104001-standard-customized.iso  를 구한다.


2. rufus-3.3p.exe 으로 이미지를 usb 에 복사한다.

2.1 PowerISO 이런걸로 복사했다가 개피봄. 부팅안됨


3. n54l 의 앞 패널쪽 usb 에 꼽는다.

3.1 부팅이 안되면 usb 를 8기가 이하 추천. 16기가에서 성공함. 

3.2 그래도 안되면 usb 를 FAT32 으로 포맷함. 1 단계를 통해서 iso 를 바로 usb 로 구우면 문제 없음.

3.3 그래도 안되면 usb 를 n54l 앞쪽 패널을 열어서 메인보드에 있는 usb 단자에 꼽는다.

3.4 그래도 안되면 https://ubuntuforums.org/showthread.php?t=2282713  참고한다. (별로 도움 안됨)


4. 부팅을 할때 F10 으로 부팅 순서를 체크한다.

4.1 F12 인 네트워크 머시기로 부팅하면 개피봄. 부팅안됨. 

4.2 USB 가 인식이 잘 되었는지 F10 바이오스 세팅 화면에서 USB 관련 세팅을 찾아가면 USB 이름이 보임.


5. 부팅한다. 자동으로 usb 를 인식하여 esxi 설치 화면이 나온다. 


6. 설치 단계를 거치고 난 뒤에 화면에 시스템의 IP 가 표시된다.

6.1 당연히 LAN Cable 을 연결해야하고, DHCP 에 의해서 아이피를 할당받게 된다.


7. http://할당된IP/ 으로 접속하면 vsphere client 를 다운로드 받을 수 있다.

7.1 vmware 홈페이지에서 직접 다운받아도 된다. 6.0 update 3 을 받아도 접속할 수 있지만 약간의 호환성 문제가 있는것 같다. 



 osx High Sierra 기준으로 기본적으로 Python 2.7이 설치되어 있습니다.


brew 가 설치된 환경을 기준으로 합니다. 


brew를 이용하여 Python 을 설치하면 최신 버전을 가져와서 설치합니다.

 localhost:exam user1$ brew install python

설치된 패키지는 /usr/local/Cellar/python/3.?.? 에 위치합니다. 



간혹 Python 이전 버전을 깔고 싶을때가 있습니다. TensorFlow 는 Python 3.6.x 에서 동작하는데 그럴땐 아래와 같이 이전 버전을 명시적으로 지정합니다. 

brew는 최신버전을 항상 유지하고 링크를 시키기 때문에 아래와 같은 트릭은 권고 하지 않습니다. 하지만 테스트나 개발 용도로 필요하기 때문에 어쩔수 없이 설치해야 합니다. 

localhost:exam user1$ brew unlink python

localhost:exam user1$ brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/f2a764ef944b1080be64bd88dca9a1d80130c558/Formula/python.rb



만일 brew 에 의해서 Python 이 여러개 깔렸을 때 아래와 같이 버전 변경합니다. 

 localhost:exam user1$ brew switch python 3.x.x_x # Ex. 3.6.5_1



Python 을 설치했다면 virtual environment 를 구축합니다. 

앞서 Python 을 설치할때 pip3 가 설치 되었을 겁니다. 


virtualenv 를 pip3 로 설치합니다.(이미 설치되었다면 아래와 같은 안내가 나옵니다. 

localhost:exam user1$ pip3 install virtualenv

Requirement already satisfied: virtualenv in /usr/local/lib/python3.6/site-packages (16.1.0) 


폴더를 하나 만들고 해당 폴더를 가상작업 환경으로 설정합니다.

localhost:exam user1$ mkdir Python

localhost:exam user1$ virtualenv Python 

Using base prefix '/usr/local/Cellar/python/3.6.5_1/Frameworks/Python.framework/Versions/3.6'

New python executable in /Users/user1/exam/Python/bin/python3.6

Also creating executable in /Users/user1/exam/Python/bin/python

Installing setuptools, pip, wheel...

done.

localhost:exam user1$  


그럼 이제 작업환경으로 넘어가보도록 하겠습니다.

localhost:exam user1$ source ./Python/bin/activate

(Python) localhost:exam user1$ python

Python 3.6.5 (default, Jun 17 2018, 12:13:06) 

[GCC 4.2.1 Compatible Apple LLVM 9.1.0 (clang-902.0.39.2)] on darwin

Type "help", "copyright", "credits" or "license" for more information.

>>> 




작업환경이 마련되면 필요한 패키지를 설치합니다.



한번 설정하면 거의 다시 사용할일 없는 close 작업입니다. 

윈도우 환경에서만 사용하다가 mac 환경에서 멘붕을 겪고 잊어버리기 전에 정리합니다. (리눅스도 아마 같을거에요)


1. 기본 명령어로 clone 하기

1.1 git -c clone https://hostname/repository/project.git 

1.2 아이디 비밀번호 물어봄 -> 아이디 비밀번호 입력하면 clone 작업됨

Cloning into 'project'...

Username for 'https://hostname': 

Password for 'https://hostname':  


1.3 만일 인증서가 어쩌고 하면서 에러가 뜬다면? git 서버에 정상적인 인증서를 설치하지 않은 경우입니다. 

Cloning into 'project'...

fatal: unable to access 'https://hostname/project.git/': SSL certificate problem: self signed certificate 

self-signed 인증서를 설치한 경우가 대부분인데 이때는 MITM공격이 없다고 확신하고.git -c http.sslVerify=false clone https://hostname/repository/project.git   옵션으로 인증서 오류를 무시합니다.   


2. ssh agent 으로 close 하기. 자신의 ssh 공개키를 git 서버에 등록했다고 가정합니다. 

1.1 git -c clone git@hostname:repository/project.git  

1.2 만일 




ssh-agent 에 등록된 개인키 리스트 살펴보기

ssh-add -l



ssh 개인키를 ssh-agent 에 등록하기( 처음 혹은 개인키에 비밀번호가 걸려 있을경우 항상 수행 )

1. 개인키를 적당한 위치에 복사합니다. 보통 user/.ssh/ 에 위치합니다.

2. ssh-add ~/.ssh/personal_private_key.ppk

2.1 만일 개인키에 비밀번호가 지정되어 있으면 비밀번호를 입력합니다. 비밀번호가 틀리지 않았다면 성공적으로 키가 등록됩니다. 

Enter passphrase for /Users/user1/.ssh/personal_private_openssh.ppk: 

Identity added: /Users/user1/.ssh/personal_private_openssh.ppk (/Users/hgchoi/.ssh/personal_private_openssh.ppk) 


3. 만일 "Permissions 0XXX for" 라는 오류가 뜨면 해당 키를 다른 사람이 접근하지 못하도록 퍼미션을 설정해야합니다. 

3.1 chmod 700 personal_private_key.ppk  으로 퍼미션을 변경합니다. 

4. 만일 "Error loading key ".ssh/personal_private_key.ppk": invalid format" 라는 메세지가 뜬다면 OpenSSH 기본 키 포맷이 아닙니다.

4.1 PuttyKeyGen 으로 해당 키를 로딩합니다.

4.2 메뉴에서 "Conversions" -> "Export OpenSSH key" 으로 private key 를 덮어쓰거나 새로 저장합니다. 

4.3 2번으로 돌아갑니다. 



WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED 오류 해결법

Cloning into 'project'...

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!

Someone could be eavesdropping on you right now (man-in-the-middle attack)!

It is also possible that a host key has just been changed.

The fingerprint for the RSA key sent by the remote host is

SHA256:7XawXdUiuwejALWs5bR7JfcXE6IC/d0wwesdKNJJDKDHOM.

Please contact your system administrator.

Add correct host key in /Users/user1/.ssh/known_hosts to get rid of this message.

Offending RSA key in /Users/user1/.ssh/known_hosts:1

RSA host key for git1.nexon.net has changed and you have requested strict checking.

Host key verification failed.

fatal: Could not read from remote repository.


Please make sure you have the correct access rights 


known_hosts 파일에 이미 git repository 서버의 public sign 이 저장되어 있는데 그 사이에 서버에서 디지털인증을 변경하는 경우 입니다. 아주 희귀하지만 겪게 되었는데요. 이때는 간단하게 known_hosts 파일에서 해당 서버의 목록을 삭제합니다. 그리고 다시 clone 을 하게 되면 서버인증서를 보여주면서 계속 할건지 묻습니다. 

Cloning into 'project'...

The authenticity of host 'hostname (??.??.??.??)' can't be established.

ECDSA key fingerprint is SHA256:GqKgaoowjfsduzHbG5kZfMv98QawefdxIQjgqnEyX80.

Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added 'hostname,??.??.??.??' (ECDSA) to the list of known hosts.

remote: Enumerating objects: 2689, done.

remote: Counting objects: 100% (2689/2689), done.

remote: Compressing objects: 100% (1651/1651), done.

remote: Total 2689 (delta 1218), reused 2239 (delta 906)

Receiving objects: 100% (2689/2689), 153.58 MiB | 4.61 MiB/s, done.

Resolving deltas: 100% (1218/1218), done.

Checking out files: 100% (1882/1882), done.


이렇게 yes를 누르면 known_hosts 에 서버의 인증서가 기록 됩니다. 




 


1. 지울 이메일을 잘 선정한다. 검색란에 정확하게 기입해서 검색한다.

2. 50개 혹은 100개의 이메일이 나타나는데 왼쪽 전체 선택 체크박스를 누르면 전체 선택이 된다.

3. 이 상태로 지우면 50개 혹은 100개 단위로 삭제할 수 있지만 "검색어와 일치하는 모든대화 선택" 옵션을 선택하면 모두 삭제가 가능하다.



* If there is any build error and it cannot be solved, you should clean folder and retry all process as you planned. 


[OpenSSL 1.1.0e] - succeeded


1. Download OpenSSL latest version (1.1.0e)

2. Install Perl program ( ActiveState Perl recommended )

3. Install NASM (32bit or 64bit) http://www.nasm.us

4. Set path NASM

5. See INSTALL on OpenSSL folder

5.1 Perl Configure ( VC-WIN32 or VC-WIN64A or debug-VC-WIN32 debug-VC-WIN64A ) --prefix=C:\Build-OpenSSL-VC-32-dbg

5.1.1 for avoid license issue "perl Configure debug-VC-WIN32 no-idea no-md2 no-mdc2 no-rc5 no-rc4 enable-capieng no-shared --debug --prefix=c:\Build-OpenSSL-VC-32-dbg"

5.2 nmake

5.3 nmake test

5.4 nmake install <- Need administration privileges. 


[OpenSSL 1.0.2k] - Failed

1. Download OpenSSL latest version (1.0.2k)

2. Install Perl program ( ActiveState Perl recommended )

3. Install NASM (32bit or 64bit) http://www.nasm.us

4. Set path NASM

5. See INSTALL on OpenSSL folder

5.1 Perl Configure ( VC-WIN32 or VC-WIN64A or debug-VC-WIN32 debug-VC-WIN64A ) --prefix=C:\Build-OpenSSL-VC-32-dbg

5.1.1 if there a asm error on nmake, add "no-asm" option. It would be working but it may affect performance lower. 

5.1.2 for avoid license issue "perl Configure debug-VC-WIN32 no-idea no-md2 no-mdc2 no-rc5 no-rc4 enable-capieng no-shared --debug --prefix=c:\Build-OpenSSL-VC-32-dbg"

5.2 ms\do_win64a.bat

5.2.1 For 32bit with nasm, ms\do_nasm.bat

5.2.2 For 32bit with ms, perl Confire no-asm -> ms\do_ms.bat 

5.3 nmake -f ms\nt.mak

5.3.1 if you need to build with DLL, use "nmake -f ms\ntdll.mak"


5.4 See output folder

5.4.1 lib : out32

5.4.2 bin : out32

5.4.3 include : inc32

5.4.4 if the configuration is debug, see out32.dbg


5.5 If you want to test built modules, please do "nmake -f ms\nt.mak test"

5.5.1 it might be failed due to "no-idea". Please ignore. 


5.6 Install modules to --prefix using by "nmake -f ms\nt.mak install"


[Curl]

Place all libs to ../deps/lib (openssl should be named libeay32.lib, ssleay32.lib)

Place all includes to ../deps/include


Set RTLIBCFG=static

!IF "$(RTLIBCFG)"=="static"
RTLIB = /MT
RTLIB_DEBUG = /MTd
!ELSE
RTLIB = /MD
RTLIB_DEBUG = /MDd

!ENDIF 


1. command line build on "~\winbuild\" - Should select command line for machine type

nmake /f Makefile.vc mode=static VC=9 WITH_SSL=static ENABLE_IDN=no DEBUG=no GEN_PDB=yes MACHINE=x64 

1.1 After build without error, please see "~\builds\???"


2. Open "/projects/Windows/VC version/curl-all.sln" by VC++

2.1 Add essential library

2.2 Add CURL_STATICLIB on preprocessor if curl library is static built

2.3 Select build option. 

// 폴더가 존재하는지 체크한다. 없으면 반복적으로 만든다.

p = _tcsrchr(szLogFile, _T('\\'));

*p = _T('\0'); // 임시로 폴더까지만 제한한다.

if ( _access(szLogFile, 00) != 0 )

{

*p = _T('\\'); // 없앴던것을 다시 복구.


// 폴더를 만드는작업을 수행한다.

TCHAR *p1 = _tcschr(szLogFile, _T('\\')); // c:\ 찾음

TCHAR *p2 = _tcschr(p1+1, _T('\\')); // c:\aaa\ 찾음

while(p2 != NULL) 

{

if ( p2 == NULL )

break;


*p2 = _T('\0'); // 임시로 \ 없애고

if ( _access(szLogFile, 00) != 0 ) // 폴더가 있는지 체크한뒤에

{

if ( 0 == CreateDirectory(szLogFile, NULL) ) // 폴더가 없으면 폴더를 만들고

break; // something wrong

}

*p2 = _T('\\'); // 임시로 없앤 \ 를 복구

p1 = p2;

p2 = _tcschr(p1+1, _T('\\'));

}

}

else

*p = _T('\\'); // 없앴던것을 다시 복구


USB로 윈도우 이외의 OS를 설치하다 보면 USB 인식후 접근이 안될때가 있습니다.

접근이 되더라도 용량이 매우 적은 경우가 있는데요.

그럴땐 USB를 초기화해서 사용합니다.


보통은 시작 -> 컴퓨터 관리 -> 디스크관리 에서 파티션을 삭제하게 되는데요.

그런데 간혹 파티션 삭제가 안될때가 있습니다.

그때는 강제로 파티션을 삭제해야하는데 각종 툴들이 있지만 윈도우 기본 툴인 diskpart 를 이용하면 간단하게 삭제가 됩니다.


1. 명령어창을 열어야 하는데 반드시 관리자 권한으로 실행합니다.

2. diskpart 를 명령줄에 입력하고 실행하면 diskpart 가 실행됩니다.

3. list disk 명령으로 물리 디스크 목록을 살펴봅니다.

4. select disk ? 으로 목표로 하는 물리디스크(USB)를 선택합니다.

5. list partition 명령으로 디스크에 등록된 파티션 목록을 살펴봅니다.

6. select partition ? 으로 삭제할 파티션을 선택합니다.

7. delete partition 으로 파티션을 삭제합니다.

5 ~ 7 을 반복해서 모든 파틴션을 삭제합니다.

8. create partition primary 으로 기본 파티션을 생성합니다.

9. exit 명령어로 diskpart 를 종료합니다.

10. 시작 -> 컴퓨터 관리 -> 디스크관리 에서 파티션을 포맷합니다.














1. uncompyle2-master 를 적절한 곳에 위치시킴

2. pythone.exe setup.py install 명령 실행.

3. python.exe ./Script/uncompyle2 ????.pyc > ????.py

입력부분

input: 100~240V, 0.15A, 50-60Hz 

100볼드 ~ 240 볼트 사이에 50~60Hz 범위내에서 전원을 연결할 수 있음.

예1 한국은 60Hz 이고 220V 이므로 범위에 들어감

예2 일본은 50Hz 이고 110V 이므로 범위에 포함됨

http://www.trade.gov/mas/ian/ecw/ 참고


출력부분

output: 5V, 1A


+ 와 - 단자가 우선적으로 맞아야함.



장치를 기준으로

 어뎁터가

전류가 낮은 경우

전류가 같은 경우

 전류가 높은경우 

 전압이 낮은 경우

 이러지 말자. 어뎁터에 문제 생김. 아 이건 모르겠다.

장치에서 오동작을 하거나 동작하지 않을 수 있음. 전기의 힘이 약하므로 장치가 깜빡일수도 있음. 장치마다 다름

 이러지 말자. 장치가 동작안함.

 전압이 같은 경우 어뎁터가 망가질수있음(전압이 낮아질수 있음). 만일 전류 차이가 크면 탈수있음

 Good

 Available

 전압이 높은 경우

 이러지 말자. 장치에 문제 발생, 어뎁터에도 문제 발생

 기기가 과전압 보호 회로가 없으면 터지거나 동작하지 않음. 있으면 몇볼트 정도까진 버티지만 너무 큰 전압차는 장치를 망가뜨림.(즉 퓨즈가 터짐)

이러지 말자. 장치에만 문제 발생




충전의 경우는 약간 다름. 

2A 의 장치가 1A 어뎁터를 연결 하는경우 1A만 땡겨감.충전이 느리게 됨.

몇몇 장치는 충전시 전류량을 제한하는 경우도 있음. 아이폰의 경우 1A 로 땡겨가지만 정품어뎁터가 아니면 500mA 을 땡겨감.



http://www.internethealthreport.com/


아래와 같이 나옵니다. 버라이존과 At&t 는 다른 사업자랑 사이가 안좋군요.



[목표]

회사망(192.168.0.0/16, 10.8.0.0/16)에 연결된 피씨에서 외부 VPN을 연결할 경우.

1. 모든 트래픽은 VPN 을 통해서 나가야한다.

2. 회사 중요 시스템에 접근할땐 물리 NIC을 통해서 나가야한다.


[환경]

우선 VPN 에 접속한다. 이때 모든 트래픽을 vpn 을 타고 가도록 설정한다.

c:\>route print

Interface List
 18...?? ?? ?? ?? ?? 69 ......TAP-Windows Adapter V9   <== 요놈이 VPN 게이트웨이 아이피 10.211.1.2
 11...?? ?? ?? ?? ?? b9 ......Realtek PCIe GBE Family Controller  <== 요놈이 물리 NIC 게이트웨이 아이피 192.168.1.1
 23...?? ?? ?? ?? ?? e2 ......VirtualBox Host-Only Ethernet Adapter


[설정방법] - 회사망으로 가는 트래픽을 모조리 물리 NIC의 게이트웨이를 타도록 설정한다.

route add 192.168.0.0 mask 255.255.0.0 192.168.1.1 IF 11

route add 10.8.0.0 mask 255.255.0.0 192.168.1.1 IF 11

...



팀 동생이 공유해준 링크인데 개념정리에 도움이 많이 됩니다.


http://www.pgpi.org/doc/pgpintro/

그림만 따왔습니다.



Figure 1-2. Conventional encryption



Figure 1-3. Public key encryption




Figure 1-4. How PGP encryption works




Figure 1-5. How PGP decryption works





Figure 1-6. Simple digital signatures




Figure 1-7. Secure digital signatures




Figure 1-8. Anatomy of a PGP certificate




Figure 1-9. A PGP certificate





Figure 1-10. An X.509 certificate




Figure 1-12. Hierarchical trust







홈서버의 비밀번호를 변경하고 까먹었습니다. 집에가서 아래 방법으로 고쳐보고 안되면 지우겠습니다.  


http://www.kieranlane.com/2013/09/18/resetting-administrator-password-windows-2012/


  • Boot from the Micrsoft Windows Server 2012 DVD
  • From the Windows Setup menu, click “Next”.
  • Select “Repair your computer”
  • Under Choose and option, click on “Troubleshoot”.
  • Under Advanced options, click “Command Prompt”.
  • At the command prompt, run the following commands:
    d:
    cd windows\system32
    ren Utilman.exe Utilman.exe.old
    copy cmd.exe Utilman.exe
  • Close the command prompt and then click “Continue”.
  • The server should now boot and present the logon screen. Here click Windows Key + U.
  • At the prompt you can now change the password, by typing the following command:
    net user administrator Password123
    This will set the password for the Administrator user to be Password123 (case sensitive).

After that repeat above for cleanup. 


ex) Windump.exe -n -i 3 -C 10 -W 10 -w testdump


-n : name resolve 하지 않기

-i 3 : 인터페이스 3번을 모니터링. windump.exe -D 옵션으로 인터페이스 번호를 확인해야함

-C 10 : 10메가씩 짜르기

-W 10 : 파일 갯수 10개씩 돌아가면서 저장. 마지막꺼 지움.

-w testdump : testdump 파일이름으로 저장. 숫자 0~9 까지 -C 옵션에 따라서 늘어남.


#include <json/writer.h>
#include <json/json.h>

#ifdef _DEBUG
#pragma comment(lib, "json_vc71_libmtd.lib")
#else
#pragma comment(lib, "json_vc71_libmt.lib")
#endif

void pjson(Json::Value& v)
{
    if ( true == v.isArray() )
    {
        for (int i=0, max=v.size(); i<max; i++)
        {
            if ( true == v[i].isObject() )
                pjson(v[i]);
            else
                printf(":%s \n", v[i].asString().c_str());
        }
        return;
    }
    else if ( true == v.isObject() )
    {
        Json::Value::Members members(v.getMemberNames());

        for (Json::Value::Members::iterator it = members.begin(); it != members.end(); ++it)
        {
            printf("%s:", (*it).c_str());
            pjson(v[(*it).c_str()]);
        }
    }
    else
    {
        printf(":%s \n", v.asString().c_str());
        return;
    }
}

int _tmain(int argc, _TCHAR* argv[])
{
    int nRet = 0;
    char* buffer = 0;
    long size = 0;
    FILE *file = fopen("setting.json", "rb");

    if ( file == 0 )
    {
        printf("Cannot open setting.json file \n");
        return 0;
    }

    fseek(file, 0, SEEK_END);
    size=ftell(file);

    buffer = (char*)malloc(sizeof(char)*size+1);
    rewind( file );
    if ( fread(buffer, sizeof(char), size, file) != size )
    {
        printf("Failed to read json file \n");
    }
    fclose (file);

    Json::Reader reader;
    Json::Value root;
    bool ok = reader.parse(buffer, root);

    free(buffer);

    if ( reader.getFormattedErrorMessages().size() != 0 )
    {
        printf("Read json error : %s \n", reader.getFormattedErrorMessages().c_str());
    }

    if ( reader.getStructuredErrors().size() != 0 )
    {
        for ( int i=0; i<reader.getStructuredErrors().size(); i++)
            printf("Read json error : %s \n", reader.getStructuredErrors()[i].message.c_str());
    }

    unsigned short ui = root["address"]["aaa"].asUInt();
    pjson(root);

    return 0;


1. curl 사이트에서 최신 라이브러리 다운로드. http://curl.haxx.se/


2. 적당한 위치에 압축 해제.


3. {압축해제위치}\projects\Windows\{빌드할 VS 버전 선택}\curl.sln 열기


4. 빌드할 라이브러리 선택해서 빌드. (Multi-threaded 옵션은 직접 수정해야함)


5. {압축해제위치}\build\Win32\{빌드한 VS 버전}\LIB [Debug/Release]\libcurl.lib 을 프로젝트로 복사


6. {압축해제위치}\include 를 프로젝트로 복사


7. 프로젝트 설정에서 include 와 lib 설정


8. 만일 라이브러리 타입이 정적라이브러인 경우 Project Property -> C/C++ -> Preprocessor 에 "CURL_STATICLIB"를 반드시 추가. 하지 않으면 링크 에러남
   error LNK2001: unresolved external symbol __imp__curl_easy_init <- 요런에러


9. ldap 관련 에러가 나면 "#pragma comment(lib, "wldap32.lib")" 라이브러리 링크해야함.

1>libcurld.lib(ldap.obj) : error LNK2019: unresolved external symbol __imp__ldap_unbind_s referenced in function _Curl_ldap
1>libcurld.lib(ldap.obj) : error LNK2019: unresolved external symbol __imp__ldap_msgfree referenced in function _Curl_ldap
1>libcurld.lib(ldap.obj) : error LNK2019: unresolved external symbol __imp__ber_free referenced in function _Curl_ldap
1>libcurld.lib(ldap.obj) : error LNK2019: unresolved external symbol __imp__ldap_memfree referenced in function _Curl_ldap
1>libcurld.lib(ldap.obj) : error LNK2019: unresolved external symbol __imp__ldap_value_free_len referenced in function _Curl_ldap 


10. 여기까지 하니까 빌드 및 동작함.


    CURL *curl;
    CURLcode res;
    char buffer[10];
    curl = curl_easy_init();

    if ( 0 != curl )
    {
        curl_easy_setopt(curl, CURLOPT_URL, "http://www.naver.com");
        res = curl_easy_perform(curl);
        curl_easy_cleanup(curl);
        if ( res == 0) {
        }
        else {
        }
    } 




+ Recent posts