systemd를 사용하는 리눅스 파일 시스템을 다른 머신으로 복사할 때 주의 점

사용중인 리눅스 머신의 파일시스템을 다른 머신에서 그대로 사용하기위해 rsync -aXHv –numeric-ids /source/ /target/ 과같이 1:1복사하여 두 머신을 켰을 경우 두 머신이 동일한 IP를 받게되었다.

dhcp 클라이언트가 mac address가 아닌 다른 방식으로 아이피를 얻어오는것같다. 구글링에서 IP를 다시 얻는 방법은 다들 systemd-networkd를 재시작하는 정도와 다른 방법도 있었지만 이게 먹혀들지않았다. /run/systemd/netif/leases 내 생성되어있는 파일을 지워보라는 방법 또한 안먹혔다. 혹시나 파일 내 clientid 값이 둘 다 같은것이 원인인가했지만 이걸 다시 생성하는 방법도 안나오고 hostname이 동일해서 그런지 확인하는 중 hostnamectl 명령을 실행하여 확인이 가능한 machine id 값이 동일한것에서 설마 하였다.

buildroot에서 systemd를 사용하게 되면 간혹 systemd-machine-id-setup 명령을 실행해야 하는 경우가 있어 이미 생성 된 /etc/machine-id 파일을 지우고 명령을 실행하니… 바로는 안되었고 재부팅을 하니까 복사된 파일시스템을 사용하는 머신은 새로운 IP를 받게되었다.

덕분에 이번에도 한시간 넘게 시간을 낭비했다(…)

Qt5 (5.11.2 기준) MySQL 함께 빌드

1. MySQL 홈페이지에서 MySQL 서버 다운로드
https://dev.mysql.com/downloads/windows/installer/8.0.html
Connector/C++은 Qt의 SQL 플러그인에서 지원안하며, Connector/C는 서버 패키지에 포함되어있다… 다른건 다 개별로 배포하면서 C 라이브러리는 서버 패키지에서 설치하도록 변경되었는지는 이유를 모르겠다.

2. Connector/C 설치
Custom 설치로 선택 후 아래와같이 트리뷰를 펼치면 x64, x86 두가지 아키텍처가 있으며 이 중 한가지만 설치가능하다(…)

필요한 아키텍처를 선탁하여 설치하면 각각 아래 경로에 설치된다. (8버전 기준)
x86: C:\Program Files (x86)\MySQL\MySQL Connector C 6.1
x64: C:\Program Files\MySQL\MySQL Connector C 6.1
폴더가 서로 다른데 왜 둘 다 설치 못하는지는 미지수.

3. 필수 유틸 설치
Python 2.7버전, 그리고 펄을 다운받아 설치한다. 설치 후 콘솔에서 python, perl 실행해보고 INCLUDE, LIB 변수 값 수정.

4. 환경변수 설정
명령 도구모음 x86 또는 x64를 실행한 후 아래와같이 실행하여 환경변수에 추가.
x86:
set INCLUDE=%INCLUDE%;C:\Program Files (x86)\MySQL\MySQL Connector C 6.1\include
set LIB=%LIB%;C:\Program Files (x86)\MySQL\MySQL Connector C 6.1\lib

x64:
set INCLUDE=%INCLUDE%;C:\Program Files\MySQL\MySQL Connector C 6.1\include
set LIB=%LIB%;C:\Program Files\MySQL\MySQL Connector C 6.1\lib

5. 빌드 준비
configure -opensource -confirm-license -prefix D:\OpenSource\Qt5.11.2.x86 -nomake examples -nomake tests -opengl dynamic -mediaplayer-backend wmf -force-debug-info
소스를 압축푼 후 해당 경로에서 위와같이 입력한다.
D:\OpenSource
– Qt5.11.2.x86.build
– qt-everywhere-src-5.11.2
이와같은 구조라면 ..\qt-everywhere-src-5.11.2\configure -opensource…. 와 같이 입력한다.
x86과 x64 타겟 둘 다 빌드하려면 이렇게 쉐도우빌드하는게 좋다. (이미 빌드, configure 완료 된 설정과 충돌이 발생하지 않기때문.) 또한 prefix를 지정하면 빌드 완료 후 nmake install하여 헤더와 바이너리파일을 소스와 오브젝트 파일 따로 둘 수 있다.

아래는 MySQL을 포함 한 configure 결과내용.

Configure summary:

Build type: win32-msvc (x86_64, CPU features: sse sse2)
Configuration: sse2 aesni sse3 ssse3 sse4_1 sse4_2 avx avx2 avx512f avx512bw avx512cd avx512dq avx512er avx512ifma avx512pf avx512vbmi avx512vl compile_examples f16c force_debug_info largefile precompile_header rdrnd shani x86SimdAlways shared debug_and_release release debug build_all c++11 c++14 c++1z concurrent dbus no-pkg-config release_tools stl
Build options:
  Mode ................................... debug and release (with debug info); default link: debug; optimized tools

... 중략 ...

Qt Gui:
  Accessibility .......................... yes
  FreeType ............................... yes
    Using system FreeType ................ no
  HarfBuzz ............................... yes
    Using system HarfBuzz ................ no
  Fontconfig ............................. no
  Image formats:
    GIF .................................. yes
    ICO .................................. yes
    JPEG ................................. yes
      Using system libjpeg ............... no
    PNG .................................. yes
      Using system libpng ................ no
  EGL .................................... yes
  OpenVG ................................. no
  OpenGL:
    ANGLE ................................ yes
    Combined ANGLE Library ............... no
    Desktop OpenGL ....................... no
    Dynamic OpenGL ....................... yes
    OpenGL ES 2.0 ........................ no
    OpenGL ES 3.0 ........................ no
    OpenGL ES 3.1 ........................ no
    OpenGL ES 3.2 ........................ no
  Vulkan ................................. no
  Session Management ..................... yes

... 중략 ...

Qt Sql:
  DB2 (IBM) .............................. no
  InterBase .............................. no
  MySql .................................. yes
  OCI (Oracle) ........................... no
  ODBC ................................... yes
  PostgreSQL ............................. no
  SQLite2 ................................ no
  SQLite ................................. yes
    Using system provided SQLite ......... no
  TDS (Sybase) ........................... no

... 중략 ...

Qt Multimedia:
  ALSA ................................... no
  GStreamer 1.0 .......................... no
  GStreamer 0.10 ......................... no
  Video for Linux ........................ no
  OpenAL ................................. no
  PulseAudio ............................. no
  Resource Policy (libresourceqt5) ....... no
  Windows Audio Services ................. yes
  DirectShow ............................. yes
  Windows Media Foundation ............... yes
  Media player backend ................... Windows Media Foundation
Qt WebEngine:
  Embedded build ......................... no
  Pepper Plugins ......................... yes
  Printing and PDF ....................... yes
  Proprietary Codecs ..................... no
  Spellchecker ........................... yes
  Native Spellchecker .................... no
  WebRTC ................................. yes
  Use System Ninja ....................... no
  Geolocation ............................ yes
  Use v8 snapshot ........................ yes

Note: No wayland-egl support detected. Cross-toolkit compatibility disabled.

Qt is now configured for building. Just run 'nmake'.
Once everything is built, you must run 'nmake install'.
Qt will be installed into 'D:\OpenSource\Qt5.11.2.x64'.

Prior to reconfiguration, make sure you remove any leftovers from
the previous build.

만약 MySQL 부분이 활성화 안되어 환경설정 후 그 부분만 다시 체크되도록 하려면 config.cache 파일을 메모장에서 열어 아래와 같이 cache.mysql로 시작하는 라인을 전부 지우고 다시 configure하면 된다.

cache.mysql._KEYS_ = result msgs source sources.5.libs sources.5.includedir sources.5.cflags sources.5.version sources.5.export
cache.mysql.result = true
cache.mysql.msgs = "Trying source 0 (type mysqlConfig) of library mysql ..." "mysql_config not found." "  => source produced no result." "Trying source 1 (type mysqlConfig) of library mysql ..." "mysql_config not found." "  => source produced no result." "Trying source 2 (type mysqlConfig) of library mysql ..." "mysql_config not found." "  => source produced no result." "Trying source 3 (type mysqlConfig) of library mysql ..." "mysql_config not found." "  => source produced no result." "Trying source 4 (type inline) of library mysql ..." "  => source failed condition \'!config.win32\'." "Trying source 5 (type inline) of library mysql ..." "+ cd /d D:\\OpenSource\\Qt5.11.2.x86.build\\config.tests\\mysql && D:\\OpenSource\\Qt5.11.2.x86.build\\qtbase\\bin\\qmake.exe \"CONFIG -= qt debug_and_release app_bundle lib_bundle\" \"CONFIG += shared warn_off console single_arch\" \"LIBS += -llibmysql\" D:/OpenSource/Qt5.11.2.x86.build/config.tests/mysql" "+ cd /d D:\\OpenSource\\Qt5.11.2.x86.build\\config.tests\\mysql && set MAKEFLAGS=& nmake" "> Microsoft(R) Program Maintenance Utility ���� 14.16.27024.1" "> Copyright (c) Microsoft Corporation. All rights reserved." "> $$escape_expand(\\t)cl -c -nologo -Zc:wchar_t -FS -Zc:rvalueCast -Zc:inline -Zc:strictStrings -Zc:throwingNew -Zc:referenceBinding -Zc:__cplusplus -Zi -MDd -W0 -EHsc /Fdmysql.vc.pdb -DUNICODE -D_UNICODE -DWIN32 -D_ENABLE_EXTENDED_ALIGNED_STORAGE -I. -ID:\\OpenSource\\qt-everywhere-src-5.11.2\\qtbase\\mkspecs\\win32-msvc -Fo @C:\\Users\\star\\AppData\\Local\\Temp\\nm8248.tmp" "> main.cpp" "> $$escape_expand(\\t)link /NOLOGO /DYNAMICBASE /NXCOMPAT /DEBUG /SUBSYSTEM:CONSOLE \"/MANIFESTDEPENDENCY:type=\'win32\' name=\'Microsoft.Windows.Common-Controls\' version=\'6.0.0.0\' publicKeyToken=\'6595b64144ccf1df\' language=\'*\' processorArchitecture=\'*\'\" /MANIFEST:embed /OUT:mysql.exe @C:\\Users\\star\\AppData\\Local\\Temp\\nm869F.tmp" " => source accepted."
cache.mysql.source = 5
cache.mysql.sources.5.libs = -llibmysql
cache.mysql.sources.5.includedir = 
cache.mysql.sources.5.cflags = 
cache.mysql.sources.5.version = 
cache.mysql.sources.5.export = 

6. 빌드
qt에서 제공하는 jom을 쓴다면 jom, 아니라면 nmake 명령으로 빌드. 주위할 점으로 시스템 로케일을 영어(미국)으로 하는게 좋다. 웹킷은 경고도 에러로 처리하고 이 편이 훨씬 깔끔하게 한번에 빌드된다.

7. 기타
귀차니즘 덕분에 이정도로 마무리. 더 자세한 내용은 이곳 참조.

윈도 10 자동 업데이트 비활성화 (Pro Edition)

* 보통 OEM에 설치되는 Home Edition은 해당되지않습니다. Home Edition은 언젠가 기회되면(…?) 찾아보려합니다.

Windows 10은 보안을 이유로 자동업데이트가 강재로 수행된다. (OEM 제품이나 설치중에 ‘윈도 10을 사용하면 자동 업데이트에 동의하며 재부팅에 의에 발생할 수 있는 모든 사항은 MS에 책임이 없다.’는 내용이 있는지 모르겠지만.)

사무실에서는 주로 점심먹으로 나가는 사이, 집에서는 출근한 사이에 업데이트때문에 잠깐 작업중인 내용이라던지 프로그램이 종료되어 이것때문에 열받은적이 좀 있기때문에 이것저것 해보았더니 아래와같이 설정(하단 두개의 항목)한 현재 자동으로 업데이트를 확인하여 설치하는 기능이 동작하지 않았다.

예전에 ‘예약된 자동 업데이트를 설치 시 로그온한 사용자가 있을 경우 자동 다시 시작 사용 안 함’을 ‘사용’으로 해보았지만 여전히 자동 업데이트가 진행되면 재부팅이 되었다.

아마 ‘자동 업데이트 구성’을 ‘사용 안 함’ 또는 ‘자동 업데이트로 바로 설치 허용’을 ‘사용 안 함’으로 변경한것이 실제로 자동 업데이트를 중지하는거같다.

위 옵션은 ‘Win’ + ‘R’, 또는 시작 화면에서 gpedit.msc 입력 후 실행(엔터)하면 실행되는 프로그램에서 좌측 탐색 영역에서 ‘컴퓨터 구성’ – ‘관리 템플릿’ – ‘Windows 구성 요소’ – ‘Windows 업데이트’ 항목으로 들어가면 된다.

ASUS 공유기 암호규칙(영문, 특수문자, 숫자 모두 사용) 우회하기

2020/10/05 제목을 ASUA라고 오타낸것을 이제서야 알게되었다(?!). 😱 ASUS로 제목 수정. 이 글이 링크된곳이 있어 링크 주소는 유지(…).

2020/06/11 최신 크롬에서 확인 해본결과 스크립트를 직접 수정하는것은 보안 이슈가 있었는지 수정이 안됩니다. 대신 F12로 개발자 도구를 열고 ‘Console’탭을 선택, 아래와같이 “validator.psk_KR = validator.psk” 입력 후 엔터(복붙해도되고 vali까지치면 자동완성 힌트가 뜹니다.) 그리고 “validator.string_KR = validator.string”입력 후 엔터를 누르면 우회가 가능합니다. 덕분에 크롬외에서도 동일한 방식으로 우회가 가능하고 더 쉬운 우회법을 찾았지만 매번 다시입력해야하는 약간의 번거로움이 있습니다. 또 안되면 제보주시면감사합니다.


2022/02/16 바로 위 가로선의 위에 추가된 내용대로 암호우회를 사용하세요. 아래 본문과 같은 방법은 2020년 쯤 부터 브라우저에서 사용할 수 없습니다.

2018/04/26 현재 최신 펌웨어에서 확인된 방법.

공유기 관리자 페이지에 접속하여 메인 페이지, 또는 무선 메뉴에 진입한다.
그리고 F12를 눌러 개발자 도구를 연다. (주 브라우저는 파폭이지만 이 작업은 크롬브라우저 추천.)

기본적으로 개발자 도구에서 Source가 선택되어있다. 여기에서 validator.js 파일을 선택하여 Ctrl + F로 검색 입력란을 띄운 후, 팝업 메시지 내용 일부인 ‘정부의’ 단어를 검색한다. 그럼 해당 단어가 두곳 나타난다.

사전공유키는 무선 네트워크의 암호.

사전공유키로 시작되지 않는 문구는 ‘관리’ – ‘시스템’에서 설정하는 로그인 사용자의 암호.

변경하고자하는 암호의 종류에 따라 위 부분을 아래처럼 주석처리한다. 그리고 Ctrl + S를 눌러 적용한다.

그리고 숫자로만 구성된 암호로 입력하고 적용하면 적용된다. 단순히 웹페이지의 자바스크립트에만 이러한 암호규칙을 검사해서 다행이다. (설마 나중에 CGI 내부에서도 체크하도록 바뀌지 않겠지…)

암호가 간단해도 문제지만 와이파이 비밀번호까지 평소 안쓰는 암호로 억지로 만들어서 사용할 필요가 꼭 있는걸까? 너무 간단한것도 문제지만 그렇다고 공유기에서도 저런걸 강제화 하는건 과연 좋은 선택일지 의문이 든다. 어찌되엇건 우회하는 방법이 있으니 다행이다.

덧. 파폭은 스크립트 변경이 안되고, 엣지는 크롬처럼 수정가능하지만 폼 테이터가 전송(적용버튼)되고나면 이후에 페이지 소스 리스트가 엉뚱하게 표시되어 엣지를 다시 실행하지 않으면 validator.js 파일을 다시 수정할 수 없다.

2022/02/16 취소선 그어진 본문 위 추가된 내용대로 암호우회를 사용하세요. 취소선을 넣은 초기 본문과 같은 방법은 2020년 쯤 부터 브라우저에서 사용할 수 없습니다.

Visual Studio 2017 Community의 프롬포트 도구모음 스크립트 버그

현재 2018년 4월 19일 겪어서 하루 삽질한 내용.

부스트 라이브러리 경로를 INCLUDE, LIB 환경변수에 설정하고 Qt Creator에서 아무리 들고볶아도(최신버전을 받아서 업데이트 포함) LIB변수는 변하는데 INCLUDE 변수는 전혀 변하지않고 환경변수 값이 반영 안되는 것이였다.

구글링도해보고 뭘 해봐도 다른건 되는데(CL, _CL_변수) 이게 안되어서 IDE에서 헤더를 인식 못하였다. 그렇게 오늘 수 시간을 삽질한 결과 답을 얻었다.

일단 문제의 스크립트 내용은 아래와같다.

1분만에 눈에 들어오는것이 있다면 매의눈이라고 할 수 있겠다. __tmpwinsdk_include 환경변수를 초기화하고 INCLUDE 변수 내용을 담고 그것을 다시 환경변수에 설정하고 __tmpwinsdk_include 변수를 비우는데… 문제는 INCLUDE 환경변수를 수정하는 라인에 있었다. 그쪽만 혼자 __tmp_include변수에 할당하고 그 변수는 그냥 쓰레기가 되어버렸다.

이건 스크립트 흐름으로 보아 분명 버그임에 틀림없으니… 일단 내가 바꿔서 사용해야겠다. -_-;; 이것때문에 오전부터 지금까지 네시간 넘게 내가 왜 삽질을 해야했을까… 암튼 이 포스팅은 이것으로 끝!

아래 스크린샷은 수정한 후의 “C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\Tools\vsdevcmd\core\winsdk.bat” 파일의 내용이다.