반응형
반응형

zabbix-agent 설치 간, 14.04 기준의 init.d 스크립트를 16.04에 systemctl 명령어로 추가를 하려했더니, 아래와 같이 경고가 발생하였다.

$ systemctl enable zabbix-agent
insserv: warning: script 'zabbix-agent' missing LSB tags and overrides


systemctl를 이용하여 서비스를 등록할때는 LSB 태그가 필요하다는 경고였고, 저게 말은 Warning이지만 제대로 등록이 되질 않았다.

그렇기 때문에, LSB 태그를 아래와 같이 추가를 해주니, 정상적으로 등록이 되는 것을 확인하였다.

#
# Zabbix agent start/stop script.
#
# Copyright (C) 2000-2012 Zabbix SIA
### BEGIN INIT INFO
# Provides:          zabbix-agent
# Required-Start:    $remote_fs $network 
# Required-Stop:     $remote_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start zabbix-agent daemon
...
### END INIT INFO


반응형
,
반응형

모니터링이나 자동화 등 mysql client를 통해 command line 환경에서 값을 얻어와 활용하는 경우, 한 번의 커맨드로 끝내기 위해 password까지 포함해서 이용하게 된다.


이런 상황에서 아래와 같이 패스워드가 command line에 노출됬으니 주의하라는 메시지가 나오며, 결과값이 출력되게 된다.

$ mysql -uroot -pabc123 -e "show variables like 'innodb_%'"
Warning: Using a password on the command line interface can be insecure. 
...


쉘 스크립트나 Zabbix 등에서는 원하는 값을 integer나 string형태로 얻어와서 변수에 담아야 하기 때문에, 경고 메시지가 매우 껄끄러울 수 있으며, 오작동의 원인이 될 수 있다.


그래서 mysql 5.6.6 버전 이후부터는 mysql_config_editor라는 tool을 제공하고 있고, id, password, host 정보를 alias로 묶어서 관리할 수 있도록 하고 있다.


여기서는 등록 및 삭제, mysql 커맨드에서의 이용방법에 대해서만 알아보겠다.


[등록]

$ mysql_config_editor set --login-path=root_login --host=localhost --user=root --password=rootpassword


[삭제]

$ mysql_config_editor remove --login-path=root_login


[활용]

$ mysql --login-path=root_login -e "show variables like 'innodb_%'"


거슬렸던 Warning 메시지가 사라지는 것을 확인할 수 있다.

반응형
,
반응형

GameObject 배열을 섞어서 렌더링해줘야 할 일이 생겼다. Java를 주로 해왔기에 대충 잘 짜여진 함수들만 찾아봤고, Arrays.shuffle같이 편리하게 만들어진 함수가 있을 줄 알았는데, 저렇게 바로 되진 않았고, 일단 array를 List로 바꾸는 것부터 시작하였다.

// GameObject타입의 objArr라는 배열이 있다고 가정하자.
List<GameObject> objs = new List<GameObject>(objArr);

기본적으로 생성자에 Array를 넣어줬는데 바로 List로 변한다는 점은 Java와 비슷하게 편리하다.


이제 List로 만들었으니, 섞어야하는데.. Random함수를 사용하면 왠지 해당 범위내에서 Random값만 출력해줄 것 같고, Unique처리는 안될줄 알았는데, 신기하게도 UnityEngine에서 제공하는 Random 클래스는 Unique 처리까지 지원을 해주었다. (다만, 컬렉션 크기가 클 경우 메모리 사용량이 많을듯..)

GameObject o = Random.Range(0, objs.Count);


위와 같은 간단한 코드만으로, objs 리스트에 있는 엘리먼트 하나를 반환해주고, 반복문등을 통해 처리해도 해당 함수 내에서는 항상 유니크한 엘리먼트를 반환해주므로 매우 편리하다.

반응형

'개발 > Unity' 카테고리의 다른 글

[Unity5] Start vs Awake  (0) 2017.10.30
[Unity 5] Resources.LoadAll를 이용한 Sprite 가져오기  (0) 2017.10.23
[Unity 5] Resources Path  (0) 2017.10.23
,
반응형

Sprite를 여러개 생성한 뒤, 객체를 동적으로 생성해서 입혀야 할 일이 생겼다.


Sprite Editor를 이용해서, 통 이미지를 split해서 Sprite까지는 생성했는데, 실제 폴더 경로에서는 파일들이 보이지 않고 Unity Editor상에서만 확인이 가능하지만, 아래와 같은 코드를 이용하면 Sprite를 배열형태로 가져와서 활용이 가능하다.

private Sprite[] sprites;

void Start() {
    sprites = Resources.LoadAll<Sprite>("Sprite가 위치한 폴더명");
}


이전 포스팅(http://hakurei.tistory.com/264)에서 언급했던 것과 마찬가지로, Resources의 함수를 사용하기 때문에, Resources 폴더 밑에 위치해야 하며, 폴더명만 적어주면 Sprite 형태의 객체들을 배열형태로 잘 가져와준다.

반응형

'개발 > Unity' 카테고리의 다른 글

[Unity5] Start vs Awake  (0) 2017.10.30
[Unity5] Random unique index from array  (0) 2017.10.24
[Unity 5] Resources Path  (0) 2017.10.23
,
반응형

Unity 프로젝트를 생성하면 기본적으로 아래와 같은 폴더 구조를 하고 있다.


  • 프로젝트명
    • Assets
    • Library
    • ProjectSettings
    • Temp

Unity Editor에서 뭔가 리소스를 추가하고 편집하면, Assets 폴더에 들어가게 끔 되어있는데, 스크립트 단에서 Assets 폴더에 들어있는 항목들을 가져와야 될 때가 있다.


이런 경우 Assets 폴더 밑에 Resources라는 폴더를 하나 만들어두고, 스크립트에서 가져올 항목들을 넣어두면, 아래와 같은 코드로 손쉽게 접근이 가능하다.
GameObject o = Resources.Load("abc") as GameObject;


Resources.Load를 사용하게 되면, 기본적으로 프로젝트명\Assets\Resources 경로를 참조하기 때문이며, Resources밑에 세부경로가 있는 경우 / 기호를 통해 세부경로를 명시 후 리소스명을 작성해주면 된다. (Windows에서는 \\를 써야할 것 같지만, / 로 해주어야 한다.)

반응형

'개발 > Unity' 카테고리의 다른 글

[Unity5] Start vs Awake  (0) 2017.10.30
[Unity5] Random unique index from array  (0) 2017.10.24
[Unity 5] Resources.LoadAll를 이용한 Sprite 가져오기  (0) 2017.10.23
,
반응형

starter template에 있는 app을 아래와 같이 release옵션을 줘서 배포를 해보았다.

$ ionic cordova run android --prod --release


빌드 성공 후 퍼센테이지가 올라가는 걸로 보아 성공한 것처럼 보이지만, 100%가 되는 순간 아래와 같은 에러를 만날 수 있는데, apk가 signing되지 않았을 때 인증서가 없어서 발생하는 에러고, signing을 하라고 안내를 해준다.

Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES]
Sign the build using '-- --keystore' or '--buildConfig' or sign and deploy the unsigned apk manually using Android tools.


emulator에 테스트 용도로 올리고 싶은 경우에는 --release옵션을 빼고 올리면 잘 올라간다.


공식홈에 Document를 보고 하나하나 따라해보는데 갑자기 여기서 막혀서 몇시간 삽질한 것 같다.

반응형
,
반응형

starter template에 포함된 앱을 android emulator로 배포해보려고 아래와 같은 키워드를 입력해보았다.

$ ionic cordova run android --prod


빌드는 성공했다고 나오지만 아래와 같은 에러메시지가 발생하며, emulator에 앱이 올라오지 않았다.

No target specified and no devices found, deploying to emulator

Error: Cannot read property 'replace' of undefined

[ERROR] An error occurred while running cordova run android --release (exit code 1).


맨 윗줄은 target device를 찾을 수 없다는 에러이고, 밑에 두줄은 device가 없어서 부가적으로 발생하는 에러이다.


emulator를 띄우면 해결이 되지만, emulator을 띄워도 해결이 되지 않는 경우는 개발자 옵션에서 usb 디버깅 옵션을 켜주어야 한다.

반응형
,
반응형

MySQL에서는 가급적이면 SP를 사용하지 않아서, 잘 모르고 있던 부분인데, 개발사쪽에서 요청이 들어와서 알아보게 되었다.


SP 관련 권한들은 Routine이라는 이름을 가지고 있었고, 생성 / 수정 권한 정도가 있다.

실제 권한 부여는 아래와 같은 커맨드로 가능하다.

mysql> GRANT CREATE, ALTER ROUTINE ON DB명.* TO '계정명';
mysql> FLUSH PRIVILEGES;


DB명 뒤에 * 는 테이블명이긴 한데, SP 권한을 주면서 굳이 테이블까지 제한을 해야되나 싶기도 하고 귀찮기도해서, 보통 모든 권한을 넣어주게 되는 것 같다.


mysql.proc 테이블에 CRUD 권한을 넣어주어도 비슷하게 동작을 하는 것 같지만, 시스템 관련 테이블을 직접 손대는 것 보다는 공식적으로 제공하는 GRANT 커맨드를 권장한다.

반응형
,
반응형

ionic serve를 이용해 웹서버 및 페이지를 확인하고, android 에뮬레이터에 올려보려고 했는데, 아래와 같은 에러가 발생하였다.

Failed to restore plugin "cordova-plugin-statusbar" from config.xml. You might need to try adding it again. 
Error: Failed to fetch plugin https://github.com/apache/cordova-plugin-statusbar.git via registry.
Probably this is either a connection problem, or plugin spec is incorrect.
Check your connection and plugin name/version/URL.
Error: cmd: Command failed with exit code 1 Error output:
npm ERR! code 128
npm ERR! Command failed: C:\Program Files\Git\cmd\git.EXE submodule update -q --init --recursive
npm ERR! fatal: 'submodule' appears to be a git command, but we were not
npm ERR! able to execute it. Maybe git-submodule is broken?
npm ERR!

npm ERR! A complete log of this run can be found in:
npm ERR!     ---_logs\2017-10-11T05_02_42_754Z-debug.log


대충 해석을 해보면, cordova-plugin-statusbar라는 플러그인이 뭔가 문제가 있는 것 같다. 

이런 경우 아래 명령어를 통해 해당 플러그인을 추가해주면 된다.

$ cordova plugin add https://github.com/apache/cordova-plugin-statusbar.git



반응형
,
반응형

ionic app이 initialize되는 과정에서 npm install만 하기 때문에, 발생하는 문제이다.


app 폴더에 가서 package.json파일을 열어보면 아래와 같이 "devDependencies"라고 적혀있는 부분이 별도로 존재하는데, npm install 명령어로 설치 시에 얘네들이 빠져서 설치가 되버림.

{
  "name": "helloIonic",
  "version": "0.0.1",
  "author": "Ionic Framework",
  "homepage": "http://ionicframework.com/",
  "private": true,
  "scripts": {
    "clean": "ionic-app-scripts clean",
    "build": "ionic-app-scripts build",
    "lint": "ionic-app-scripts lint",
    "ionic:build": "ionic-app-scripts build",
    "ionic:serve": "ionic-app-scripts serve"
  },
  "dependencies": {
    "@angular/common": "4.4.3",
    "@angular/compiler": "4.4.3",
    "@angular/compiler-cli": "4.4.3",
    "@angular/core": "4.4.3",
    "@angular/forms": "4.4.3",
    "@angular/http": "4.4.3",
    "@angular/platform-browser": "4.4.3",
    "@angular/platform-browser-dynamic": "4.4.3",
    "@ionic-native/core": "4.3.0",
    "@ionic-native/splash-screen": "4.3.0",
    "@ionic-native/status-bar": "4.3.0",
    "@ionic/storage": "2.0.1",
    "ionic-angular": "3.7.1",
    "ionicons": "3.0.0",
    "rxjs": "5.4.3",
    "sw-toolbox": "3.6.0",
    "zone.js": "0.8.18"
  },
  "devDependencies": {
    "@ionic/app-scripts": "3.0.0",
    "typescript": "2.3.4"
  },
  "description": "An Ionic project"
}


아래 명령어를 입력하여, devDependencies에 있는 모듈들도 설치를 해주면 해결이 된다.

$ npm install --only=dev


매번 저렇게 해주는 게 귀찮을 수 있으니, 프로젝트를 자주 만들어야 한다면, 아예 글로벌로 설치해버리는 것도 답이다.

반응형
,
반응형