IT관련 지식들 2020. 4. 24. 17:11

먼저 Visual Studio Code를 다운받아 설치한다.

 

이후 파이썬을 사용하기 위해서 아래 블로그를 참조했다.

 

https://evols-atirev.tistory.com/31

 

Visual Studio Code Python 사용법

Visual Studio Code 상에서 파이썬 코드를 실행시키고 디버깅하는 방법에 대한 글이다. 우선 파이썬과 Vscode를 설치해준다. Vscode의 설치는 https://evols-atirev.tistory.com/4를 참고해서 설치해준다. Python..

evols-atirev.tistory.com

1. Visual Stdio Code 실행

 

2. open folder선택. 작업을 진행할 폴더를 선택한다.

3. 작업을 진행할 폴더에 새로 파일을 입력한다. (여기서는 helloWorld.py)

- 만약, Visual Studio Code에 Python이 설치되거나 연결되지 않았으면 설치하라는 메시지가 나온다.

- 안내 메시지에 따라 설치하면 된다.

4. 디버깅을 위해 run(F5)를 동작한다.

- launch.json파일을 자동으로 생성해준다.

- 위에 링크된 블로그에서 미리 작성한 코드가 있어 "작업폴더\.vscode"에 task.json과 setting.json 파일을 복사해 넣었다.

4-1. tasks.json

-아래와 같이 작성한다.

{

    // See https://go.microsoft.com/fwlink/?LinkId=733558

    // for the documentation about the tasks.json format

    "version""2.0.0",

    "tasks": [

        {

            "label""python3",

            "type""shell",

            "command":"python",

            "args":["${file}"],

            "group":{

                "kind":"build",

                "isDefault":true

            },

            "presentation":{

                "echo":true,

                "reveal":"always",

                "focus":false,

                "panel":"shared",

                "showReuseMessage":true,

                "clear":true

            }

        }

    ]

}

4-2. setting.json

- 파이썬 실행파일이 설치된 위치를 찾아서 넣어준다.

{

    "python.pythonPath""E:\\Microsoft Visual Studio\\Shared\\Python37_64\\python.exe"

}

 

5. run(F5)를 다시 동작한다.

- Debug Configuration으로 Python File을 선택한다.

- 밑에 콘솔창에서 결과를 볼 수 있다.

posted by 동글동글82
:
IT관련 지식들 2019. 11. 21. 14:42

git push를 하다가 같은 에러가 계속나서 찾아봤다.

 

git.exe push --progress "origin" master:master 
Enumerating objects: 366, done. 
Counting objects: 100% (366/366), done. 
Delta compression using up to 8 threads 
Compressing objects: 100% (361/361), done. 
Writing objects: 100% (364/364), 1.82 MiB | 7.53 MiB/s, done. 
Total 364 (delta 223), reused 0 (delta 0) 
remote: error: Cannot update the ref 'refs/heads/master': unable to append to logs/refs/heads/master: 허가 거부 
To 221.132.85.22:/home/npdgit/gitrepository/emulatorServer 
! [remote rejected] master -> master (failed to update ref) 
error: failed to push some refs to 'khkwon@221.132.85.22:/home/npdgit/gitrepository/emulatorServer' 

git did not exit cleanly (exit code 1) 
에러가 발생했습니다!! (4109 ms @ 2019-11-21 오후 1:35:38)

인터넷에 있는 많은 방법을 사용했지만 해결되지 않았고, 다시 읽어보니 보인 문장이 "허가 거부".

 

다른 사람이 쓰도록 테스트하던 도중 첫 update를 내가 해서 master파일이 내 이름으로 생성된 것이였다.

 

chown 명령어로 권한을 변경해주니 정상동작한다.

posted by 동글동글82
:
IT관련 지식들 2019. 9. 27. 11:00

C/C++로 제작한 모듈을 java에서 불러 쓸 일이 생겨서 어떻게 해야하는지 정리했다.

만약, 불러올 수 있는 동적라이브러리가 있다면 2~5를 생략해도 된다. 단, 메서드 혹은 API를 알고 있어야한다.

 

1. HelloJni.java 파일 생성

  - 라이브러리를 load하는 클래스

class HelloJni{
static { System.loadLibrary("hellojni");}
  native void printHello();
  native void addintiger(int var1, int var2);
  native int sumIntiger(int[] intData);
  native byte sumByte(byte[] byteData);
  native void printString(String str);
  native void getByteData(byte[] getByte);
  native int setByteArray(byte[] ptData);
  native byte[] makeByteArray(int len);
  native byte[] makeNsetBArray(int len);
}

 

2. java컴파일 HelloJni.class 파일 생성

$javac HelloJni.java

==> HelloJni.class파일 생성.

 

3. HelloJni.h C/C++ 헤더파일 생성.

$javah -jni HelloJni

==> HelloJni.h 파일 생성. 자동으로 만들어지니 참고만 할 것.

/* DO NOT EDIT THIS FILE - it is machine generated */
#include 
/* Header for class HelloJni */
#ifndef _Included_HelloJni
#define _Included_HelloJni
#ifdef __cplusplus
extern "C" {
#endif
/* * Class:     HelloJni * Method:    printHello * Signature: ()V */
JNIEXPORT void JNICALL Java_HelloJni_printHello  (JNIEnv *, jobject);
/* * Class:     HelloJni * Method:    addintiger * Signature: (II)V */
JNIEXPORT void JNICALL Java_HelloJni_addintiger  (JNIEnv *, jobject, jint, jint);
/* * Class:     HelloJni * Method:    sumIntiger * Signature: ([I)I */
JNIEXPORT jint JNICALL Java_HelloJni_sumIntiger  (JNIEnv *, jobject, jintArray);
/* * Class:     HelloJni * Method:    sumByte * Signature: ([B)B */
JNIEXPORT jbyte JNICALL Java_HelloJni_sumByte  (JNIEnv *, jobject, jbyteArray);
/* * Class:     HelloJni * Method:    printString * Signature: (Ljava/lang/String;)V */
JNIEXPORT void JNICALL Java_HelloJni_printString  (JNIEnv *, jobject, jstring);
/* * Class:     HelloJni * Method:    getByteData * Signature: ([B)V */
JNIEXPORT void JNICALL Java_HelloJni_getByteData  (JNIEnv *, jobject, jbyteArray);
/* * Class:     HelloJni * Method:    setByteArray * Signature: ([B)I */
JNIEXPORT jint JNICALL Java_HelloJni_setByteArray  (JNIEnv *, jobject, jbyteArray);
/* * Class:     HelloJni * Method:    makeByteArray * Signature: (I)[B */
JNIEXPORT jbyteArray JNICALL Java_HelloJni_makeByteArray  (JNIEnv *, jobject, jint);
/* * Class:     HelloJni * Method:    makeNsetBArray * Signature: (I)[B */
JNIEXPORT jbyteArray JNICALL Java_HelloJni_makeNsetBArray  (JNIEnv *, jobject, jint);
#ifdef __cplusplus
}
#endif
#endif

 

  3.1 Class를 찾을 수 없다고 나올 때.

    - classpath를 설정하라는 조언과 package의 전체 이름을 입력하라는 조언 둘다 안됨.

 

 

    - src 폴더로 내려가서 package이름으로 실행하니 성공.

  3.2 헤더를 생성하는 경로에 따라 함수이름이 달라짐.

 

4. 생성된 헤더파일에 맞춰 C/C++ 파일 생성.

==> 헤더파일의 메서드/API만 복사하여 내용을 채워넣음.

==> Falinux 포럼의 JNI 배열관련 글을 참고.

http://forum.falinux.com/zbxe/index.php?document_srl=570993&mid=lecture_tip

#include "HelloJni.h"

#include <stdio.h>
#include <jni.h>
#include <stdlib.h>
#ifdef __cplusplus
extern "C" {
#endif

JNIEXPORT void JNICALL Java_HelloJni_printHello(JNIEnv *env, jobject jobj)

{  printf("Test Jni process\n"); }

JNIEXPORT void JNICALL Java_HelloJni_addintiger(JNIEnv *env, jobject jobj, jint var1, jint var2)
{ printf("%d + %d = %d\n",var1,var2,var1+var2); }

JNIEXPORT jint JNICALL Java_HelloJni_sumIntiger(JNIEnv *env, jobject jobj, jintArray intData)
{
  jint *intBuf;
  int size;
  int sum, i;
  size = env->GetArrayLength(intData);
  intBuf = env->GetIntArrayElements(intData, NULL);
  sum = 0;
  for(i=0 ; i < size ; i++){
    sum += intBuf[i]*10;
    printf("array[%d] = %d, sum = %d\n",i,intBuf[i],sum);
  }
  env->ReleaseIntArrayElements(intData, intBuf, 0);
  return sum; 
}

JNIEXPORT jbyte JNICALL Java_HelloJni_sumByte(JNIEnv *env, jobject jobj, jbyteArray byteData)
{
  jbyte *byteBuf;
  int size, i;
  char sum;
  size = env->GetArrayLength(byteData);
  byteBuf = env->GetByteArrayElements(byteData, NULL);
  sum = 0;
  for(i=0 ; i < size ; i++){
    sum += byteBuf[i];
    printf("array[%d] = %d, sum = %d\n",i,byteBuf[i],sum);
  }
  env->ReleaseByteArrayElements(byteData, byteBuf, 0);
  return sum;
}

JNIEXPORT void JNICALL Java_HelloJni_printString(JNIEnv *env, jobject jobj, jstring jstr)
{
  const char *str = env->GetStringUTFChars(jstr,NULL);
  printf("String is[%s]\n",str);
  env->ReleaseStringUTFChars(jstr,str);
}

JNIEXPORT void JNICALL Java_HelloJni_getByteData(JNIEnv *env, jobject jobj, jbyteArray byteData)
{
  jbyte *byteBuf;
  int size, i;
  size = env->GetArrayLength(byteData);
  byteBuf = env->GetByteArrayElements(byteData, NULL);
  for(i=0 ; i < size ; i++){
    byteBuf[i] = i*2;
  }
  env->SetByteArrayRegion(byteData, 0, 10, (const jbyte *)byteBuf);
  env->ReleaseByteArrayElements(byteData, byteBuf, 0);
}

JNIEXPORT jint JNICALL Java_HelloJni_setByteArray(JNIEnv *env, jobject jobj, jbyteArray byteData)
{
  jint mallocSize;
  jbyte *byteBuf;
  int i;

  mallocSize = 20;

  byteBuf = env->GetByteArrayElements(byteData, NULL);
  for(i=0 ; i < mallocSize ; i++){
   byteBuf[i] = i*3;
  }
  env->SetByteArrayRegion(byteData, 0, mallocSize, (const jbyte *)byteBuf);
  return mallocSize;
}

JNIEXPORT jbyteArray JNICALL Java_HelloJni_makeByteArray(JNIEnv *env, jobject jobj, jint len)
{
  jbyteArray bytePt = NULL;
  jbyte *byteBuf;
  int i;

  bytePt = env->NewByteArray(len);

  if(bytePt != NULL){
    printf("make new byte array\n");
    return bytePt;
  }
  else{
    printf("make fail\n");
    return NULL;
  }
}

JNIEXPORT jbyteArray JNICALL Java_HelloJni_makeNsetBArray(JNIEnv *env, jobject jobj, jint len)
{
  jbyteArray bytePt = NULL;
  jbyte *byteBuf;
  int i;

  bytePt = env->NewByteArray(len);

  if(bytePt != NULL){
    printf("make new byte array\n");

    byteBuf = (jbyte *)malloc(sizeof(jbyte)*len);
    for(i=0 ; i < len ; i++){
      byteBuf[i] = i*4;
    }
    env->SetByteArrayRegion(bytePt, 0 , len, (const jbyte *)byteBuf);
    free(byteBuf);
    return bytePt;
  }
  else{
    printf("make fail\n");
    return NULL;
  }
}

#ifdef __cplusplus
}
#endif

 

5. 라이브러리 생성.

5-1. linux 64bits

$gcc -m64 -fPIC -shared -o libhellojni.so HelloJni.cpp -I/usr/lib/java/jdk/include -I/usr/lib/java/jdk/include/linux

 

5-2. linux 32bits

$gcc -m32 -shared -o libhellojni.so HelloJni.cpp -I/usr/lib/java/jdk/include -I/usr/lib/java/jdk/include/linux

 

5-3. 라즈베리파이등 (coretex-arm)

==> 크로스컴파일러가 없다면 "apt-get install gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf"

$arm-linux-gnueabihf-g++ -fPIC -shared -o libhellojni.so HelloJni.cpp -I/usr/lib/java/jdk/include -I/usr/lib/java/jdk/include/linux

$readelf -hA libhellojni.so

Tag_CPU_arch: v7

 

5-4. arm코어가 다른 보드.

==> 크로스컴파일러가 없다면 "apt-get install gcc-arm-linux-gnueabi g++-arm-linux-gnueabi"
$arm-linux-gnueabi-g++ -shared -o libhellojni.so HelloJni.cpp -I/usr/lib/java/jdk/include -I/usr/lib/java/jdk/include/linux
$readelf -hA libhellojni.so
Tag_CPU_arch: v5T

 

6. 동적라이브러리 복사.

$sudo cp libhellojni.so /usr/lib/

6-1. 동적라이브러리 파일 복사를 안하려면, 동적라이브러리 PATH를 설정하는 방법도 있다. 아래 파일의 제일 밑에 LD_LIBRARY_PATH를 추가해서 잘되긴 했는데, 타겟보드에서는 실패했다.

$vi /etc/profile

export LD_LIBRARY_PATH=/home/user_name/mylib:${LD_LIBRARY_PATH}

 

posted by 동글동글82
:
IT관련 지식들 2019. 8. 6. 11:48

자바 컴파일러(javac)

- 자바 코드를 실행시킬 수 있는 프로그램으로 변경.

자바 런처(java)

- JVM(Java Virtual Machine)을 통해 컴파일된 프로그램을 실행.

자바 바이트코드(Java Bytecode)

- 자바 컴파일러에 의해서 생성되는 코드. 명령어의 크기가 1Byte이기 때문에 붙여진 이름.

자바 버추얼 머신

- 각 OS에서 자바를 실행시키기 위해서 설치한 소프트웨어

클래스

- 객체를 생성하기 위한 '틀'

- 변수와 메소드를 가지고 있음.

메소드

- c언어에서 함수와 같은 뜻.

변수

- 데이터의 저장과 참조를 위해 할당된 메모리 공간

선언(declaration)

- 컴파일러에게 무엇인가를 알리는 행위

MSB(Most Significant Bit)

LSB(Least Significant Bit)

- MSB First, LSB First까지 붙여서 사용한다. 메모리에 저장할 때, 어떤 비트부터 저장하는지에 대한 정의.

char형 변수

- 유니코드 저장을 위해 1~2bytes가 가변적으로 할당됨.

상수( = literal)

- 메모리에 값이 저장되지만, 저장된 값의 변경은 불가능.

자료형의 변환

- 연산을 위해 더 넓은 자료형으로 자동 형 변환(Implicit Conversion)이 일어남.

- byte->short->int->long->float->double

Short-Circuit Evaluation(SCE)

- 가장 빠르게 연산을 진행하기 위한 계산방식

final

- c언어에서 const와 비슷한 뜻으로 딱 한번 초기화를 할 수 있는 변수. 변수타입 앞에 선언.

인스턴스(instance)

- new명령어로 생성된 객체

생성자(Constructor)

- 인스턴스가 생성될 때, 초기화를 같이 진행하는 메소드

 

'IT관련 지식들' 카테고리의 다른 글

git push에러 :: git did not exit cleanly (exit code 1)  (0) 2019.11.21
JNI 사용법 정리  (0) 2019.09.27
젠킨스(Jenkins) 사용목적  (0) 2019.08.02
우분투 ftp서버 계정제한  (0) 2019.05.28
우분투 VNC server 설치  (0) 2019.01.22
posted by 동글동글82
:
IT관련 지식들 2019. 8. 2. 12:45

형상관리를 위해서 젠킨스를 사용하겠다는 생각만 가지고 이것 저것 파보다가 문득 깨달음을 얻었다.

 

젠킨스를 왜 사용하지?

 

중학생때 형이 리눅스를 한다고 해서 PC잡지에 따라온 빨간모자를 쓴 빨간정장 아저씨가 그려진 씨디(RedHat)를 넣고 리눅스를 설치한 적이 있다. 별로 어렵지 않게 설치를 하고 나온 결론은... 이걸로 뭘하지?

 

마찬가지로 젠킨스를 설치하고 인터넷을 찾아가며 new job을 설정하면서 든 결론은 이걸로 뭘할지 확실히 알아야겠다는 생각이다.

 

젠킨스는 아래 세가지 기능을 수행하는 것으로 추측된다.

 

1. 자동 빌드

2. 자동 배포

3. 테스트

 

추후에 공부를 하면서 하나한 알게되면 자세한 내용을 추가하거나 링크를 붙이겠다.

'IT관련 지식들' 카테고리의 다른 글

JNI 사용법 정리  (0) 2019.09.27
JAVA의 기본언어 정리  (0) 2019.08.06
우분투 ftp서버 계정제한  (0) 2019.05.28
우분투 VNC server 설치  (0) 2019.01.22
젠킨스 설치와 구성 (Jenkins setup)  (0) 2019.01.03
posted by 동글동글82
:
음식 이야기 2019. 7. 15. 09:44

7월 14일 놀이방에 가면서 가락시장몰에 들려, 각종 돼지고기를 부위별로 구입했다.

어떤 부위가 무슨맛이 날지 궁금해서 한 실험이다.

 

구입한 고기

 

삼겹살 약(2000원/100g)

- 기름과 고기의 적절한 조화. 돼지 기름이 있어 김치등과 같은 음식과 같이 구워먹으면 맛있다.

삼겹살 구이

목살 약(1800원/100g)

- 삼겹살보다 약간 저렴함. 기름기가 삽겹살 만큼 있어 구워먹으면 맛있다.

목살 구이

항정살 약(2800원/100g)

- 천겹살이라고 불린다고 하며, 기름이 삼겹살보다 많다. 가격이 많이 비싸지며, 역시 맛있다. 가로/세로로 결을 다르게 썰어주셨는데, 둘 다 맛은 비슷하다.

항정살 구이

가브리살 약(1800원/100g)

- 언제 한번 먹어본 부위같기는 한데 어딘지 몰랐다. 등심과 목살의 연결부분이고 쫄깃쫄깃한게 식감이 좋다.

- 이번에 찾아낸 괜찮은 부위 3위

가브리살 구이

갈매기살 약(1600원/100g)

- 근막이 많아서 손질이 필요했다. 중간을 한번갈라서 살짝 칼집도 내 주셨음에도 불구하고 많이 쫄깃쫄깃하다. 손질을 잘 못하면 많이 질겨서 먹기 어려울 듯하다.

갈매기살 구이

등심 약(2000원/100g)

- 고기를 잘라주시던 아저씨께서도 아니라고 했는데, 정말 아니였다. 많이 질기다. 그래서 돈까스등으로 해서 먹나보다.

등심 구이

안심 약(900원/100g)

- 한마디로 표현하면, 닭가슴살 구이. 가끔 별미로 먹을 수는 있지만, 다른 부위처럼 계속 먹기는 어렵겠다.

- 이번에 찾아낸 괜찮은 부위 2위

 

갈비 약(1100원/100g)

- 양념을 재워도, 안재워도 맛있다. 기름이 없는 듯 하지만 살짝 있어 구워먹으면 후회하지 않는다. 뼈가 있다.

 

 

앞다리살 약(980원/100g)

- 꼭 구이용이라고 말해야한다. 잘 사면, 구웠을 때 삼겹살, 목살랑 비슷하게 맛있다. 특히 구이용으로 껍질을 같이 주시면 정말 맛있고, 캠핑을 갈 때 사가면 배터지게 먹을 수 있어 더 좋을 듯하다.

- 이번에 찾아낸 괜찮은 부위 1위

전지 구이

 

번외편.

- 친구가 사온 육우. 소는 디저트.

 

- 남은 고기는 오븐구이

 

 

 

 

'음식 이야기' 카테고리의 다른 글

Poke All Day(포케 올 데이)  (0) 2023.11.30
월래순 교자관(20231122)  (1) 2023.11.27
강동구청역 인근 회식장소  (0) 2019.07.04
양재역 엘린포레(구, 마린쿡)  (0) 2018.12.23
야탑역 식사장소  (0) 2013.06.19
posted by 동글동글82
:
음식 이야기 2019. 7. 4. 13:49

팔선생

  - 중국 요리집.

  - 일반 프렌차이즈보다 고급진 분위기와 맛.

  - 근데 홀에 손님이 많아 시끄러움

 

미소와돈

  - 라면, 계란후라이 무한리필 (점심)

  - 저녁에도 부대찌개를 할 수 있게 제공

  - 고기도 양이 나쁘지 않음

 

이차돌

  - 차돌박이 + 쫄면/김치말이국수 맛있음

 

형네고기집

  - 고기는 나쁘지 않음.

  - 작고 아담함

  - 손님이 없으면 사장님이 시끄럽게 떠듬

 

화로숯불구이

  - 장소 넓음

  - 조금 비쌈

 

버섯잔치집

  - 버섯 샤브샤브 + 버섯 무한리필

 

평양만두집

  - 만두 맛있음

  - 만두 전골로 회식 가능.

 

가장맛있는족발

  - 무난한 프렌차이즈 족발

 

호치킨

  - 치킨은 평범, 가격 대 양이 좋음.

 

VIPS 올림픽점

  - 올림픽공원점 아님.

  - 그냥 VIPS.

 

하남돼지가

  - 고기를 궈줘서 편하다.

  - 가격에 비해 많이 먹을 수 없다.

 

St. 어거스틴

  - 아시아 음식점.

  - 술먹고 취하자는 분위기보다는 이야기를 많이 하는 느낌.

  - St.를 세인트/생 어떻게 읽어야 할지 고민됨.

 

돈가야 우가야

  - 고기의 질이 나쁘지 않음.

  - 소고기를 먹으려면 미리 예약해야함.

'음식 이야기' 카테고리의 다른 글

월래순 교자관(20231122)  (1) 2023.11.27
돼지고기 부위별로 먹기  (0) 2019.07.15
양재역 엘린포레(구, 마린쿡)  (0) 2018.12.23
야탑역 식사장소  (0) 2013.06.19
야탑역 회식장소  (0) 2013.06.19
posted by 동글동글82
:
IT관련 지식들 2019. 5. 28. 21:04

개인적으로 사용하는 서버를 다른 사람과 공유할 일이 생겼다.

ftp계정은 열어주되 다른 폴더와 파일을 건드리지 못하게 하는 방법을 찾아봤다. 너무 복잡하게 생각하지 말고 아주 단순하게 생각하면 가능한 일이다.

 

1. vsftpd 설치

  - sudo apt-get install vsftpd

 

2. 외부에 공개할 개정 생성

  - sudo adduser kkk

 

2.1 암호 설정

  - sudo passwd kkk

  >> 암호 입력

 

3. 외부에 공개할 폴더 생성

  - sudo mkdir /data

 

3.1 폴더 권한 변경

  - sudo chown kkk /data

 

3.2 새로 생성한 계정의 홈디렉토리 변경

  - sudo vim /etc/passwd

    - kkk:x:1012:1012::/home/kkk:/bin/bash

    ==> kkk:x:1012:1012::/data:/bin/bash 

      - 만약 마지막에 /bin/bash가 없을 경우 추가해야 나중에 문제되지 않음.

 

4. ftp 설정 변경

  - sudo vim /etc/vsftpd.conf

    - 기본 파일을 복사해 놓으면 원상복구하기 좋다.

    - sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.orig

      - 쓰기 허가. 

        - #write_enable=YES              ==>  write_enable=YES

        - allow_writeable_chroot=YES   ==> 없으면 추가.

      - 홈폴더가 최상위폴더가 되도록 수정.

        - #chroot_local_user=YES        ==> chroot_local_user=YES

 

5. ssh 제한

  - sudo vim /etc/ssh/sshd_config

    - 접속 계정만 설정.

      - 파일 마지막에 다음 문구 추가

        - AllowUsers aaa bbb ccc ddd

 

즉, ftp계정을 하나 추가해서 접속할 수 있게 하되, ssh로는 접속이 안되도록 수정한다.

posted by 동글동글82
:
IT관련 지식들 2019. 1. 22. 15:54

 서버에 X윈도우로 접근해서 UI텍스트 편집기를 사용하려는 꿈에서 VNC 서버 설치를 시작했다.


1. 설치

인터넷을 찾아보니 패키지 설치부터.


$sudo apt-get install gnome-settings-daemon gnome-terminal metacity nautilus

$sudo apt-get install gnome-panel vnc4server


2. 실행 - 암호 설정
계정으로 실행해보면 password 설정을 묻는다.


$vnc4server

... 중략 ...

password:

verify:

... 하략 ...


계정마다 서버에 대한 설정을 따로 진행하기 때문에 내가 사용하는 계정으로 한번 실행해야 한다.


3. 실행환경 설정

실행 환경을 설정한다. 이때 계정마다 설정을 다르게 하기 때문에 sudo 명령어가 필요없다.


$ vnc4server -kill :1

$ cp ~/.vnc/xstartup ~/.vnc/xstartup.old

$ vim ~/.vnc/xstartup


아래 내용으로 변경한다.

#!/bin/sh


# Uncomment the following two lines for normal desktop:


export XKL_XMODMAP_DISABLE=1

unset SESSION_MANAGER

unset DBUS_SESSION_BUS_ADDRESS


[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup

[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources

xsetroot -solid grey

vncconfig -iconic &


gnome-panel &

gnome-settings-daemon &

metacity &

nautilus &

gnome-terminal &

# 만약 다른 곳에서 연결하는데 화면이 나오지 않으면 추가한다.

# /usr/bin/gnome-session --session=2d-gnome &


x-terminal-emulator -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &

x-window-manager &



4. 자동실행 설정


$ sudo nano /etc/init.d/vncserver

아래 내용을 복사하여 붙여넣는다.

#!/bin/bash

### BEGIN INIT INFO

# Provides:          vncserver

# Required-Start:    networking

# Required-Stop:     networking

# Default-Start:     2 3 4 5

# Default-Stop:      0 1 6

### END INIT INFO


PATH=$PATH:/usr/bin/

export USER=사용자 계정


DISPLAY="1"

DEPTH="16"

GEOMETRY="1600x900"


OPTIONS="-depth ${DEPTH} -geometry ${GEOMETRY} :${DISPLAY}"


. /lib/lsb/init-functions


case $1 in

start)

log_action_begin_msg "Starting vncserver for user ${USER} on localhost:${DISPLAY}"

echo "su ${USER} -c /usr/bin/vncserver ${OPTIONS}"

su ${USER} -c "/usr/bin/vncserver ${OPTIONS}"

;;


stop)

log_action_begin_msg "Stoping vncserver for user ${USER} on localhost:${DISPLAY}"

echo "su ${USER} -c /usr/bin/vnc4server -kill :${DISPLAY}"

su ${USER} -c "/usr/bin/vnc4server -kill:${DISPLAY}"

;;


restart)

$0 stop

$0 start

;;


*)

echo "Usage:/etc/init.d/nvcserver {start|stop|restart}"
;;
esac

exit 0

쉘스트립트의 사용법을 잘 몰라서 ""때문에 고생을 많이 했다. 다른 사이트의 참고자료를 복사할 때도 주의해서 복사하자.



$ sudo chmod +x /etc/init.d/vncserver

$ sudo update-rc.d vncserver defaults


쉘스트립트가 잘 동작하는 확인하기 위해서 다음과 같이 명령어를 실행시켜보면 좋다.


$ sudo /etc/init.d/vncserver start

 * “Starting vncserver for user ‘kangmin’ on localhost:1”...                    su kangmin -c '/usr/bin/vncserver -depth 16 -geometry 1280x720 :1'

A VNC server is already running as :1

$ sudo /etc/init.d/vncserver stop

 * “Stoping vncserver for user ‘kangmin’ on localhost:1”...                     su kangmin -c '/usr/bin/vnc4server -kill:1'


New 'Megatong00:11 (kangmin)' desktop is Megatong00:11


Starting applications specified in /home/kangmin/.vnc/xstartup

Log file is /home/kangmin/.vnc/Megatong00:11.log


vnc를 설정 해지하려면

$ sudo update-rc.d vncserver remove


posted by 동글동글82
:
IT관련 지식들 2019. 1. 3. 18:02

1. 젠킨스 설치

>> sudo apt-get install jenkins 

==>젠킨스를 설치하는 도중에 에러 발생

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

에러 메시지


jenkins (2.156) 설정하는 중입니다 ...

Found an incorrect Java version  <<<<<==== 아마도 자바 버전 문제로 판단 됨

Java version found:

java version "1.7.0_181"

OpenJDK Runtime Environment (IcedTea 2.6.14) (7u181-2.6.14-0ubuntu0.3)

OpenJDK Server VM (build 24.181-b01, mixed mode)


Aborting

invoke-rc.d: initscript jenkins, action "start" failed.

dpkg: error processing package jenkins (--configure):

 설치한 post-installation 스크립트 하위 프로세스가 오류 1번을 리턴했습니다

Processing triggers for ureadahead (0.100.0-16) ...

처리하는데 오류가 발생했습니다:

 jenkins

E: Sub-process /usr/bin/dpkg returned an error code (1)

>>


*자바 설치 (현재 1.7버전이 있으니 1.8버전으로 설치)

>> sudo apt-get remove  openjdk-7-jdk  openjdk-7-jre openjdk-7-jre-headless


>> sudp apt-get install openjdk-8-

패키지가 없으니 패키지 서버를 추가하고 다시 설치

>> sudo add-apt-repository ppa:webupd8team/java

>> sudo apt-get update

>> sudo apt-get install oracle-java8-installer

>> java -version

>> javac -version

설치 확인

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

설치 재시도.

>> sudo apt-get install jenkins



2. nginx 설치

>> sudo apt-get install nginx


젠킨스 JVM용 리버스 프록시로 동작하도록 nginx의 설정 수정.

>> sudo vim /etc/nginx/sites-enabled/default


아래 내용 추가

server {

        listen 80;

        server_name jenkins.domain.com;

        return 301 http://$host$request_uri;

        }


server {

        listen 80;

        server_name jenkinks.domain.com;


        location / {

        proxy_set_header Host $host;

        proxy_set_header X-Real-IP $remote_addr;

        proxy_set_header X-Forwarded-For $Proxy_add_x_forwared_for;

        proxy_set_header X-Forwarded-Proto $scheme;


        #"역방향 프록시 설정이 잘못된 것으로 파악되었습니다(It appears that your rewerse proxy set up is broken)"라는 # 에러의 발생을 방지한다.

        proxy_pass      http://127.0.0.1:8080;

        proxy_read_timeout 90;


        proxy_redirect  http://127.0.0.1:8080 https://jenkins.domain.com;

        }

}


nginx 다시 시작
>> sudo service nginx restart

접속확인
http://192.168.XXX.XXX

포트가 문제인가해서 다시 http://192.168.XXX.XXX:80 으로 접속해도 에러


/etc/default/jenkins 파일 확인 중 port 8080을 확인


그래서 8080포트로 접속


암호입력 후 다음화면


왼쪽 유용한 플러그인을 설치



설치 완료 후 관리자 계정 생성



포트 설정


젠킨스 시작




로그인 화면


admin user 를 입력하면 다음 화면으로 이동




젠킨스 스냅샷 백업



설치 중




완료 후 재시작.

posted by 동글동글82
: