Oracle JDK 설치 on Ubuntu 14.04

아래 '원문보기'에 링크해놓은 블로그에서 본 방법을 적어두고자 한다.

[원문보기]

전적으로 위 블로그에 있는 간단한 방법(1번 방식)으로 진행했고

생각보다 시간이 오래 걸린다. (그래봤자 5분 정도...?)

시작

$ sudo apt-add-repository ppa:webupd8team/java
$ sudo apt-get update
$ sudo apt-get install oracle-java8-installer

끝.


설치 확인

$ java -version

SVN 서버 설치 및 웹 접속 설정-Ubuntu 14.04

[SVN 서버 구축하기 - Ubuntu 14.04]

SVN 서버 설치하고 웹 기반으로 접속할 수 있도록 apache 서버와 연동하는 방법을 함께 정리하고자 한다.


[참고 사이트]
1. SVN 설치 1
2. SVN 설치 2
3. SVN 설치 3
3. Apache 명령어 이해-블로그
4. Apache 명령어 이해-공식 사이트


[ SVN 서버 및 Apache 서버 설치 ]

1. 업데이트 수행

# sudo apt-get update


2. svn 서버와 아파치 서버 설치(SVN을 웹으로 접근하기 위해 필요)

# sudo apt-get install subversion apache2 libapache2-svn apache2-utils

[SVN 서버 설정]

1. 저장소 및 저장소를 위한 폴더 생성
아래에서 사용하는 testrepo는 테스트를 위해 설정한 이름으로, 실제 사용할 svn 저장소 이름이 있으면 해당 이름으로 변경해서 사용하면 된다.
*저장소 파일시스템은 일반 파일시스템 형식(fsfs)과 버클리 db(bdb: berkeley db) 형식으로 만들 수 있는데, 일반 파일시스템 형식이 추후 백업, 공유 등을 할때 문제 생길 요소가 적다고 한다. 정확한 이유는 모름.

$ sudo mkdir -p /svn/repos/
$ sudo svnadmin create --fs-type fsfs /svn/repos/testrepo


2. 계정 및 비밀번호 설정
testrepo 라는 이름으로 저장소를 생성하면 해당 폴더의 conf 폴더에 svnserve.conf 파일과 passwd 파일이 존재한다. passwd 파일을 이용해 계정과 비밀번호를 관리할 것이며, passwd 파일을 이용하기 위해 svnserve.conf 파일을 함께 수정해야 한다.

2.1 svnserve.conf 파일 수정
anon-access, auth-access, password-db 를 찾으면 모두 '#' 으로 시작함을 알 수 있다.
'#'는 주석처리를 의미하므로 '#'을 제거하여 옵션들을 활성화 시킨다.

$ cd /svn/repos/testrepo/conf/
$ sudo vim svnserve.conf

anon-access = read
auth-access = write
password-db = passwd


2.2 passwd 파일 수정
svn 접속 시 사용 할 id, pw를 'id = pw' 와 같은 형식으로 아래와 같이 추가해준다.

$ sudo vim passwd

[users]
test = 1234


3. SVN 서버 실행 및 확인
svn 서버를 아래 명령어로 실행한다.

$ svnserve -d -r /svn/repos/


정상적으로 실행이 됐는지 확인을 해보자. 명령어 입력 후 아래의 결과를 받으면 OK.

$ ps -ef | grep svnserve






4. OS 부팅 시 자동실행 등록
이대로 마치면 os 부팅시마다 svn 서버를 다시 실행시켜야 한다. 그런 번거로움을 없애기 위해 rc.local에 svn 서버 실행파일(svnserve)이 있는 경로(/usr/bin/)와 함께 추가한다.

$ sudo vim /etc/rc.local
# By default this script does nothing.
/usr/bin/svnserve -d -r /svn/repos/
exit 0


svn 설정은 이걸로 끝. 이제 아파치 서버 설치와 설정을 해보자.


[Apache 서버 설치 및 설정]


1. 저장소 소유권 변경

$ sudo chown -R www-data:www-data /svn/repos/testrepo


2. 설정 파일 생성 및 내용 추가
testrepo.conf 파일은 생성을 할 것이며, 저장소 이름과 반드시 동일해야 한다.

$ cd /etc/apache2/sites-available/
$ sudo vi testrepo.conf

<Location /svn>

  DAV svn

  SVNParentPath /svn/repos/

  AuthType Basic

  AuthName "Test Repo"

  AuthUserFile /svn/repos/svnpasswd

  Require valid-user

 </Location>


* AuthUserFile /svn/repos/svnpasswd : Step 5에서 생성할 유저정보를 담은 파일의 경로를 나타내며, 등록된 사용자만 읽기 허용하기 위함이다.


3. 웹 서버 활성화( 아래의 testrepo는 앞에서 테스트를 위해 설정한 이름으로, 동일해야 함)

$ sudo a2ensite testrepo


4. 아파치 서버 reload

$ sudo service apache2 reload


5. 유저 생성
첫번째 유저과 그 이후의 유저 생성은 옵션이 다르니 유의해야 함.

첫번째 유저 생성 시 -c 옵션을 입력
$ sudo htpasswd -c /svn/repos/svnpasswd user1

그 이후 유저 생성 시 -m 옵션을 입력
$ sudo htpasswd -m /svn/repos/svnpasswd user2


6. SVN 확인!!
웹 브라우져를 이용하여 아래의 경로로 접속하여 testrepo 저장소가 정상적으로 생성됐는지 확인.

URL : http://yourip/svn/testrepo (Eg http://10.0.1.15/svn/testrepo)


ID, PW를 입력하는 창이 뜨면 앞에서 설정한 정보(ID, PW)를 입력한다.

이렇게 SVN 서버 구축이 마무리 되었다.

이제 SVN client를 이용해서 버전관리를 해주면 끝~


간단히 SVN 서버 설치 및 구축하기 - Ubuntu 14.04

[SVN 서버 구축하기 - Ubuntu 14.04]

*아래 절차는 혼자서 버전관리를 위해 SVN을 구축하고 싶지만 trunk, branch 등의 개념을 아직 잘 모르고 간단하게 사용하고 싶을 경우에 해보는 것을 추천합니다. 조금 더 자세히 SVN에 대해 알고 구축하고 싶다면 JoinC의 SVN Tutorial을 참고하길 추천합니다.

[JoinC SVN Tutorial 바로가기]


소스코드 또는 문서의 버전관리를 위해 많이 사용하는 SVN(Subversion) 서버를
Ubuntu 14.04 환경에서 구축하는 간단한 방법을 설명하고자 한다.

*구축 절차는 원문 링크의 내용을 기반으로 번역 및 일부 개정한 것이다.
[원문 링크]

Step 1. 업데이트 수행

# sudo apt-get update


Step 2. 아파치 서버와 svn 서버 설치(SVN을 웹으로 접근하기 위해 필요)

# sudo apt-get install subversion apache2 libapache2-svn apache2-utils


Step 3. 저장소 및 저장소를 위한 폴더 생성
아래에서 사용하는 testrepo는 테스트를 위해 설정한 이름으로, 실제 사용할 이름이 있으면 변경 필요함.

# sudo mkdir -p /svn/repos/
# sudo svnadmin create /svn/repos/testrepo


Step 4. 저장소 소유권 변경

# sudo chown -R www-data:www-data /svn/repos/testrepo


Step 5. 설정 파일 생성 및 내용 추가

# cd /etc/apache2/sites-available/
# sudo vim testrepo.conf

<Location /svn>

  DAV svn

  SVNParentPath /svn/repos/

  AuthType Basic

  AuthName "Test Repo"

  AuthUserFile /etc/svnpasswd

  Require valid-user

 </Location>


* AuthUserFile /etc/svnpasswd : Step 8에서 생성할 유저정보를 담은 파일


Step 6. 웹 서버 활성화( 아래의 testrepo는 앞에서 테스트를 위해 설정한 이름으로, 동일해야 함)

# sudo a2ensite testrepo


Step 7. 아파치 서버 reload

# sudo service apache2 reload


Step 8. 유저 생성
첫번째 유저과 그 이후의 유저 생성은 옵션이 다르니 유의해야 함.

첫번째 유저 생성 시 -cm 옵션을 입력
# sudo htpasswd -cm /etc/svnpasswd user1

그 이후 유저 생성 시 -m 옵션을 입력
# sudo htpasswd -m /etc/svnpasswd user2


Step 9. SVN 확인!!
웹 브라우져를 이용하여 아래의 경로로 접속하여 testrepo 저장소가 정상적으로 생성됐는지 확인.

URL : http://yourip/svn/testrepo (Eg http://10.0.1.15/svn/testrepo)


이렇게 SVN 서버 구축이 마무리 되었다.

이제 SVN client를 이용해서 버전관리를 해주면 끝~


Linux Text mode로 부팅하기-Ubuntu 14.04

리눅스를 서버로 운용하기 위해서 필요없는 GUI를 띄우지 않고 바로 Console 형태인 TUI(Text Mode)로 부팅하는 방법을 적는다.

*구축 절차는 원문 링크의 내용을 기반으로 번역 및 일부 개정한 것이다.
[원문 링크]

Step 1. 백업 만들기
다시 Text mode에서 GUI 모드로 부팅하고 싶을 경우를 위해서 백업을 만드는게 좋다.

# sudo cp -n /etc/default/grub /etc/default/grub_origin


Step 2. grub 파일 내용 변경

# sudo vim /etc/default/grub

본문의 GRUB_CMDLINE_LINUX_DEFAULT=”quiet splash” 부분을 찾아서, 문장의 시작부분에 '#'를 추가하여 주석처리 한다. purple screent을 비활성화(which will disable the Ubuntu purple screen)하기 위함이다.

본문의 GRUB_CMDLINE_LINUX=”" 을 GRUB_CMDLINE_LINUX=”text” 으로 변경한다. 우분투를 Text mode로 부팅하도록 하기 위함이다.

본문의 #GRUB_TERMINAL=console 부분을 찾아서, 문장의 시작부분에 있는 '#' 을 제거한다. Grub Menu를 블랙&화이트 텍스트 모드로 변경하기 위함이다.( this makes Grub Menu into real black&white Text Mode (without background image) )


Step 3. 변경내용 업데이트
앞에서 변경한 grub 의 내용을 시스템에 반영하기 위해 update 를 진행한다.

# sudo update-grub


Step 4. 시스템 재부팅
변경 내용대로 Text Mode로 부팅 되는지 시스템 재부팅을 통해 확인~

# sudo reboot now



이것으로 Text mode 부팅하기 끝~~



*백업을 만들어 두면 GUI 모드로 복구하고 싶을때는 아래와 같이 간단히 복구 가능하다.

# sudo mv /etc/default/grub_origin /etc/default/grub
# sudo update-grub

VirtualBox(VM)에서 공유폴더(윈도우7, 리눅스) 설정

윈도우 호스트에서 리눅스를 가상OS로 돌리다보면 파일 공유가 필요한 시점이 생긴다.

아래에서는 호스트OS와 가상OS 간 파일 공유가 쉽도록 공유폴더 설정하는 법을 적어본다!


1. 폴더 생성
윈도우에 폴더를 생성하고 리눅스에서 설정을 마친 후 공유폴더가 제대로 동작하는지 확인 하기 위해 아무 파일이나 복사(또는 텍스트 파일 생성) 해놓는다.
 (여기서는 C:로 한다. D:, E: 아무 곳이나 상관없이 가능하다.)
C:winShare

2. 버추얼박스 설정
2.1. 공유 폴더 메뉴 선택
버추얼박스 메뉴 중 [장치]-[공유 폴더 설정]-[공유 폴더] 선택 후 우측의 십자가 모양 선택
 (OS가 실행되고 있는 버추얼박스가 아닌 가상 OS를 실행시키는 관리자 윈도우)

2.2. 공유 폴더 선택
'폴더 경로' 에서 '기타'를 선택 후 아까 만든 'C:winShare' 폴더를 선택하고, '자동 마운트', '항상 사용하기' 선택 후 '확인' 누름. 다시 한 번 '확인'을 눌러 창 닫음.


3. 리눅스 설정
리눅스 터미널을 실행하고 아래의 명령어를 입력한다.
$ sudo mkdir /mnt/share
$ sudo mount -t vboxsf winShare /mnt/share
$ ls /mnt/share

'1. 폴더 생성'에서 복사해 놓은 파일이 보이는지 확인하고, 보이면 성공!


4. 링크 연결
But! /mnt/share 폴더에서 작업을 하기는 불편하니 링크를 걸어 편하게 사용하자~
(pwd 명령으로 링크를 만들 곳의 경로를 확인하고 생성한다.)
$ pwd
/home/deoks
$ sudo ln -s /mnt/share /home/deoks/share
$ ls share

이번에도 파일이 제대로 보이면 성공! 편하게 쓰면 된다.


5. 번외
*단점은 리눅스가 재부팅 되면 마운트가 해제되기 때문에 다시 해줘야 한다는 것.
가상 OS(리눅스)를 재부팅하면 마운트가 해제되서 다시 연결해야 하는 불편함이 있다. 아래와 같이 쉘스크립트를 만들어서 재부팅하고나면 실행하도록 한다.

$ vim mkShareFolder.sh
   #! /bin/bash
   sudo mount -t vboxsf winShare /mnt/share
   sudo ln -s /mnt/share /home/deoks/share
$ chmod 755 mkShareFolder.sh
$ ./mkShareFolder.sh

진짜 끝!

Install Ubuntu 14.04.2 LTS on Virtualbox 4.3.12.


Install Ubuntu 14.04.2 LTS on Virtualbox 4.3.12.


새로운 환경에 우분투를 설치하고자 우분투 14.04.2 32bit와

버추얼박스(Virtualbox) 4.3.26을 다운받았다.


버추얼박스를 설치하고 우분투를 설치하려고 하는데 안된다...

자꾸 에러가 발생한다. -_-;;

구글링 해보니 4.3.12 사용을 적극 추천한다.


추천을 따라 버추얼박스(Virtualbox) 4.3.12 를 설치한다.


우분투를 설치해보니 잘 된다.


오호~ 좋아!!

이제 해상도 조절해서 써야지~


근데 게스트확장설치만하면 자꾸 아래 같은 에러가 발생한다. -_-;;



E:unable to correct problems you have held broken packages



뭐지 -_-



다시 설치해보고, 지우고, 이미지를 새로 다운받아 설치해보고, 재부팅만 여러번,,

안된다.



다시 구글링,,,,



수 많은 글을 읽고, 해보지만 안된다.

아,,, 스트레스,,,


그러던 중 맨 아주 조그맣게 달린 댓글을 본다.

해본다.

된다.


ㅡㅜ

Thanks to conradk.


서론이 너무 길었고,,

본론은 아래 세 줄이다.




$ sudo apt-get remove libcheese-gtk23

$ sudo apt-get install xserver-xorg-core

$ sudo apt-get install -f virtualbox-guest-x11


끝.


C#, 중복실행 체크 및 방지 코드

C#에서 프로그램 실행 시 이미 실행되고 있는 경우

실행되지 않도록 체크하고 방지해야 하는 일이 빈번히 발생한다.

아래 코드를 적어본다.

using System;
using System.Threading;
using System.Windows.Forms;


namespace runningCheck
{
    static class Program
    {
        

        /// 
        /// 해당 응용 프로그램의 주 진입점입니다.
        /// 
        [STAThread]
        static void Main()
        {
            bool flag = true;
            bool USE_WATCHDOG = true;

            Mutex watchDog;

            // 필요에 따라 중복실행 체크를 안할 수도 있으므로
            // 사용여부를 보고 중복체크 실행
            if (USE_WATCHDOG)
            {
                /* 프로세스 중복실행 체크를 위한 코드 시작 */                
                watchDog = new Mutex(true, "VMU_WATCHDOG", out flag);

                if (flag)
                {
                    Application.EnableVisualStyles();
                    Application.SetCompatibleTextRenderingDefault(false);
                    Application.Run(new mainForm());

                    watchDog.ReleaseMutex();
                }
                else
                {
                    MessageBox.Show("프로그램이 이미 실행 중 입니다.", "오류");
                }
                /* 중복체크를 위한 코드 끝 */
            }
            else
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(new mainForm());
            }
        }
    }
}
 

이상 끝!

C#, 프로그램 실행 시 관리자 권한 상승

프로그램을 작성하다보면 유저 권한이 아닌 관리자 권한을 획득해야 하는 상황이 발생한다.

아래에 C#에서 관리자 권한 획득을 위한 코드를 적어본다.

아래 코드는 윈도우 폼 프로그램 작성 시에는 Program.cs 에서 수정을 하면 된다.

using System;
/* 실행 시 관리자 권한 상승을 위해 추가*/
using System.Security.Principal;
using System.Diagnostics;
/* 추가 끝 */

namespace adminTest
{
    static class Program
    {
        

        /// 
        /// 해당 응용 프로그램의 주 진입점입니다.
        /// 
        [STAThread]
        static void Main()
        {

            /* 실행 시 관리자 권한 상승을 위한 코드 시작 */
            if (/* Main 아래에 정의된 함수 */IsAdministrator() == false)
            {
                try
                {
                    ProcessStartInfo procInfo = new ProcessStartInfo();
                    procInfo.UseShellExecute = true;
                    procInfo.FileName = Application.ExecutablePath;
                    procInfo.WorkingDirectory = Environment.CurrentDirectory;
                    procInfo.Verb = "runas";
                    Process.Start(procInfo);
                }
                catch (Exception ex)
                {
                    System.console.writeline(ex.Message.ToString());
                }

                return;
            }
            /* 실행 시 관리자 권한 상승을 위한 코드 끝 */
        }
        /* 실행 시 관리자 권한 상승을 위한 함수 시작 */
        public static bool IsAdministrator()
        {
            WindowsIdentity identity = WindowsIdentity.GetCurrent();

            if (null != identity)
            {
                WindowsPrincipal principal = new WindowsPrincipal(identity);
                return principal.IsInRole(WindowsBuiltInRole.Administrator);
            }

            return false;
        }
        /* 실행 시 관리자 권한 상승을 위한 함수 끝 */
    }
}
 
위 코

netstat, tasklist, taskkill 명령어

1. 현재 사용하고 있는 포트 확인

> netstat -ao



2. 포트를 사용하는 프로세스 아이디 확인

> netstat -anb



3. PID(ex. 1111)로 프로그램 찾기

> tasklist /SVC /fi "PID eq 1111"



4. PID(ex. 1111)로 프로세스 죽이기

> taskkill /f /pid 1111

C#, cmd 명령어 창 안보이게 실행하기


C#으로 프로그램을 만들다보니 사용자 계정 컨트롤 박스가 뜨지 않도록 해야 하는 상황이 발생했다.
사용자 계정 컨트롤 박스가 뜨지 않도록 하는 방법을 찾아보니 아래의 cmd 명령어를 찾을 수 있었다.

윈도우7 사용자 계정 컨트롤 disable 명령어
> C:\\Windows\\System32\\cmd.exe /k %windir%\\System32\\reg.exe ADD HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\System /v EnableLUA /t REG_DWORD /d 0 /f

윈도우7 사용자 계정 컨트롤 enable 명령어
> C:\\Windows\\System32\\cmd.exe /k %windir%\\System32\\reg.exe ADD HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\System /v EnableLUA /t REG_DWORD /d 1 /f


명령어를 찾았으니 프로그램 실행 시 위 명령어를 실행하도록 해야한다.

다시 좀 찾아보니 외부 프로그램은 아래 같은 방식으로 실행하면 된다고 한다.
Process.Start("cmd.exe");




그런데 나는 cmd 명령어를 실행시켜야 한다.

다시 좀 더 찾아보니 아래 방식으로 하면 위의 명령어를 실행 시킬 수 있다.

string msg = "C:\\Windows\\System32\\cmd.exe /k %windir%\\System32\\reg.exe ADD HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\System /v EnableLUA /t REG_DWORD /d 0 /f";

                

ProcessStartInfo startInfo = new ProcessStartInfo("cmd.exe", msg);

Process process = new Process();

                

process.StartInfo = startInfo;

process.Start();

process.Close();







그런데!!! cmd 창이 사라지질 않는다. 이제는 cmd 창에서 명령어를 실행시키되, 실행 후 cmd 창을 닫아야 한다.! 다시 더 찾아본다. 결국 아래 코드로 완성.!!

string msg = "C:\\Windows\\System32\\cmd.exe /k %windir%\\System32\\reg.exe ADD HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\System /v EnableLUA /t REG_DWORD /d 0 /f";

                

ProcessStartInfo startInfo = new ProcessStartInfo("cmd.exe", msg);

Process process = new Process();

startInfo.WindowStyle = ProcessWindowStyle.Hidden;

startInfo.CreateNoWindow = true;

                

process.StartInfo = startInfo;

process.Start();

process.Close();


휴~