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 사용자명>