2 분 소요

라즈베리파이 이미지 설정시 주의할 점과 ssh키 만들기, 행렬미분 공부하기

라즈베리파이 이미지 초기설정하면서 느낀것, 아이디에는 문자가 들어가게 하자!

[warning-issue] No session for pid XXX

처음에 이미지를 구울때 계속 No session for pid XXX라는 경고창이 뜨는 문제가 발생했었다.

모든 버전으로 다 설치를 해봐도 계속 문제가 생겼다. 이 문제를 해결하는데 3~4일은 사용한 것 같다.

나중에는 내 컴퓨터의 문제는 아닐지 sd 카드가 어디 긁혀서 문제가 생긴건 아닌지 하는 생각도 들었다.

이런 생각을 갖고 교수님 연구실에 찾아갔고 결국 해결하였다.

문제는 아이디를 숫자로만 설정해놔서 그런것이었다…

그냥 pi라는 기본 아이디를 사용했으면 애초에 이런문제를 겪지도 않았고, 쓸데없는 에너지 소비도 하지 않았을 것이다. 너무 고통스러웠다. 그래도 해결했으니 다행이라 생각한다.

혹시나 또 이딴 문제가 발생하면 다시 이미지 굽고 사용자 설정에서 문자 말고 숫자고 골고루 들어갔나 확인하자.

imager 프로그램에서 설정해주는 것보다, 초기설정 안해주고 일단 들어가서 설정해주는 걸로 하자!

교수님께서 RaspberryPi-Imager에서는 버전에 대한 것만 설정해주고, ssh라던가 그런거는 일단 들어가서 설정해주는 방향으로 진행하라고 말씀하셨다.

아 참고로 나의 라즈베리파이 계정은 이걸로 고정하겠다.

아이디: pi

비밀번호: pi1234

4.3 Git 서버 - SSH 공개키 만들기

많은 깃서버들은 ssh공개키를 만든다고 한다(깃버서라는게 있는지 처음 알았다. 깃허브가 깃서버인가? 그냥 클라우드 서버 아니었나?ㄷㄷ?)

궁금해서 GPT형님한테 물어보았다.

이렇게 답해주었다.

깃은 분산-버전-관리 시스템으로서, 여러 사용자가 협업하여 소스코드를 효과적으로 관리하고 추적할 수 있도록 도와줍니다. 깃서버는 여러 사용자가 협업하는 프로젝트에서 중앙 저장소 역할을 하는 서버입니다. 사용자들은 서버에서 소스코드를 가져오고(pull) 서버에다가 변경사항을 업로드(푸쉬)해서 여러 사용자가 프로젝트를 관리할 수 있도록 하는 체계라 볼 수 있습니다.

그리고 물어보신 깃서버라는 거는요, 여러가지 형태로 존재할 수 있어요.

가장 유명한 깃서버가 바로 깃허브입니다. 근데 클라우드 서버라 생각하셨던건 이게 바로 클라우드 기반의 깃 저장소 호스팅 플랫폼이라 좀더 정확히 설명할 수 있기 때문입니다. 뿐만 아니라 깃랩도 있고, 지라에서 만든 비트버킷이라는 것도 존재합니다.

이러한 플랫폼들로 여러분들은 어떤 서비스를 이요할 수 있으냐 하면은,

프로젝트 관리, 이슈 트래킹, CI/CD(지속적인 통합과 지속적인 배포)등이 있겠습니다. 이게 전부라고 봐도 되긴 합니다ㅎ.

이렇게 수많은 깃서버들이 있는데, 한가지 공통점은 모두 보안을 위해 public key로서 SSH를 사용한다. 이 ssh라 불리는 공개키를 사용하려면 일단 공개키를 만들어야 겠다.(참고로 sd카드에 처음으로 라즈비안 이미지를 구우면 generating ssh public key라는 문구가 뜨는데, 이것은 라즈비안 자체에서 ssh를 기본적으로 발급하고 있다는 뜻이다. 그래서 윈도우 환경처럼 별도로 깃을 설치하는 수고를 안해도 된다. 개꿀!!)

이 ssh키는 보통 ~/.ssh에 저장이 된다. 그래서 만약 라즈베리파이를 열고 해당 경로에 접속하면 이렇게 이미 공개키가 생성된 것을 볼 수 있다.

$ cd ~/.sh
$ ls
authorized_keys2	id_dsa	known_hosts
config				id_dsa.pub

이처럼 .ssh라는 디렉토리에 들어가면 총 5개의 파일이 있는 것을 볼 수 있다.

여기서 ~.pub이 공개키를 의미하고, 그 외에 나머지는 개인키이다. 이처럼 키는 public key와 private key로 이분법적으로 분류된다.

만약 실수로 키를 삭제해버렸으면? 어떡하냐? 뭘 어떡하긴, 다시 만들어야지!

ssh-keygen이라는 프로그램을 통해서 키를 생성한다. (다행히 운영체제 모두 기본으로 탑재되어 있다)

리눅스나 맥 계열에서는 SSH 패키지에 포함되어 있고, 윈도우는 ‘Git for Windows’에 들어있다고 한다.

출처: https://git-scm.com/book/ko/v2/Git-%EC%84%9C%EB%B2%84-SSH-%EA%B3%B5%EA%B0%9C%ED%82%A4-%EB%A7%8C%EB%93%A4%EA%B8%B0

8.3 행렬미분

import numpy as np

야코비 행렬들의 고유값 계산하기

np.linalg.eig([[4,0],[0,2]])[0]
array([4., 2.])
np.linalg.eig([[2,0],[1,-2]])[0]
array([-2.,  2.])
np.linalg.eig([[0,-4],[2,-4]])[0]
array([-2.+2.j, -2.-2.j])

뉴턴 방법으로 √2를 구하는 파이썬 코드

def f(x):
    return 2.0-x*x
def d(x):
    return -2.0*x

x=1.0
for i in range(5):
    x = x - f(x)/d(x)
    print("%2d: %0.16f" % (i+1,x))
    
print("NumPy says sqrt(2) = %0.16f for a deviation of %0.16f" %
     (np.sqrt(2), np.abs(np.sqrt(2)-x)))
 1: 1.5000000000000000
 2: 1.4166666666666667
 3: 1.4142156862745099
 4: 1.4142135623746899
 5: 1.4142135623730951
NumPy says sqrt(2) = 1.4142135623730951 for a deviation of 0.0000000000000000

놀랍게도, 단 5회 반복만에 √2를 소수점 이하 16자리까지 정확히 알아냈다. 뉴턴방법은 대단했다!

2차원 뉴턴 방법

임계점들이 실제로 도출되는지 확인하기 위해 초기 추측값, x0=[-1 2]를 지정해보았다

def f(x):
    x0,x1 = x[0,0],x[1,0]
    return np.array([[4*x0-2*x0*x1],[2*x1+x0*x1-2*x1**2]])

def JI(x):
    x0,x1 = x[0,0],x[1,0]
    d = (4-2*x1)*(2-x0-4*x1)+2*x0*x1
    return (1/d)*np.array([[2-x0-4*x1,2*x0],[-x1,4-2*x0]])

x0 = float(input("x0: "))
x1 = float(input("x1: "))
x = np.array([[x0],[x1]])

N = 20
for i in range(N):
    x = x - JI(x) @ f(x)
    if(i > (N-10)):
        print("%4d: (%0.8f, %0.8f)" % (i, x[0,0], x[1,0]))
x0: -1
x1: 2
  11: (0.00004807, -1.07511237)
  12: (0.00001107, -0.61452262)
  13: (0.00000188, -0.27403667)
  14: (0.00000019, -0.07568702)
  15: (0.00000001, -0.00755378)
  16: (0.00000000, -0.00008442)
  17: (0.00000000, -0.00000001)
  18: (0.00000000, -0.00000000)
  19: (0.00000000, -0.00000000)

댓글남기기