라즈베리 파이 ssh 인증키로 로그인

라즈베리 파이에 ssh로 접속해서 작업을 하는데 리부팅 할 때마다 패스워드를 입력하려니 귀찮아서 다른 방법이 있나 찾아보았다. 있었다

다만

맥북에서 ssh 인증키를 복사해 올렸는데 맥미니 known_hosts 에 충돌하는 값이 있어서 접속이 되지 않았다. 수동으로 삭제하고 나니 다시 잘 된다.


diskutil device 명에 관한 건

일반적으로 diskutil1을 사용함에 있어서 명령의 대상이 되는 디스크는 disk identifier(disk1, disk2, disk3 등의 disk+숫자조합의 형식)나 disk identifier를 포함하는 node entry를 사용합니다(/dev/disk1이나 /dev/rdisk2 등의 형식)

다른 형식의 운영체제에서는 어떨지 모르겠습니다만 macOS(10.14 mojave 기준)에서는 위의 disk*/dev/disk3 외에도 볼륨 이름이나 마운트 포인트를 device 명으로 사용할 수 있습니다.

macOS의 커맨드라인에서 man diskutil 을 쳐서 확인을 해보면 명령어 형식은 다음과 같습니다.

mountDisk device

unmountDisk | umountDisk [force] device

eject device

eraseDisk format name [APM[Format] | MBR[Format] | GPT[Format]] device

eraseVolume format name device

partitionDisk device [numberOfPartitions] [APM[Format] | MBR[Format] | GPT[Format]] [part1Format part1Name part1Size part2Format part2Name part2Size part3Format part3Name part3Size …]

resizeVolume device limits | mapsize [-plist] | R | size [numberOfPartitions] [part1Format part1Name part1Size part2Format part2Name part2Size part3Format part3Name part3Size …]

일관되게 device 파라미터가 등장합니다. 아래 쪽으로 내려가면 device 파라미터에 대한 설명이 나옵니다.

DEVICES A device parameter for any of the above commands (except where explicitly required otherwise) can usually be any of the following:

o The disk identifier (see below). Any entry of the form of disk*, e.g. disk1s9.

o The device node entry containing the disk identifier. Any entry of the form of /dev/[r]disk*, e.g. /dev/disk2.

o The volume mount point. Any entry of the form of /Volumes/*, e.g. /Volumes/Untitled. In most cases, a “custom” mount point e.g. /your/custom/mountpoint/here is also accepted.

o The URL form of any of the volume mount point forms described above. E.g. file:///Volumes/Untitled or file:///.

o A UUID. Any entry of the form of e.g. 11111111-2222-3333-4444-555555555555. The UUID can be a “media” UUID which IOKit places in an IOMedia node as derived from e.g. a GPT map’s partition UUID, or it can be an AppleRAID (or CoreStorage) set (LV) or member (PV) UUID.

o A volume name, e.g. Untitled. This match is only attempted if the given device is not of the form [/dev/][r]disk*, nor [/Volumes/]*. The match attempt is against the intrinsic volume label, not against the terminal component, if mounted, of its mount point.

그러니까 disk identifier나 node entry 외에도 마운트 포인트나 마운트 포인트를 가리키는 URL 형식, 기기 UUID나 볼륨 명도 deivce 파라미터로 쓸 수 있다는 겁니다. 볼륨 이름은 유용하겠네요.

diskutil 명령어에 대한 추가적인 자세한 설명은 터미널에 man diskutil을 입력하거나 구글에 검색해서 볼 수 있습니다.

  1. 외부 저장장치 등을 마운트/마운트 해제하거나 포맷하는 등의 용도로 사용합니다. 


launchd와 cron

분명 어디선가 launchd에 비해 cron을 추천하지 않는다는 항목을 읽었는데 어디였는지 기억이 나지 않아서 한동안 찾아다녔던 적이 있다. 알고 보니 Apple Developer 페이지였다.

Note: Although it is still supported, cron is not a recommended solution. It has been deprecated in favor of launchd.

추가적으로 cron은 지정한 시간에 컴퓨터가 잠자기 상태이면 실행이 되지 않으며 다음 지정한 시간이 도달할 때까지 실행이 되지 않는다. 반면 launchd는 지정한 시간에 컴퓨터가 잠자기 상태이면 다음 컴퓨터가 잠자기에서 깨어날 때 실행이 된다고 한다.

하지만 두 프로그램 모두 지정한 시간에 컴퓨터가 꺼진 상태이면 다음 지정한 시간이 도달해야 실행이 이루어진다.



마스토돈 커스텀 스타일 적용하기

3·1절을 맞아 GS칼텍스에서 공개한 독립서체 '윤봉길'을 적용해보았습니다.

제 개인 인스턴스라는 점은 제가 관리자가 된다는 뜻이고 제가 하고 싶은 걸 시도해 볼 수 있다는 뜻이죠. 이번에는 스타일을 적용해보고 배운 점을 간략하게 적어봅니다.

커스텀 스타일을 적용하는 데 있어 기본적인 사항은 이 쪽 에 적혀있습니다.

  • 마스토돈 계정에서 ~/live/app/javascript/styles 에서 새로 custom.scss 를 생성하고
  • 스타일 작성을 마친 후에 파일 끝에는 반드시 @import application; 하고
  • ~/live/config/themes.yml 파일에서 custom: styles/custom.scss 의 형식으로 추가해서 테마 목록에 추가할 수 있습니다. (마스토돈 2.0.0부터 해당)
  • webpack-dev-server 를 재시작하고 mastodon 프로세스를 모두 재시작하면 새로 생성한 테마가 인식이 됩니다.

여기까지는 공식 문서에 적혀있는 내용. 아래서부터는 개인적으로 적용하면서 배운 내용.

  • scss 파일명은 상관이 없습니다.
  • 굳이 @import application; 안 해도 상관없긴 한데 그러려면 ~/live/app/javascript/styles/mastodon 에 있는 파일들 전부 @import 해야 함. 둘 다 안 하면
  • @import 도 순서에 영향을 받을 수 있는데 먼저 @import 하면서 !default; 지정하면 다음에 오는 @import 에서 !default; 지정해도 소용이 없습니다. 그래서 반드시 파일 끝에서 @import 해야 하는 것. via SO
  • 컨텐츠 보안 프로토콜 등의 사유로 외부 서버에서 폰트 로딩은 기본적으로 불가능한 듯. 다만 config/initializers/content_security_policy.rb 파일을 수정해주면 가능은 했다는 글. via GH 이번에는 그냥 내려받아서 로컬에서 적용
  • @import 'custom/variables'; 에서 variables 뒤에 s 붙어있습니다… 근데 또 @import 'application'; 에는 안 붙어있음…
  • webpack-dev-server를 재시작하라는데 몰라서 매번 변경사항 적용할 때마다 asset precompile하고 프로세스 재시작해 줌. 뭐 적용되면 된 거죠.
  • 오픈타입 폰트를 적용하지 asset precompile 과정에서 에러가 납니다. 트루타입이나 웹폰트를 쓰니 문제없이 진행됩니다

대충 트리를 그려보면 이런 식이 됩니다.

live
├── app
│   └── javascript
│       ├── application.scss >> custom.scss 에서 (보충적으로) import
│       ├── fonts
│       │   └── font_files_here >>> fonts_family_rules.scss 에서 참조
│       └── styles
│           ├── custom
│           │   └── variables.scss >>> custom.scss 에서 import
│           ├── custom.scss >>> themes.yml 에서 규정
│           └── fonts
│               └── fonts_family_rules.scss >>> variables.scss 에서 import
└── config
    └── themes.yml