반응형

나의 학생 시절, 연애 시절, 그리고 결혼하고 육아하면서 찍은 사진이 수 만장이 되었다.

너무 사진이 많고, 용량이 커서 클라우드에는 못 올렸고, 그래서 USB 외장 하드(HDD)에 차곡차곡 저장해놓았다.

그런데 이렇게 저장만 하면 뭐하나 ㅠㅠ;

 

USB 외장 하드 디스크(HDD)에 사진 파일이 있으니까 아래와 같은 것이 불편했다.

  • 옛날에 찍은 사진을 보려면, 외장 하드 디스크를 꺼내서 PC에 연결해야 한다. 매번 이 과정을 반복하는게 귀찮다.
  • 집 밖에 외출했을 때, 스마튼폰으로 다른 사람이나 내 아이에게 어린 시절의 사진을 보여주고 싶을 때 사진을 보여줄 수 없는 문제가 있었다.
  • 누군가에게 사진을 공유하고 싶은데, 그럴 수 없다.
  • 10~20년 지난 사진은 내가 어디서 이 사진을 찍었는지 기억이 안 난다. ㅠㅠ
  • 그냥 사진만 있으면, 이때 나와 나의 가족이 무슨 상황에서 찍었는지 스토리가 연상되지 않는다.  그저 웃고 있는 표정으로 "우리가 저때 행복했었나보다"라고 추측만 할 뿐이다.

그래서 큰 마음을 먹고, 이 수 만장의 사진과 동영상을 Web page로 만들었다.

  • golang으로 외장 하드 디스크에 저장된 .jpg .mov .mpeg 같은 사진 및 동영상 파일을 읽어 들여서, 자동으로 web page를 생성하도록 프로그래밍 했다. 
  • 스마트폰이나 노트북 PC에서 내가 만든 웹 서버에 접속해서, 사진 및 동영상을 볼 수 있게 했다. (초기 홈페이지 접속 화면에서 링크만 따라가면 지난 20년간 찍은 사진을 모두 볼 수 있다)
  • JPG 사진 파일의 Metadata를 읽어서, 사진을 어디서 찍었는지 알 수 있게 했다.  웹 페이지에 있는 사진을 클릭하면 이 사진을 찍은 위치를 지도에 보여주도록 했다.
  • 사진마다 언제 찍었는지 '날짜, 시각'을 표시하게 했다.
  • JPG 사진 파일명에 '동호해변에서 수영하다 슈즈를 잃어버려서 슬픈 날이네'라고 내용이 있으면, 파일명에서 이 부분만 추출해서 사진의 아래에 이 내용을 출력해준다.  은근히 이 기능에 전체 사진 앨범의 스토리를 연결해주는데 도움을 준다.

 

Golang 언어를 스터디할 겸, 가족 앨범 자동 만들기 프로그램을 만들었는데 단순히 스터디라고 하기에는 너무 결과물이 만족스럽다 :D

 

어느 정도로 만족하냐면...

내가 이 사진 앨범을 홈페이지로 제작한 날, 아내가 웹 서버에 있는 가족 사진(앨범)을 보고 몇분 지나지 않아서 눈물을 뚝뚝 흘리면서 보는게 아닌가...

아이들의 옛날 사진과 동영상이 잊고 살았던 추억을 소환했기 때문인 듯.

 

외장 하드 디스크에서 잠자고 있던 사진을 이제는 언제 어디서든 볼 수 있으니, 그 동안 묵혀 놓았던 숙제 하나를 끝낸 느낌이다 :D

반응형

 


 

작성일: 2023년 12월 15일
준비물: Raspberry Pi 5
   (Pi 3B, 4, 5 모두 테스트해봤는데, 설정 내용이 동일했다. 그러니까 아무 버전의 Raspberry Pi 다 된다는 뜻.)

 

 

 

Raspberry Pi 5를 아래와 같이 Wi-Fi AP로 구축한다면, 아래의 설명을 쭉~ 따라하면 잘 동작한다.

 

Raspberry Pi를 Wi-Fi Access Point로 사용하기 위한 구성도

 

 

아래의 명령만 복붙(Copy & Paste)하면 동작할 것이다.

(자세한 설명은 이 링크의 공식 문서를 참고)

 

 

 

DNSMasq, HostAPD를 설치

$ sudo apt install dnsmasq hostapd

## 참고: 설정 작업을 위해 임시로 서비스를 종료시킨다.
$ sudo systemctl stop dnsmasq
$ sudo systemctl stop hostapd

 

Raspberry Pi의 무선 Interface wlan0에 Static IP 설정

$ sudo vim /etc/dhcpcd.conf

... 중간 생략 ...

## 이 파일의 마지막 부분에 아래의 3줄을 추가한다.
interface wlan0
    static ip_address=192.168.4.1/24
    nohook wpa_supplicant
    
$ sudo systemctl restart dhcpcd

 

DHCP Server 설정

$ sudo cp /etc/dnsmasq.conf /etc/dnsmasq.conf.orig

$ sudo vim /etc/dnsmasq.conf
## 이 파일에 아래 2줄을 추가한다.
interface=wlan0
dhcp-range=192.168.4.2,192.168.4.20,255.255.255.0,24h


$ sudo systemctl start dnsmasq

 

Access Point Host 프로그램 설정

$ sudo vim /etc/hostapd/hostapd.conf
country_code=KR
interface=wlan0
ssid=YOURSSID
hw_mode=g
channel=7
auth_algs=1
wpa=2
wpa_passphrase=YOURPWD
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
ignore_broadcast_ssid=0


$ sudo vim /etc/default/hostapd
... 중간 생략 ...
## 아래 설정 내용을 추가한다.
DAEMON_CONF="/etc/hostapd/hostapd.conf"
... 중간 생략 ...

 

 

위와 같이 따라하면, Wi-Fi 구간의 설정은 끝 !!!

 

아래는 Raspberry Pi의 Wi-Fi 인터페이스 wlan0 으로 들어온 IP 트래픽을 유선 인터페이스 eth0 방향으로 보내면서 Masquerading 하는 설정이다.  

이 설정이 잘 되어야 무선으로 접속한 PC 또는 스마트폰이 유선 방향(즉, 인터넷 방향)으로 트래픽이 잘 전달된다.

 

IP Routing 및 Masquerading 설정

$ sudo nano /etc/sysctl.conf
... 중간 생략 ...
## 아래의 1줄을 추가한다.
net.ipv4.ip_forward=1
... 중간 생략 ...

## 라즈베리 파이에서 외부로 나가는 트래픽을 eth0의 IP address로 변경하는 설정.
## (일반적인 Source NAT 설정과 동일함)
$ sudo iptables -t nat -A  POSTROUTING -o eth0 -j MASQUERADE

## 재기동 후, 위 IPTables의 NAT 설정이 유지되도록 아래와 같이 설정을 저장함.
$ sudo netfilter-persistent save

$ reboot

 

 

위 설정 작업이 끝나면, 라즈베리 파이는 무선 AP로 동작할 것이다.

스마트폰이나 노트북으로 라즈베리 파이의 Wi-Fi 접속해보면 인터넷이 잘 될 것이다.

 

 

참고하면 좋은 문서

https://raspberrypi-guide.github.io/networking/create-wireless-access-point


 

반응형

Macbook에 windows 10을 설치하면, Trackpad(touchpad)의 scroll 방향이 반대로 되어 있다.

이럴 때, 아래와 같이 설정하면 Trackpad의 scroll 방향을 바꿀 수 있다. 

 

상하 스크롤 방향 바꾸기

Windows 10의 CMD 창을 열어서, 아래와 같이 명령을 입력한다.

Get-ItemProperty HKLM:\SYSTEM\CurrentControlSet\Enum\HID\*\*\Device` Parameters FlipFlopWheel -EA 0 | ForEach-Object { Set-ItemProperty $_.PSPath FlipFlopWheel 1 }

 

좌우 스크롤 방향 바꾸기

Get-ItemProperty HKLM:\SYSTEM\CurrentControlSet\Enum\HID\*\*\Device` Parameters FlipFlopWheel -EA 0 | ForEach-Object { Set-ItemProperty $_.PSPath FlipFlopHWheel 1 }

 

 

 

 

반응형

Ubuntu, CentOS 같은 Linux에서 sudoer를 설정하는 방법은 2가지가 있다.

 

방법 A

"/etc/sudoers.d/sejong" 파일에 아래와 같이 설정 1줄을 추가한다. 

##
## Filename: /etc/sudoers.d/sejong
##

sejong ALL=(ALL) NOPASSWD:ALL

 

 

방법 B

/etc/sudoers 파일의 마지막 줄에 아래 예제와 같이 계정 정보를 추가한다.

(sudoers 파일의 중간에 계정 정보를 추가하면 정상 동작하지 않는 경우를 발견하였다. 왜 문제가 발생하는지 원인은 모르겠고, 가능하면 마지막 줄에 넣어주는게 좋을 듯~)

$ echo "sejong ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers

 

 

결과 확인

아래와 같이 sudo -s 명령을 수행해서 암호(password)를 입력하기 않고 바로 root user로 변경되는지 확인한다.

$ id
uid=997(sejong) gid=997(sejong) groups=997(sejong)

$ sudo -s

# id
uid=0(root) gid=0(root) groups=0(root)
반응형

 


 

NAT에 대한 개념 설명은 아래의 Joinc 사이트를 참고

 

 

NAT

DNAT를 이용한 Load balancing

www.joinc.co.kr:443

 

 

일반적으로 DNAT는;

 웹 서버가 Private Network 내부에 존재하면, Public network과 Private network의 경계에 있는 DNAT 장치가 외부의 모든 요청 패킷을 수신하여 Dest Address를 Private network의 IP Address 및 TCP/UCP Port로 변경하여 전달하는 용도로 자주 이용된다. 

  

아래 명령 예제는  

  • Host machine이 eth1
  • Host machine과 Virtual machine의 Bridge interface를 virbr0    (참고: VM 내부의 IP는 192.168.122.203) 

라고 가정하고 설정한 것이다. 

$ echo 1 > /proc/sys/net/ipv4/ip_forward 

##
## 주의: 
##   아래 -F 옵션은 FORWARD 체인의 내용을 깨끗하게 지우는 명령(Flush)이기 때문에 조심해서 사용해야 한다.
##
$ iptables -F FORWARD 

##
## FORWARD 체인에 eth1 ethernet port로 나가는 트래픽을 허용하는 Rule을 추가.
##
$ iptables -A FORWARD -o eth1 -j ACCEPT 

##
## FORWARD 체인에 virbr0 ethernet port로 나가는 트래픽을 허용하는 Rule을 추가.
##
$ iptables -A FORWARD -o virbr0 -j ACCEPT 

##
## VM의 SSH 서비스로 DNAT 처리 (Port forward: 50022 --> 22)
##
$ iptables  -t nat  -A PREROUTING  -i eth1 -p TCP  --dport 50022  -j DNAT  --to 192.168.122.203:22

##
## VM의 Web 서비스로 DNAT 처리 (Port forward: 50080 --> 80)
##
$ iptables  -t nat  -A PREROUTING  -i eth1 -p TCP  --dport 50080  -j DNAT  --to 192.168.122.203:80

 

위 명령 예시에서 마지막 명령줄에 대한 설명:

Gateway의 eth1으로 들어오는 패킷중에 80번 포트번호로 접속하는 패킷은 192.198.122.203(HTTP)의 80번 포트로 보낸다.

파라미터 단위로 의미를 파악해보면, 아래와 같다.

  iptables -t nat(NAT기능을 사용하겠다) 
              -A PREROUTING(PREROUTING 체인에 Rule을 추가)
              -i eth0(eth0 인터페이스로 들어오는 패킷들에 적용한다) 
              -p TCP(TCP 프로토콜이면) 
              --dport 80(접속하려는 포트번호가 80번이면) 
              -j DNAT --to 192.168.122.203:80 
             (목적지 주소를 192.168.122.203으로 변경, 포트 번호는 80번으로 변경한다)

 

 


 

반응형

 


 


참고: 
  테스트한 날: 2023년 1월 6일
  테스트에 사용했던 OS:  Ubuntu 22.04

 

 

Ubuntu OS를 Booting할 때마다 기존  /etc/resolv.conf 파일은  resolvconf.servicesystemd-resolved.service에 의해서 overwrite 된다.

따라서 nameserver를 내가 원하는 값으로 변경하고 싶으면, 아래와 같이 추가로 설정 작업을 해야 한다.

 

##
## root 계정 권한 갖기
##

$  sudo -s


##
## Ubuntu를 설치할 때 최소 설치 또는 기본 설정으로 설치했다면
## 아래와 같이 resolvconf.service가 없어서 에러가 출력될 것이다.
## 따라서 resolvconf.service 부터 설치해야 한다.
##

$  systemctl status resolvconf.service

Unit resolvconf.service could not be found.

$

## 
## NOTE:
##   apt 명령으로 resolvconf를 설치하기 전에 임시로 /etc/resolv.conf 파일에
##   nameserver 항목에 1.1.1.1 값을 설정한다.
##
$  cat  /etc/resolv.conf
... 중간 생략 ...

nameserver  1.1.1.1         ## <-- 이 부분을 수정할 것!!!
options edns0 trust-ad

$  apt install resolvconf

$  systemctl status resolvconf

● resolvconf.service - Nameserver information manager
     Loaded: loaded (/lib/systemd/system/resolvconf.service; enabled; vendor preset: enabled)
     Active: active (exited) since Thu 2021-12-30 16:07:28 KST; 3min 14s ago

... 중간 생략 ...

$  cat  /etc/resolvconf/resolv.conf.d/head

nameserver 1.1.1.1
nameserver 8.8.8.8


##
## 위에서 설정한 값을 system에 반영하기 위해 아래와 같이 명령을 수행한다.
##

$  resolvconf --enable-updates

$  resolvconf -u

$  cat /etc/resolv.conf

nameserver 1.1.1.1
nameserver 8.8.8.8

$

##
## 위 과정이 에러 없이 수행되었다면, OS를 Reboot해서
## /etc/resolv.conf 설정 내용을 원하는 대로 반영되는지 확인해볼 것 !!!
##

$  reboot

## Rebooting ...
## ...
## ...

$  cat /etc/resolv.conf

nameserver 1.1.1.1
nameserver 8.8.8.8

$

 

 


참고:  위 설정은  Ubuntu 18.04 와 Ubuntu 20.04 에서만 테스트했음.  다른 버전의 Ubuntu는 위 설명이 효과가 있는지 아직 모름.
(2021년 12월 30일에 테스트한 결과)

 

 

 

참고:  위와 같이 nameserver를 왜 변경해야 하는 상황이 있을까?

 

apt update 또는 apt install  명령을 수행하다보면, 아래 화면과 같이  Temporary failure resolving archive.ubuntu.com 이라는 에러가 발생하는 경우가 있다.

atp 명령 수행시 Temporary failure resolving archive.ubuntu.com 에러 발생

 

왜 이런 에러가 발생할까?

nameserver 기본 설정이 아래와 같이 127.0.0.53 으로 되어 있기 때문이다.

nameserver 값을 1.1.1.1 또는 8.8.8.8 과 같이 설정하면 apt install 명령을 잘 수행될 것이다.

 

resolv.conf 기본 설정 정보


 


 

반응형

 

작성일: 2025년 9월 17일

 

CentOS, RHEL, Ubuntu 등 Linux Desktop에 원격 접속할 때, 일반적으로 VNC를 사용하곤 하는데
Ubuntu 22.04, Ubuntu 24.04 버전을 사용할 때는 VNC보다는 MS-RemoteDesktop(또는 Windows App)가
좀더 화면도 예쁘고, 화면 반응도 빨라서 MS-RemoteDesktop(또는 Windows App)을 더 많이 사용하게 된다.
그리고 설정 방법도 간단해서 더 손이 자주 간다.

 

 

주의:

Ubuntu 24.04와 Ubuntu 22.04의 Desktop Sharing(Screen Sharing)이 앱 이름이 다르고, 설정 절차도 다르다.

  • Ubuntu 24.04 에서는 Desktop Sharing 라는 이름을 사용함.
  • Ubuntu 22.04 에서는 Screen Sharing 라는 이름을 사용함.

동일한 기능인데, 부르는 이름이 다르다.

 

 

Ubuntu 24.04 Server 에서 Screen Sharing 설정하기

[ Settings ] -> [ System ] -> [ Remote Desktop ] 순서로 설정 메뉴를 찾아간다.

[ Desktop Sharing ] 항목을 Enable 상태로 변경한다.

[ Remote Control ] 항목을 Enable 상태로 변경한다.

 

 

 

Ubuntu 22.04 Server 에서 Screen Sharing 설정하기

[ Settings ] -> [ Sharing ] -> [ Screen Sharing ] 순서로 설정 메뉴를 찾아간다.

 

주의: MS-RD만 사용할 것이기 때문에 VNC는 활성화하지 않도록 한다.

 

 

 

 

 

 

이하, Client 앱 설치하는 방법

 

 macOS Client 에서 Remote Desktop(Screen Sharing) 설정하기

Microsoft Remote Desktop 또는 Windows App를 사용하기 위해서는 아래와 같이 Apple App Store에서 

"Windows App"을 검색하여, 설치한다.

 

macOS용 Windows App(옛날에 Microsoft Windows App 이라고 했던 앱이다)

 

위 앱을 설치 후, Ubuntu 서버의 IP Address와 ID, Password만 입력하면 설정 끝 !!!

그런 후에 "Connect" 메뉴를 선택하면 접속이 잘 된다.

 

 

 

 

Ubuntu Client 에서 Screen Sharing (Remote Desktop) 설정하기

Ubuntu Client에는 Remmina 앱이 있어야 Ubuntu Server에 MS-RD로 접근할 수 있다.

내가 설치한 기억이 없는걸보면, OS 설치할 때 Remmina는 이미 설치되어 있던 것 같다.

위 화면과 같이 Remmina를 실행하고, 아래 화면에서 접속 정보(IP Address, ID, Password)를 입력하고 Connect하면 Ubuntu Server의 Desktop에 잘 접근된다.

 

 

 

 

 

 

반응형

CentOS인 경우에 아래와 같은 Samba(SMB)를 설정한다. 

$  yum  install  samba 
...

$  cat  /etc/samba/smb.conf 
  ... 중간 생략 ... 
        security = user 
        passdb backend = tdbsam 
  ... 중간 생략 ... 
  [homes] 
        comment = Home Directories 
        browseable = no 
        writable = yes 
        read only = no
  ... 중간 생략 ... 

<참고: UNIX 시스템 계정 andrew가 이미 생성되어 있다고 가정> 
$  smbpasswd  -a  andrew 
$  systemctl start  smb
(또는  $ systemctl start smbd)
$  systemctl enable smb
(또는  $ systemctl enable smbd)

 

+ Recent posts