2021년 12월 31일 금요일

Disney Plus + OSMC + 라즈베리파이 4

라즈베리파이 4 에서 Disney+ 를 보기위한 설정

기본적으로는 참조에 있는 링크의 내용임.

1. https://osmc.tv/download/ 에서 Raspberry Pi 4 / 400 (2021.12-1) 를 다운로드.

2. rufus 를 이용해 다운로드한 이미지를 SD 카드에 쓰기.

3. 라즈베이파이 4 에 SD 카드를 꽃고 부팅.
* 파티션 작업, 인스톨 등에 40분 정도 걸렸다. 그동안 SSH 연결이 안되서 동작 안하는줄 알았다.
모니터를 연결하니 설치 중인게 보여 기다릴 수 있었다.
* 초기 설정 중에도 버벅댄다. 

4. 초기 설정
언어: 영어
로케일: Asia - Seoul
나머지는 그대로
소식지는 안받음

5. 한글 설정
Setting > Interface > Skin > Fonts - Arial 선택 
Setting > Interface > Regional > Language > Korean 선택

6. 자동 업데이트 중지
이미지가 나온지 얼마 안되기도 했고, 일단 잘 움직이면 안건드리는게 상책.
설정 > My OSMC > 업데이트(구름 아이콘) > Schedule > Never

7. 리모콘 및 Yatse(핸드폰 앱) 설정
리모콘 - 별도의 설정 없이 사용 가능
Yatse > 호스트 관리 > + 버튼 > KODI > osmc 선택 > 계정정보 osmc/osmc > OSMC 화면에서 경고 확인

7. SSH 접속
(4. 초기 설정에서 SSH 활성화 필요)
초기계정정보는 osmc/osmc
처음 로그인 하면 apt cache update 한다고 나오고, 이것도 한 5분은 걸린 듯.
레파지토리 정보 다운로드 (참조의 Disney Plus 부분에서 1 ~ 4 번에 해당)

$ wget https://k.slyguy.xyz/repository.slyguy.zip

8. 저장소 추가
설정 > 시스템 > 애드온 > 알 수 없는 소스 [*]
설정 > 애드온 탐색기 > 압축 파일에서 설치 > 수동 업데이트 경고 - 예 > 홈폴더 >  다운 받은 repository.slyguy.zip 선택

9. Disney Plus 애드온 설치
설정 > 애드온 탐색기 > 저장소에서 설치 > SlyGuy Repository > 비디오 애드온 > Disney+ 선택
2022-01-01 기준으로 0.10.8 설치됨 (의존 패키지도 함께)

10. 로그인 설정
비디오 > 비디오 애드온 > Disney+ > Login > Profile 선택

11. Widevine CDM 설치
처음 비디오를 재생하면 Widevine CDM (DRM 플러그인)설치 화면이 나온다.
옛날 버전이지만 4.10.1679.0 (REVOKED) 을 선택하면 재생은 된다.

참조
https://www.makeuseof.com/tag/netflix-amazon-video-plex-raspberry-pi/


2021년 12월 23일 목요일

도커 컨테이너 쉘에서 ctrl + p 동작시키기

bash (emacs 모드) 에서 ctrl + p 를 누르면 이전 명령어가 나오는데
도커 컨테이너의 bash 에서는 이게 안된다.
몇 번인가 검색을 해봐도 이유를 찾을 수 없었는데, 이런 이유였다.

https://titanwolf.org/Network/Articles/Article?AID=daaad3d5-2f85-4000-be60-8245bf172577

ctrl + p 는 도커에서 detach 키의 일부로 인식하기 때문에 두 번 눌러야 전달이 된다

그래서 나온 해결법은 도커의 detach 키를 변경하는 것.

cat ~/.docker/config.json
{"detachKeys": "ctrl-\\"}

뭔가와 충돌나는걸 발견할 때까지는 이렇게 쓰면 될 것 같다.
도커 컴포즈는 1.20.0 이상이어야 한다고 한다. 


이건 검색하다 단축키 정리가 잘되어 있어서...

http://www.secmem.org/blog/2019/04/10/bash-shortcut/

2021년 6월 16일 수요일

ssh 로그인 후 사용자 변경

서버에 A 계정으로 로그인후 B 계정으로 바꿔서 작업해야 하는 상황.
B 계정으로는 로그인이 안되고 A 계정은 로그인만 되고 아무것도 못함.

서버에 로그인은 A 계정의 비밀키로 간단하게 할 수 있지만 
local $ cat ~/.ssh/config
Host server
    Hostname server
    User userA
local $ ssh server

B 계정 전환은 매번 입력해야 한다.
server $ su - userB
password:   # userB 의 암호 입력
server $ whoami
userB
A 계정 로그인과 B 계정 전환을 한 번에 하고싶다.
local $ cat ~/.ssh/config
Host server
    Hostname server
    User userA
    RequestTTY yes # 또는 force
    RemoteCommand su - userB
local $ ssh server
password:   # userB 의 암호 입력
server $ whoami
userB
sudo 를 사용할 수 있거나 /etc/pam.d/su 를 편집할 수 있으면 userB 의 암호 입력도
생략할 수 있지만 둘 다 권한이 없어 여기까지이다

2021년 6월 10일 목요일

홈디렉토리에 deb 설치하기

2022.10.11 추가
참고로 아래의 경우는 conda 를 사용하면 더 쉽게 해결된다.
miniforge 를 설치하고 가상 환경을 만들어 같은 기능을 하는 패키지를 설치한다.


$ python app.py
. . .
OSError: sndfile library not found

$ pip install sndfile
. . .
fatal error: sndfile.h: No such file or directory


위와 같이 sndfile 패키지가 없어 설치하려니 헤더파일이 없어 빌드가 안된다.
이 서버의 계정은 일반 사용자라 패키지 설치도 마음대로 할 수 없다.

패키지를 홈디렉토리에 설치하여 사용하려는데 ubuntu 에서는 이 기능을 지원하지 않는다고 한다.

검색 끝에 찾은 것이 https://serverfault.com/a/818025 방법이다.
이 스크립트는 패키지 파일을 풀어서 지정한 경로를 루트로 하여 파일을 복사한다.

% 두 군데 수정했다.
 file="${PREFIX}${f}"  => file="${PREFIX}/${f}"
vim ...  => sed 's#/usr#'$PREFIX'/usr#' "$file"

설치할 패키지는 https://pkgs.org/ 에서 검색한다.

먼저 필터 설정
Filter > Distros 클릭 > 다음과 같이 설정한다. (환경에 맞춰 선택) 
Distributions: Ubuntu 20.04 LTS (Focal Fossa)
Repository Architectures: Intel 64-bit
Repository Types: Official

sndfile.h 를 검색하니 다음과 같이 나왔다
libsndfile1-dev_1.0.28-7_amd64.deb

$ apt download libsndfile1-dev
$ install.sh libsndfile1-dev_1.0.28-7_amd64.deb
$ pip install sndfile
fatal error: sndfile.h: No such file or directory

파일은 설치 되었는데 여전히 에러가 난다. 
https://stackoverflow.com/a/28981343 과 같이 pip 에게 헤더의 경로를 알려줘야 한다.
$ export PKG_CONFIG_PATH=~/.local/user/lib/x86_64-linux-gnu/pkgconfig
$ pip install --global-option=build_ext --global-option="$(pkg-config --cflags-only-I sndfile)" sndfile
ld: cannot find -lsndfile

헤더파일은 해결되었고 이번엔 라이브러리의 경로를 추가한다.
$ pip install --global-option=build_ext --global-option="$(pkg-config --cflags-only-I sndfile)" --global-option="$(pkg-config --libs-only-L sndfile)" sndfile
ld: final link failed: bad value

라이브러리 경로를 확인해봐야 한다.
$ pkg-config --libs-only-L sndfile
$ ls -l ~/.local/usr/lib/x86_64-linux-gnu
libsndfile.so -> libsndfile.so.1.0.28

실제 파일이 없다. 실제 라이브러리가 있는 패키지를 받아 설치한다.
$ apt download libsndfile1
$ install.sh libsndfile1_1.0.28-7_amd64.deb
$ pip install --global-option=build_ext --global-option="$(pkg-config --cflags-only-I sndfile)" --global-option="$(pkg-config --libs-only-L sndfile)" sndfile

설치 되었다.
다시 실행시켜 본다.
$ python app.py
. . .
OSError: sndfile library not found

똑같다. 실행할 때도 라이브러리 경로를 줘야할 것 같다.
$ LD_LIBRARY_PATH=~/.local/usr/lib/x86_64-linux-gnu python app.py
OSError: cannot load library 'libsndfile.so.1': libFLAC.so.8: cannot open shared object file: No such file or directory

스크립트가 있던 페이지에도 써 있듯이 의존관계는 알아서 해결해야한다...
libflac8 와 libvorbisenc2 를 추가로 설치하고 동작했다.
LD_LIBRARY_PATH 는 .bashrc 에 추가해둔다.


참고:
- https://serverfault.com/a/818025
- https://stackoverflow.com/a/28981343
- https://pkgs.org/

2021년 6월 5일 토요일

윈도우에서 conda 와 git 설정

윈도우10

C 드라이브의 용량 문제로 D 드라이브에 설치. 


* conda 환경으로 miniforge 설치

Miniforge3-Windows-x86_64.exe

>start /wait "" Miniforge3-Windows-x86_64.exe /InstallationType=JustMe /AddToPath=0 RegisterPython=0 /NoRegistry=1 /S /D=D:\Portables\Miniforge3
옵션내용
InstallationType=JustMe나만 사용
/AddToPath=0PATH 환경변수에 추가 안함
/RegisterPython=0시스템 파이썬으로 등록 안함
/NoRegistry=1레지스트리에 등록 안함
/S사일런트 모드(설치 화면이 전혀 보이지 않음)
/D=D:\Portables\Miniforge3설치 경로 지정, /S 옵션 필요

이 옵션 및 설치 방식은 개인적인 사용 목적에 맞춘 것으로,
그냥 더블클릭하여 설명 보면서 설치하는게 무난하다.

 

* git bash 포터블 버전 설치

PortableGit-2.31.1-64-bit.7z.exe

>PortableGit-2.31.1-64-bit.7z.exe
; D:\Portables\Git 지정
>mkdir D:\Portables\Git\home\%USERNAME%

windows terminal 에서 사용하도록 설정했다.
그리고 Git BASH 는 윈도우의 사용자 디렉토리를 홈디렉토리로 사용하는듯하여
linux 식으로 로그인하도록 했다. (단점은 탭 하나당 bash 가 2개 열린다.)

windows terminal 의 settings.json (설정 > Json 파일 열기) 의 profiles 리스트에 추가

--------------------------------------------------------------------------------
        . . .
    {
      "bellStyle": "none",
      "commandline": "D:\\Portables\\Git\\bin\\bash.exe -c \"cd /home/%USERNAME%; USER=%USERNAME% HOME=/home/$USER /bin/bash -i -l; exit 0\"",
      "cursorShape": "filledBox",
      "fontFace": "Bitstream Vera Sans Mono",
      "hidden": false,
      "icon": "D:\\Portables\\Git\\mingw64\\share\\git\\git-for-windows.ico",
      "name": "Git BASH"
    },
        . . .
--------------------------------------------------------------------------------


* git bash 에 conda 연결

--------------------------------------------------------------------------------
$ touch ~/.bashrc  # .bashrc 를 생성하고
$ exit             # 다시 로그인하면 .bash_profile 이 생성된다.
$ USERPROFILE=$HOME /d/Portables/Miniforge3/Scripts/conda init bash
# bash 에서 사용 할만한 파일들을 수정해준다.
modified    D:\Portables\Minoforge3\Scripts\activate
modified    D:\Portables\Minoforge3\Scripts\deactivate
modified    D:\Portables\Minoforge3\etc\profile.d\conda.sh
modified    D:\Portables\Minoforge3\etc\fish\conf.d\conda.fish
modified    D:\Portables\Minoforge3\shell\condabin\conda-hook.ps1
modified    D:\Portables\Minoforge3\etc\profile.d\conda.csh
modified    D:\Portables\Git\home\%USERNAME%\.bash_profile
$ exit             # conda 활성화를 위해 다시 로그인
$ conda config --set auto_activate_base false
$ conda create -n 환경이름 python=3.8.5 --------------------------------------------------------------------------------
.condarc 와 .conda/ 를 %USERPROFILE% 에서 옮겨오면 conda 가 경로를 찾을 때 문제가 생겨서 그냥 뒀다.

2021년 6월 2일 수요일

windows terminal

wsl 에 ubuntu 를 재설치하던 중 눈에 띄어 한 번 설치해봤다.

몇 가지 설정한 것을 남겨둠.


설정 열기

새탭 오른쪽에 있는 꼬리없는 아래방향 화살표 > 설정

또는 Ctrl + , (vscode 와 같네...)


시작
    기본 프로필: [Ubuntu-20.04] 로 변경

상호 작용
    복사할 때 텍스트 형식: [*] 일반 텍스트만

모양
    창 애니메이션: 끔 

작업
    * 키 바인딩이 표시되고 json 을 편집하서 수정할 수 있다.
    Ctrl+V 는 vim 과 충돌이 나서 지워버렸다.  

프로필 : Ubuntu-20.04

일반
    명령줄: wsl.exe ~ -d Ubuntu-20.04 -u <ubuntu 사용자 이름>
    ~ 이 없으면 진입시 홈디렉토리에서 시작하지 않는다.
    -u 로 사용자를 지정하거나 아래의 '디폴트 사용자 지정'을 해준다. 
    (기본 사용자 만들 때 창을 닫았더니 root 로 로그인 된다.)

모양
    글꼴: 원하는 폰트 선택
    커서: [*] 채워진 상자

Json 파일 열기
    * UI 로 설정이 안되는 옵션들 (profiles 전에 넣으면 됨)
    "multiLinePasteWarning": false,   - 여러 줄을 붙여넣기 할 때 경고 팝업 안띄움



ubuntu 를 시작하는데 홈디렉토리에서 시작하지 않아 당황했다.

위와 같이 ubuntu 설정의 명령줄에 ~ 를 넣어주면 해결된다.


* Ubuntu-20.04 를 디폴트 배포로 설정
>wsl -s Ubuntu-20.04

* Ubuntu-20.04 의 디폴트 사용자 지정
>ubuntu2004 config --default-user <ubuntu 사용자명>

2021년 4월 27일 화요일

외장 nvme 에 ubuntu 설치하기

윈도우즈 PC에 연결한 외장 nvme 에 ubuntu 설치하기


설치야 그냥하면 되는데 부트로더가 외장 nvme 에 설치되지 않고 메인 ESP(EFI system partition) 에 설치되어 외장디스크 만으로 부팅을 할 수 없다.
이전과 같이 내장 디스크를 다 떼고 외장 디스크만 연결, 설치하면 되겠지만 이번엔 그럴 수 없는 상황.
검색해보니 시스템에 ESP 가 이미 있으면 ubuntu 설치시 새로 안만들고 기존 ESP 에 추가를 한다고...


기본적으로는 참고의 링크를 따라서 하는데 B 와 C 는 건너뛰고 D 와 E 는 변형했다.

A. 환경

장치명내용
/dev/nvme0ThinkPad T15, Windows 10
/dev/sdacrucial P2 M.2 nvme 512GB
/dev/sdbUSB 메모리 + Ubuntu 18.04.5 amd64 설치 이미지
(Rufus 로 DD 이미지 모드로 쓰기)

D.  ubuntu 설치

USB 메모리로 부팅하여 ubuntu 설치 진행, Installation type 이외는 원하는 대로 설정한다.
Installation type 에서 Something else 선택 후
/dev/sda > New Partition Table 로 기존 파티션 테이블 제거하고 파티션 2개를 만든다.
/dev/sda1 - Size: 256MB, Use as: EFI System Partition
/dev/sda2 - Size: 나머지, Use as: ext4, Mount: /
# 파티션 크기 및 파티션 개수는 마음껏 설정한다. (최소한 ESP 와 / 는 필요하다)
# 참고 페이지에서는 ESP 를 100MB 로 잡고 스왑파티션도 만든다.


E. grub 설치

USB 메로리에서 'Install Ubuntu'가 아니고 'Try Ubuntu without installing' 를 선택한다.
터미널에서 다음 실행

sudo umount /media/ubuntu/<인스톨 USB 의 UUID> # ubuntu/ 밑에 하나만 있음
gparted > /dev/sda > fat32 (Flags 에서 boot, esp 확인) > 더블클릭 > UUID 복사
sudo mount /dev/sda2 /mnt          # 루트 파티션 마운트
sudo vi /mnt/etc/fstab             # /boot/efi 의 UUID 를 위에서 복사한 것으로 변경 후 저장
sudo mount /dev/sda1 /mnt/boot/efi # esp 마운트

# chroot 를 사용하기 위한 설정
sudo mount -B /dev /mnt/dev
sudo mount -B /dev/pts /mnt/dev/pts
sudo mount -B /proc /mnt/proc 
sudo mount -B /sys /mnt/sys

modprobe efivars 

sudo chroot /mnt
root@ubuntu:/# grub-install -d /usr/lib/grub/x86_64-efi --efi-directory=/boot/efi/ --removable /dev/sda
Installing for x86_64-efi platform.
Installation finished. No error reported.

F. 메인 ESP 에서 ubuntu 정보 삭제

윈도우에서 명령창에서 실행

>diskpart DISKPART> list disk DISKPART> sel disk 0 # 메인 ESP 가 있는 디스크 선택 DISKPART> list part DISKPART> sel part 1 # 메일 ESP 의 파티션 선택 DISKPART> assign letter=x # X 드라이브에 연결 DISKPART> exit >rmdir /s x:\EFI\ubuntu

G. ThinkPad 부팅메뉴에서 ubuntu 정보 삭제

ThinkPad 의 경우 부팅 디바이스 리스트에도 ubuntu 가 생겨있다. 부팅시 F1 으로 BIOS SETUP진입 Startup > Boot > ubuntu 를 선택하고 Delete ubuntu 가 xubuntu 로 바꼈으면 F10 으로 저장 종료


참고.

https://www.58bits.com/blog/2020/02/28/how-create-truly-portable-ubuntu-installation-external-usb-hdd-or-ssd

2021년 4월 7일 수요일

WSL2 VHD 압축

 WSL2 와 Docker Desktop 을 좋다고 쓰고 있었는데 어느날 드라이브가 꽉찬 것을 발견했다.

원인을 조사하다보니 의외로 WSL2 에 설치한 ubuntu 가상 드라이브(VHD)가 상당히 컷다.

검색해보니 WSL2 상의 OS 에서 파일을 삭제해도 VHD 의 크기는 변하지 않는다고 한다.

즉, VHD 는 줄어들거나 재사용 되지 않고 커지기만 한다.

그래서 주기적으로 크기를 줄여줘야 한다.


1. 먼저 대상(ubuntu 20.04 의) VHD 를 찾는다.

탐색기에서 %localappdata%\Packages 에 들어가 *.vhd 로 검색한다

내 경우는  %localappdata%\Packages\CanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgsc\LocalState\ext4.vhd

2. 커맨드 창에서 실행중인 wsl2 인스턴스를 종료한다.

>wsl.exe --list --verbose
  NAME                   STATE       VERSION
* Ubuntu-20.04           Running     2
  docker-desktop-data    Running     2
  docker-desktop         Running     2
>wsl.exe --terminate docker-desktop-data
>wsl.exe --terminate docker-desktop
>wsl.exe --terminate Ubuntu-20.04
>wsl.exe --list --verbose
  NAME                   STATE       VERSION
* Ubuntu-20.04           Stopped     2
  docker-desktop-data    Stopped     2
  docker-desktop         Stopped     2

# terminate 하고 실제 Stopped 가 되기까지 시간이 좀 걸렸다.
(안되는줄 알고 커맨드를 여러 번 실행)
# Docker 가 다시 시작할지 물어보는 창이 뜨면 Cancel

2-2. 더 간단한 방법

>wsl.exe --shutdown 

3. 커맨드 창에서 diskpart 로 vhd 크기 줄임

>diskpart
DISKPART> select vdisk file="1번에서 찾은 vhd 파일의 전체경로"

DiskPart가 가상 디스크 파일을 선택했습니다.

DISKPART> compact vdisk

  100 퍼센트 완료

DiskPart가 가상 디스크 파일을 압축했습니다.
3-1. 

4. Docker Desktop 영역 줄이기

2번에서 본 것 같이 Docker Desktop 도 WSL2 를 사용하는 것 같다.

간단히는 다음과 같이 할 수 있는데 하고나니 필요한 이미지도 지워졌다.

Docker Desktop > Troubleshoot (벌레모양) > Clean / Purge data
Delete the following data set(s)
[v] Hyper-V
[v] WSL 2
[v] Windows Containers


참고:

- https://stephenreescarter.net/how-to-shrink-a-wsl2-virtual-disk/

- https://github.com/microsoft/WSL/issues/4699#issuecomment-619394042


아직 테스트 못해본 방법

https://www.altaro.com/hyper-v/compact-vhdx-linux-filesystem/

2021년 2월 27일 토요일

vscode + vim plugin

* vscode vim plugin 설치
sidebar > extensions > vim > install

* 클립보드 사용
설정 > Vim: Use System Clipboard 입력 > 해당 항목 체크
x, y, p (이름 없는 레지스터)가 클립보드와 연동된다.

* 자동완성 끄기
설정 > Editor: Auto Closing Quotes 입력 > 해당 항목 에서 never 선택
설정 > Editor: Auto Closing Brackets 입력 > 해당 항목 에서 never 선택

* vim 모드 토글
ctrl + shift + p > vim toggle 입력 > tab > enter

아직 많이 안써봐서 이 동작을 얼마나 자주하게 될지는 모르겠지만
해보니 상당히 귀찮다. 다음과 같이 키바인딩 설정

* 키바인딩 추가
ctrl + shift + t 를 vim 모드 토글로 설정
ctrl + k s > Vim: Toogle Vim Mode 입력 > 마우스를 올렸을 때 왼쪽에 나타나는 + 클릭
ctrl + shift + t > enter

디폴트로 View: Reopen Closed Editor 가 같은 키를 사용하고 있음.
중복이지만 조건이 같을 때 사용자 바인딩이 우선하는지 vim 모드 토글로 잘 동작함.
혹시 문제가 생긴다면 다음과 같이 기존 바인딩을 지울 수 있음.

* 키바인딩 삭제
ctrl + k s > ctrl+shift+t (빈칸 없이) 입력 > View: Reopen Closed Editor 선택 > delete

* 기본 키바인딩 (vim 모드에서도 동작)
동작
ctrl + tab탭 이동
alt + shift + f문서 포멧
ctrl + shift + drun
ctrl + shift + eexplorer
ctrl + shift + gsource control
ctrl + shift + pprompt
ctrl + `터미널 토글
ctrl + ,설정

* 기본 키바인딩 (vim 모드 끄고 동작)
동작
ctrl + k s키보드 단축키
ctrl + b 사이드바 토글

# 링크가 자동으로 생성되고 ctrl + ], ctrl + t 를 그대로 쓸 수 있어 좋다.

* vim 에서 사용하지 않는 키바인딩 해제
vim 에서 ctrl + k 를 사용하지 않도록 설정하면 ctrl + k 로 시작되는 vscode 의 키바인딩을 vim 모드에서도 사용할 수 있음.
예) Markdown: Open Preview to the side (ctrl + k, v),
Format Selection (ctrl + k f) 등

설정 > Vim: Handle Keys 입력 > Edit in settings.json 클릭 > 마지막의 settings.json 예제와 같이 원하는 키(<C-k>)에 false 값을 설정

* alt 이용
ctrl + b 의 경우 vscode 의 '사이드바 토글'과 vim 의 '앞 페이지로 이동' 이 충돌.
마우스 스크롤, page up 등을 좋아하지 않아 vim 의 기능을 포기할 수 없음.
vim 모드 중에도 alt 를 누르면 메뉴로 포커스가 옮겨져 ctrl + b 가 '사이드바 토글'로 동작함. 

vim 만으로 작업할 수 있는 환경에서는 vim 을 쓰겠지만 그게 아닌 경우는
vscode + vim plugin 도 꽤 매력적이다.
vscode 와 vim 의 좋은 점만 골라 쓰기 위해서는 키바인딩을 어떻게 하느냐가
제일 중요한 것 같다. 

# settings.json
{
    "editor.autoClosingBrackets": "never",
    "editor.autoClosingQuotes": "never",
    "editor.fontFamily": "'Bitstream Vera Sans Mono', Consolas, 'Courier New', monospace",
    "editor.fontSize": 16
    "editor.linkedEditing": true,
    "html.autoClosingTags": false,
    "python.formatting.autopep8Args": ["--max-line-length", "120"],   
    "vim.useSystemClipboard": true,
    "vim.handleKeys": { 
        "<C-k>": false
    },
    "editor.fontSize": 16,
    "editor.minimap.enabled": false
}
# keybindings.json
[
    {
        "key": "ctrl+shift+t",
        "command": "toggleVim"
    }
]
# %%  jupyter-like code cell

2021년 2월 26일 금요일

GitLab 레파지토리 이전

GitLab Community Edition 12.7.5

A 레파지토리의 master 브렌치를 B 레파지토리의 a 브렌치로 이전

1. A 레파지토리의 master 에서 a 브렌치 생성
GitLab 사이트의 A 레파지토리 홈에서 + 버튼 > New branch > a 로 생성

2. 이전에 사용할 A 레파지토리 클론 생성(a 브렌치)
git clone <레파지토리 A URL> -b a a
cd a

3. 이전 할 브렌치 checkout 및 태그 패치
(필요한 것은 2에서 다 해서 그냥 건너 뜀. 내용은 참고 페이지 참고.)
 
4. 현재 origin 삭제
git remote rm origin

5. 새 origin 설정
git remote add origin <레파지토리 A URL>

6. a 브렌치 push
git push origin a

참고:
https://www.atlassian.com/git/tutorials/git-move-repository

2021년 1월 10일 일요일

서버 A 를 통해 서버 B 에 ssh

로칼에서 서버 B 에 직접 SSH 가 안되어
X) local ---> B

로칼에서 서버 A 에 SSH 한 후, 서버 A 에서 다시 서버 B 로 SSH 하는 경우
O) local ---> A ---> B

--------------------------------------------------------------------------------

$ cat ~/.ssh/config
Host A
    HostName 서버A의 이름 또는 IP 주소
    #Port 22
    User 서버A 의 사용자 이름
    #IdentityFile 비밀키 경로(로컬 PC)

Host B
    HostName 서버B의 이름 또는 IP 주소
    #Port 22
    User 서버B 의 사용자 이름
    #IdentityFile 비밀키 경로(로컬 PC)
    ProxyJump A                     # Host A 의 설정 사용
    #ProxyJump userA@A:portA # 서버 A의 계정정보 지정

# ProxyJump 가 안먹는 경우 ProxyCommand 사용 가능
Host B
    ProxyCommand ssh -W <서버B의 이름 또는 IP 주소>:<서버B의 포트> A
    User 서버B 의 사용자 이름
    #IdentityFile 비밀키 경로(로컬 PC)

--------------------------------------------------------------------------------

$ ssh B


참고: https://en.wikibooks.org/wiki/OpenSSH/Cookbook/Proxies_and_Jump_Hosts#Passing_Through_One_or_More_Gateways_Using_ProxyJump

https://qgp9.github.io/blog/2016/03/26/ssh-proxy-jump-host