IT관련 지식들 2021. 6. 18. 15:04

1. 깃랩 주소에 접근(ID/PW 입력)

2. 첫화면(새프로젝트<New project> 버튼 클릭)

3. 새로운 프로젝트 생성(제목, 설명, 레벨, 초기화옵션 설정)

4. 생성된 프로젝트의 초기화면

-clone클릭하면 링크 복사 가능

5. 프로젝트에 멤버 추가(프로젝트 셋팅 ->  Settings -> members ->"Invite member")

6. 클론 성공

7. 파일복사 후 add

8. Commit & Push

9. 이후 코드 수정이 되면 commit & push. 다른 사람이 수정한 내용을 받아오려면 pull명령으로 동작시킴.

 

6-1. 기존에 작업중이던 폴더와 연결

>git push origin master http://주소:포트 --force

commit의 시점이 맞지 않는다고 해서 --force 옵션을 적용해야 한다. 따라서 git bash를 실행해서 명령을 실행.

 

7-1. 프로젝트 홈페이지에 접속하여 업데이트 내용 확인.

 

posted by 동글동글82
:
IT관련 지식들 2021. 4. 30. 12:35

우분투에서 깃을 사용하다가 HDD가 깨지는 바람에 자료가 다 날라갔다. 이것저것 알아보다가 회사에서 가지고 있던 시놀로지 나스가 있어서 여기에 깃 서버를 설치하기로 했다.

 

1. 깃 서버 설치 및 기본 설정

1-1. 깃 서버 설치

설치된 화면이지만, '모든 패키지'에서 git으로 검색하면 'Git Server'를 쉽게 찾을 수 있다. '설치'버튼을 누르면 수동설정 없이 자동으로 설치를 완료한다.

 

1-2. ssh 서비스 활성화

ssh서비스를 활성화 하고, 보안을 위해 기본포트 22에서 숫자를 변경한다. 저기 밑줄에서 보듯 만약 ssh를 사용하려면 계정이 Administrators 그룹에 속해야 한다. 그리고 계정이 Administrators를 가진다면 ssh로 접근하여 무엇이든 변경할 수 있다. 만약 내부 보안을 지켜야 한다면 ssh를 통한 git 설정은 건너뛰고 GitLab 설치부터 보시길 권한다.

 

1-3. 사용자 홈 서비스 활성화

사용자 홈 서비스를 활성화 한다. 대여섯개의 사이트를 돌아다니며 필요하다고 한 설정을 다 한것이라 이걸 왜 해야하는지는 아직 정확하게 이해하지는 못했다.

 

웹으로 접속해서 하는 내용들이라 따라하기가 어렵지 않다.

 

2. 깃 레포지토리 생성

 레포지토리 초기화를 하고 클론을 해야 하는데 이걸 어떻게 시작해야하는지 몰라 구글에게 '시놀로지 나스 깃 설정'이란 검색어로 검색을 했다.

 

2-1. ssh로 접근

터미널을 통해 서버에 접속한다. 저는 putty를 사용했습니다. 생성한 ID/PW가 있으면 ID/PW를 입력하여 접속합니다. 생성한 것이 없다면 관리자 권한으로 접속합니다.

 

2-2. 폴더 생성 및 초기화

초기화 할 폴더를 생성하고 깃 초기화를 적용합니다.

 

cd /var/services/homes/gituser

==> 저장소를 생성할 위치로 이동. '/volume2/homes/gituser'로 이동해도 경로가 같다.

mkdir testGit

cd testGit

==> 폴더생성

==> 폴더로 이동

git init --bare

==> 깃 초기화

cd..

chown -R gituser:user testGit

==> 폴더 이동 후 폴더 내 파일의 권한 변경.  chown명령에 권한이 없다고 하면, sudo 를 앞에 붙인다.

 

3. 윈도우에서 tortoiseGit으로 접속.

tortoiesGit설치 (여기에서 다운로드)

설치는 원하는 폴더로 이동

우클릭하여 git->clone을 선택

경로는 ssh://gituser@192.168.1.2:22/var/services/homes/gituser/testGit

경로에 대해 간단히 설명하면 "ssh://유저ID@서버IP:서버포트 경로"

우분투에 설치했던 git에서는 ssh://를 생략했는데, 이부분을 쓰지 않아서 하루정도 고생했다.

 

다시 한 번 이야기하지만, 이 경우에는 시놀로지 나스의 보안정책에 의해 gituser란 사용자가 관리자 그룹에 속해야 한다. 이는 사용자가 ssh로 접속하거나, 웹으로 접근해서도 관리자 권한을 가지고 있기 때문에 보안에 취약해진다. 개인이나 소그룹의 경우는 괜찮지만, 기업이나 여러명이 접속해야하는 경우에는 아래의 Git Lab을 사용하길 추천한다.

 

4. Git Lab설치

4-1. 패키지 설치

시놀로지 웹으로 접속해서 패키지 센터에 접근하면, Git Lab이 있다. 설치를 누르면 도커(docker)에 설치를 하고 추가로 필요한 프로그램을 자동으로 설치한다. 설치를 하면서 필요한 설정들이 있는데 대부분 직관적으로 무슨 의미인지 알 수 있는 값이다. 혹시 이 과정에서 모르는 설정값이 많다면 구글에서 '시놀로지 나스 깃 랩 설정'으로 찾아서 화면 캡처가 많은 페이지를 참고하기 바란다.

 

4-2. 도커에서 확인

synology_gitlab을 설치했더니, postGresql과 redis란 컨테이너를 추가로 설치한다.

 

4-3. 접속 포트 확인

도커에서 컨테이너 -> synology_gitlab 우클릭 -> 세부사항을 누르면 위의 사진처럼 뜬다. 왼쪽 아래에 포트설정에 표시된 로컬포트를 기억한다.

 

5. Git Lab 접속 및 초기설정

5-1. Git Lab 웹페이지 접속

웹브라우저에서 'http://192.168.1.2(서버IP):30000(접속포트)'로 접속하면 접속화면이 나온다. 최초 접속시 비밀번호를 입력하는 화면이 나오고, 이 비밀번호와 초기 아이디(root)로 접속할 수 있다.

 

5-2. 프로젝트 생성

 

초기화면이 위와 같이 나오면 'Create a project'를 눌러 새로운 프로젝트를 만든다.

 

Project name

    -빈 프로젝트를 만들면서 프로젝트 이름을 적는다.

Project URL

    -프로젝트의 URL은 자동으로 생성된다. 

Project description

    -프로젝트의 설명을 간단히 적는다.

Visibility Level

    -직역을 해서 적어보기는 하는데, public을 하는게 제일 편하고, private를 선택해서 ssh key까지는 등록해봤다.

    -private : 접속에 권한이 필요하다. ssh key등록 등의 절차가 필요하다.

    -internal :  로그인한 사용자만 접속이 가능하다.

    -public : 권한 없이 접속이 가능한다.

Initaialize repository with a README

    -클론으로 저장소를 받은 후 push할 때, 데이터가 안 올라가는 경우가 있다. 정확한 원리는 잘 모르지만, 이 항목을 선택하면 데이터가 올라간다.

 

깃랩의 초기설정과 기능에 대해서는 조금 더 확인하고 검토 후 추가하고자 한다.

 

posted by 동글동글82
:
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
:
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
: