디바이스에 새로운 인증서를 배포하는 방법

  1. 새로운 인증서 생성 및 등록: 이미 앞서 설명한 것처럼 새로운 인증서를 생성하고 AWS IoT에 등록 및 활성화한다.
  2. 새로운 인증서와 키 파일 디바이스에 전달: 새로운 인증서와 프라이빗 키 파일을 디바이스에 전달합니다. 이를 위해 여러 가지 방법을 사용할 수 있다.
  3. 디바이스 소프트웨어 업데이트: 디바이스 소프트웨어를 업데이트하여 새로운 인증서를 사용하도록 구성한다.

1. 새로운 인증서 생성 및 등록

앞서 설명한 방법을 통해 새로운 인증서를 생성하고 AWS IoT에 등록.

2. 새로운 인증서와 키 파일 디바이스에 전달

디바이스에 새로운 인증서와 프라이빗 키 파일을 전달하는 방법

A. 수동 업데이트

디바이스에 물리적으로 접근할 수 있는 경우, USB 드라이브 등을 이용하여 수동으로 파일을 업데이트합니다.

  1. 파일 복사: 새로운 인증서(newDeviceCert.pem)와 프라이빗 키(newDevicePrivateKey.pem) 파일을 USB 드라이브 등에 복사합니다.
  2. 디바이스에 연결: USB 드라이브를 디바이스에 연결하고 파일을 디바이스의 적절한 위치에 복사합니다.

B. OTA(Over-The-Air) 업데이트

디바이스가 원격에서 업데이트를 받을 수 있는 경우, OTA 업데이트를 통해 인증서를 배포할 수 있습니다.

  1. 서버에 파일 업로드: 새로운 인증서와 프라이빗 키 파일을 서버에 업로드합니다.
  2. 디바이스 소프트웨어 업데이트: 디바이스가 서버로부터 새로운 인증서와 키 파일을 다운로드하고, 이를 적용하도록 소프트웨어를 업데이트합니다.

3. 디바이스 소프트웨어 업데이트

디바이스 소프트웨어를 업데이트하여 새로운 인증서를 사용하도록 구성합니다. 디바이스 소프트웨어가 MQTT를 통해 AWS IoT와 통신하는 경우, 보통 다음과 같은 단계를 따릅니다.

예시: Node.js 기반 디바이스 소프트웨어 업데이트

디바이스 소프트웨어가 Node.js 기반이라고 가정하면, 다음과 같은 코드로 새로운 인증서를 적용할 수 있습니다.

const mqtt = require('mqtt');
const fs = require('fs');

// 인증서 및 키 파일 경로
const KEY = fs.readFileSync('path/to/newDevicePrivateKey.pem');
const CERT = fs.readFileSync('path/to/newDeviceCert.pem');
const CA = fs.readFileSync('path/to/AmazonRootCA1.pem'); // AWS 루트 CA

// MQTT 클라이언트 설정
const options = {
    key: KEY,
    cert: CERT,
    ca: CA,
    clientId: 'yourDeviceClientId',
    host: 'your-iot-endpoint',
    port: 8883,
    protocol: 'mqtts'
};

// MQTT 클라이언트 생성
const client = mqtt.connect(options);

client.on('connect', () => {
    console.log('Connected to AWS IoT');
    // 추가 MQTT 핸들러 코드
});

client.on('error', (err) => {
    console.error('Connection error: ', err);
});

예시: C 기반 디바이스 소프트웨어 업데이트

디바이스 소프트웨어가 C 기반이라고 가정하면, 다음과 같이 새로운 인증서를 적용할 수 있습니다.

#include "aws_iot_mqtt_client_interface.h"

// 인증서 및 키 파일 경로
#define AWS_IOT_PRIVATE_KEY_PATH "path/to/newDevicePrivateKey.pem"
#define AWS_IOT_CERTIFICATE_PATH "path/to/newDeviceCert.pem"
#define AWS_IOT_ROOT_CA_PATH "path/to/AmazonRootCA1.pem"

// MQTT 클라이언트 설정
AWS_IoT_Client mqttClient;
IoT_Client_Init_Params mqttInitParams = iotClientInitParamsDefault;
IoT_Client_Connect_Params mqttConnectParams = iotClientConnectParamsDefault;

mqttInitParams.pHostURL = "your-iot-endpoint";
mqttInitParams.port = 8883;
mqttInitParams.pRootCALocation = AWS_IOT_ROOT_CA_PATH;
mqttInitParams.pDeviceCertLocation = AWS_IOT_CERTIFICATE_PATH;
mqttInitParams.pDevicePrivateKeyLocation = AWS_IOT_PRIVATE_KEY_PATH;

// MQTT 클라이언트 초기화 및 연결
rc = aws_iot_mqtt_init(&mqttClient, &mqttInitParams);
if (SUCCESS != rc) {
    printf("aws_iot_mqtt_init returned error : %d ", rc);
    return rc;
}

rc = aws_iot_mqtt_connect(&mqttClient, &mqttConnectParams);
if (SUCCESS != rc) {
    printf("Error(%d) connecting to %s:%d", rc, mqttInitParams.pHostURL, mqttInitParams.port);
    return rc;
}

printf("Connected to AWS IoT\n");
// 추가 MQTT 핸들러 코드

결론

디바이스에 새로운 인증서를 배포하는 과정은 디바이스의 특성에 따라 다르지만, 일반적으로 새로운 인증서를 생성하고, 이를 디바이스에 전달한 후, 디바이스 소프트웨어를 업데이트하여 새로운 인증서를 사용하도록 구성하는 방식으로 진행됩니다. OTA 업데이트를 지원하는 경우, 원격으로 인증서를 배포하는 것이 가장 효율적이다.

electron 앱을 만들고 있는데 build할때 dist 디렉토리를 깨끗하게 제거하고 싶었다.

 

rimarf 모듈을 사용하면 된다.

 

  • 설치방법

npm i rimraf -g

 

  • 사용방법

npm i rimraf  dist

 

 

"build:electron:mac": "npx rimraf dist && yarn react-build && electron-builder",
 

 

 

원래 사용하던 IDE는 젯브레인의 WebStorm을 주로 썼다.

패키지 구매해서 JAVA가 필요할때는 IntelliJ를 쓰고 파이썬이 필요하면 PyCharm을 사용했다.

DB 클라이언트도 DataGrip 만큼 좋은걸 아직도 찾지 못했다.

코파일럿 같은 AI 어시스턴트가 나오면서 젯브레인에 실망했다.

젯브레인에도 AI 어시스턴트 기능이 들어갔는데 패키지 구매자한테도 돈을 따로 받는다. 띠로리~

패키지 구매 리뉴얼을 중지하고 VS Code를 사용하기 시작했다.

 

나이를 먹어서 눈이 잘 안보여서 그런지 집에서 사용하는 4k 모니터에서 보면 글자가 작어서 좀 키우고 싶어서 이것저것 눌러보다가 단축키를 알아냈다.

 

  • 글자 크기 키우는 단축키 : CTRL + +

 

글자를 키우고 코딩을 하려고 하니 이게 왠걸 영문자가 이상하게 타이핑된다.

 

 

자간도 넓어지고 글자 크기도 이상해졌다.

글자크기 키우려고 이것저것 눌러보다가 이상한게 눌렸나보다.

 

이걸 복원하는 단축키는 Atl + =

 

이제 본격적으로 개발을 시작하려고 하니 와이프가 이마트 가자고한다.

개발은 언제하지?

Ubuntu 20.04.6 LTS

 

1. 서비스 파일 만들기 

/etc/systemd/system 디렉토리에 파일을 만든다.

 

vi myservice.service

[Unit]
Description=서비스 설명 
Wants=network.target
After=network.target

[Service]
Type=simple
WorkingDirectory=작업디렉토리 /home/ubuntu/myservice
Environment="PATH=/home/ubuntu/.nvm/versions/node/v16.10.0/bin:$PATH"
ExecStart=/opt/conda/envs/pytorch/bin/uvicorn main:app --reload --host=0.0.0.0 --port=8000
Restart=on-failure
RestartSec=3s
StandardOutput=file:/var/log/myservice/log.log
StandardError=file:/var/log/myservice/log.log

[Install]
WantedBy=multi-user.target

 

2. 서비스 등록 및 실행

* 서비스 데몬 재실행

systemctl daemon-reload

 

* 서비스활성화

systemctl enable myservice.service

 

* 서비스 시작

systemctl start myservice.service

 

* 서비스 상태 확인

systemctl status myservice.service

 

3. 트러블슈팅

로그 파일 경로의 디렉토리가 없다면 만들어준다.

 

 

참고 https://www.freedesktop.org/software/systemd/man/latest/systemd.service.html

리액트 Link 컴포넌트는 a 태그 처럼 링크 스타일이 나와서 보기 안좋을 때가 있다.

css를 잘 몰라서 이리 저리 헤매다가 되게 간단하게 해결함.

<Link to="/login" style={{ color: 'inherit', textDecoration: 'inherit'}}>

 

5년전부터에 AWS Beanstalk으로 돌리던 서버에 유저도 다 떨어지고 Beanstalk의 nodejs 버전도 지원이 중단된 상태가 되었다.

Beanstalk은 하나의 환경마다 LB가 붙어서 비용도 아낄겸 ECS로 옮겼다.

기존에 사용하던 Nodejs 버전이 10.15.3 이라서 Docker에 nodejs:10.15.3으로 올렸다.

오늘 디비도 정리하려고 마이그레이션 해놓고 디비 스트링을 바꾸고 커밋했는데 갑자기 docker 빌드가 안된다.

3일전만해도 됐었는데 말이지. 참 어이가 없어 ㅠㅠ

 

빌드 로그를 보니 nodejs 의존성 모듈중에 apt를 사용해서 설치하는 것이 있는데 apt udpate가 안되는 것이었다.

그런데 docker nodejs 깃헙에 가보니 몇년전부터 발생한 이슈라네? 3일전에는 왜 된거야-_-

 

https://bbs.ruliweb.com/community/board/300779/read/41745001

 

되는데 이유를 모르겠어!!!!!!!!.jpg | (백업)유머 게시판(2018-2020) | 루리웹

되는데 이유를 모르겠어!!!!!!!!.jpg

bbs.ruliweb.com

이분은 뭐하고 계실까?

 

아무튼 그냥 ubuntu에 nvm으로 node 설치하려고 했더니 PATH 때문에 잘 안되더라.

아 귀찮아 진짜!!!

docker ubuntu 에 nvm 사용해서 nodejs 설치하는 방법

#dockerfile
FROM ubuntu

SHELL ["/bin/bash", "--login", "-c"]

ENV NVM_DIR="/root/.nvm"
ENV NODE_VERSION 10.15.3

RUN curl https://raw.githubusercontent.com/creationix/nvm/master/install.sh | bash \
    && . $NVM_DIR/nvm.sh && nvm install $NODE_VERSION

ENV NODE_PATH $NVM_DIR/versions/node/v$NODE_VERSION/lib/node_modules
ENV PATH $NVM_DIR/versions/node/v$NODE_VERSION/bin:$PATH
RUN node -v
RUN npm -v

 

 

  • How to lean any lnaguage in six months
 

 

 

  • 버려야할 속설
  1. 타고난 재능이 필요하다.
  2. 언어를 배우려면 해당 국가에 가야한다.
 
  • 다섯개 원칙
  1. 4가지 단어 attention, meaning, relevance, memory 관련있는 내용에 집중하라
  2. 언어를 의사소통하기위한 도구로서 사용할 것
  3. 이해가능한 수준의 언어입력
  4. 생리학적인 훈련 : 모든사람은 뇌에 필터가있다 익숙한 소리와 익숙하지 않은 소리를 구분하는 필터,  말하는것은 근육이 필요하다
  5. 심리, 생리적 상태 : 슬프고, 화나고, 걱정하고있다면 배울수없다. 기쁘고, 편안하고 알파브레인의 상태에 있고 호기심이 있다면 빨리 배울 수 있다.
 

 

  • 7가지 행동

  1. 많이 들어라
  2. 단어를 이해하기전에 의미를 먼저 이해하라
  3. 조합해라
  4. 핵심에 초점을 두어라
  5. 언어부모를 구해라 : 와이프는 노노
  6. 얼굴 근육을 사용해서 소리를 내어라

 




블로그 돌아 다니다 보면 소스코드가 보기 쉽게 색깔이 입혀져서 올린 분들이 많다.


나도 해보고 싶어서 바로 적용!!

설치하기 싫다면 Readiz님이 만든 SyntaxHighlighter Remote 사용 http://blog.readiz.com/11#.U9pddfl_vSk

http://alexgorbatchev.com/SyntaxHighlighter/download/ 여기 들어가서  Click here to download 를 눌러서 다운받음.

압축을 풀고 티스토리 관리 페이지에서 HTML/CSS 편집으로 들어가 파일업로드 선택

압축 푼 파일중에 script 폴더와 styles 폴더 안에 있는 파일을 업로드 한다.

다른 파일은 필요없음






다음에 HTML/CSS 파일 편집 화면으로 가서 아래 내용을 <haed> </haed> 사이에 복붙!

21번째 라인에 shThemeMidnight.css 가 있는데 요게 테마 설정하는 거라서

http://alexgorbatchev.com/SyntaxHighlighter/manual/themes/ 요기서 맘에 드는거 선택하면 됨


 
























여기까지 하면 끝!


글쓸때는 html 선택해주고 아래 처럼 쓰면 진짜 끝!


<pre class="brush:언어이름">

   소스코드

<pre>


적용 가능한 언어는 http://alexgorbatchev.com/SyntaxHighlighter/manual/brushes/ 요기가면 있다.





'내 시간을 뺐는 참사들' 카테고리의 다른 글

G2 4.4.2 루팅  (0) 2014.06.28
Git curl_multi_timeout 에러  (0) 2014.01.28
우분투 노트북 뚜껑 닫아도 안꺼지게 하기  (0) 2013.10.20
LDAP logfile 설정  (0) 2013.06.22
grep 시간  (0) 2013.02.18



python 모듈 설치하는데 아래와 같이 뜨더군요



gcc-pthread -fno-strict-aliasing-DNDEBUG -g-fwrapv -O2 -Wall -Wstrict-prototypes-fPIC -I/usr/include/python2.7 -c lib/sqlalchemy/cextension/processors.c -o build/temp.linux-x86_64-2.7/lib/sqlalchemy/cextension/processors.o

lib/sqlalchemy/cextension/processors.c:10:20: fatal error:Python.h:Nosuchfileor directory

compilation terminated.

***************************************************************************

command'gcc'failed withexit status1

WARNING: TheC extension could not be compiled,speedups arenot enabled.

Failure information,ifany,is above.

Retrying the buildwithout the C extensionnow.

***************************************************************************


python-dev만 설치해주면 간단히 해결됩니다


sudo apt-get install python-dev


폰을 바꾸고 싶지만 지랄같은 위약3때문에 g2를 계속 쓰기로하면서 루팅을 해보기로 했다.


  • 루팅 순서
    • 파일 ioroot25.zip 다운로드
    • 파일 출처 http://forum.xda-developers.com/showpost.php?p=48709232&postcount=869
    • PC에 LG United Mobile 드라이버 설치 링크
    • G2 화면 잠금 모드 해제
    • G2 시스템설정 - 일반 - 개발자옵션 - USB 디버깅 선택
    • PC에 G2연결
    • 다운받은 ioroot25.zip 압축 해제 후 root.bat 실행
    • 자동 재부팅 및 리커버리 모드 자동 진입
    • 리커버리 모드에서 'apply update from ADB' 전원키로 선택
    • root.bat 실행차아에서 엔터키 클릭
    • 리커버리 모드에서 reboot system now 선택하면 재부팅 후 루팅 완료


+ Recent posts