반응형

WMware 리눅스(우분투)와 윈도우 폴더를 공유해 보자.

 

가상머신의 세팅 옵션에서 Folder sharing을 enable하고 공유할 윈도우 폴더를 지정한다.

 

리눅스에서 공유에 사용할 디렉토리를 생성하고 아래 명령으로 마운팅 한다.

/usr/bin/vmhgfs-fuse .host:/ ~/shares -o subtype=vmhgfs-fuse,allow_other

위 그림과 같이 allow_other 옵션 때문에 에러가 발생한다면 아래 내용을 진행한다. (아니면 명령 앞에 sudo를 붙여준다)

 

/etc/fuse.conf 파일을 에디터로 오픈 한다.

 

user_allow_other 명령의 주석을 해제한다.

 

 

다시 마운팅 명령을 실행하면 문제 없이 마운팅 된다.

재부팅하면 다시 마운팅해야 한다.

 

※ 참고

Using Shared Folders

 

반응형
Posted by J-sean
:
반응형

우분투에 서버용 JDK를 설치하고 세팅해 보자.

 

openjdk-XX-jdk-headless(서버용)를 설치한다.

 

/etc/profile 파일을 오픈 한다.

 

/etc/profile 파일

 

파일의 마지막에 JAVA_HOME 세팅을 추가한다.

 

 

/etc/environment 파일을 오픈 한다.

 

/etc/environment 파일

 

PATH 끝에 ':$JAVA_HOME/bin'을 추가한다.

 

재부팅하고 echo 명령으로 $JAVA_HOME과 $PATH를 확인한다.

 

 

사실 /usr/bin/ 에 JAVA_HOME/bin 파일이 모두 있기 때문에 PATH 추가는 굳이 하지 않아도 상관 없다.

 

테스트용 JAVA 소스 파일을 작성하고 저장한다.

 

컴파일 하고 실행한다.

 

반응형
Posted by J-sean
:
반응형

우분투 16.04 서버를 사용하던 중 업데이트를 했더니 ESM(Extended Security Maintenance)이 활성화 되지 않아 업데이트를 할 수 없다는 메세지가 떴다.

 

우분투 ESM을 활성화 하고 업데이트 해 보자.

 

우분투 홈페이지에 가입하고 UA Subscriptions를 확인하면 Token이 있다.

 

 

아래 명령어를 실행한다.

(급히 적용 하느라 스크린샷은 없다)

 

# Note that the following steps are not necessary in Ubuntu Pro
# Install the latest UA client
$ sudo apt update
$ sudo apt install ubuntu-advantage-tools

# Use the client to attach this machine to your contract using your UA token
$ sudo ua attach <token>            # <token>에 홈페이지에서 찾은 토큰을 넣는다.
# Ensure ESM-infra is enabled as well:

$ sudo ua enable esm-infra         # 이미 enable 되었다고 나올거다.
$ sudo apt update
$ sudo apt upgrade

 

※ 참고

https://ubuntu.com/blog/ubuntu-16-04-lts-transitions-to-extended-security-maintenance-esm

 

반응형
Posted by J-sean
:
반응형

리눅스(우분투, 라즈베리 파이)에서 특정 프로그램이 자동 실행 되도록 해 보자.

 

/etc/rc.local 파일에 실행하고 싶은 명령을 추가한다.

위 예제는 루트 디렉토리(/)의 파일 목록을 /home/sean/test.txt 파일로 출력한다.

'exit 0' 명령 위에 추가한다.

 

/lib/systemd/system/rc-local.service 파일을 열어준다.

 

아래 명령을 추가한다.

[Install]

WantedBy=multi-user.target

 

서비스를 활성화한다.

 

 

재부팅 해보면 rc.local 파일이 자동 실행되어 ~/test.txt 파일이 생성돼 있다.

 

반응형
Posted by J-sean
:
반응형

안드로이드 앱을 위한 리눅스(우분투) 데이터베이스(MySQL/MariaDB) 서버를 만들어 보자.

 

app/res/xml/network_security_config.xml 파일을 작성한다.

 

AndroidManifest.xml 에 인터넷 권한과 networkSecurityConfig를 추가한다.

 

리니어 레이아웃에 에디트텍스트, 버튼, 텍스트뷰를 적당히 배치한다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
package com.example.myapplication;
 
import androidx.appcompat.app.AppCompatActivity;
 
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
 
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
 
public class MainActivity extends AppCompatActivity {
 
    EditText editText1;
    EditText editText2;
    TextView textView;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        editText1 = findViewById(R.id.editText1);
        editText2 = findViewById(R.id.editText2);
        textView = findViewById(R.id.textView);
 
        Button button = findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String id = editText1.getText().toString();
                String name = editText2.getText().toString();
 
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        RequestData(id, name);
                    }
                }).start();
            }
        });
    }
 
    public void RequestData(String id, String name) {
        try {
            BufferedReader bufferedReader;
            StringBuilder stringBuilder = new StringBuilder();
 
            String urlString = "http://192.168.171.200/data_check.php";
            URL url = new URL(urlString);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            if (conn != null) {
                conn.setConnectTimeout(5000);
                conn.setReadTimeout(5000);
                conn.setRequestMethod("POST");
                conn.setDoInput(true);
                conn.setDoOutput(true);
                conn.connect();
 
                String parameter = "id=" + id + "&name=" + name;
                OutputStream outputStream = conn.getOutputStream();
                outputStream.write(parameter.getBytes(StandardCharsets.UTF_8));
                outputStream.flush();
                outputStream.close();
 
                int responseCode = conn.getResponseCode();
 
                if (responseCode == HttpURLConnection.HTTP_OK) {
                    bufferedReader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
                } else {
                    bufferedReader = new BufferedReader(new InputStreamReader(conn.getErrorStream()));
                }
 
                String line = null;
                while ((line = bufferedReader.readLine()) != null) {
                    stringBuilder.append(line + "\n");
                }
 
                textView.setText(stringBuilder);
 
                bufferedReader.close();
                conn.disconnect();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
 

 

서버에 데이터를 요청하고 표시하는 소스를 작성한다. (MainActivity.java)

 

 

리눅스(우분투) 서버 데이터베이스에 위와 같은 테이블과 데이터를 생성한다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<?php
    $mysql_host = "localhost";
    $mysql_user = "root";
    $mysql_password = "1234";
    $mysql_db = "member_db";
 
    $conn = mysqli_connect($mysql_host$mysql_user$mysql_password$mysql_db);
 
    if (!$conn) {
        die("Database Connect Error: " . mysqli_connect_error());
    }
 
    $android = strpos($_SERVER['HTTP_USER_AGENT'], "Android");
 
    if ((($_SERVER['REQUEST_METHOD'== 'POST'&& isset($_POST['submit'])) || $android)
    {
        $post_id = trim($_POST['id']);
        $post_name = trim($_POST['name']);
 
        $sql = "SELECT * FROM member WHERE id='$post_id' AND name='$post_name'";
        $result = mysqli_query($conn$sql);
 
        if (mysqli_num_rows($result== 1 ) {
            $member = mysqli_fetch_assoc($result);
            echo "ID: " . $member['id'] . " Name: " . $member['name'] . " Age: " . $member['age'];
        } else {
            echo "No Data.";
            mysqli_close($conn);
            exit;
        }
    } else {
        echo "No Android Device Detected.";
    }
 
    mysqli_close($conn);
?>
 

 

아파치 서버 디렉토리에 안드로이드 앱 요청을 처리할 PHP 파일을 작성한다. (/var/www/html/data_check.php)

 

앱을 실행하고 정보를 요청하면 Age 데이터가 표시된다.

 

잘못된 정보 요청.

 

 

 

안드로이드가 아닌 다른 운영체제로 서버에 접속.

※ 참고

SELinux 유효성 검사

 

반응형
Posted by J-sean
:
반응형

PHP에 MariaDB(MySQL)를 연동해 보자.

 

MariaDB(MySQL), PHP 뿐만 아니라 php-mysql도 필요하다.

 

위와 같이 member_db 데이터베이스에 member 테이블을 만든다.

 

데이터베이스 정보를 읽어오는 php 소스를 작성한다.

 

서버에 접속하면 데이터베이스 내용이 표시된다.

 

 

데이터베이스 접속 오류시 표시 내용 (잘못된 암호)

 

반응형
Posted by J-sean
:
반응형

리눅스(우분투)에서 삼바를 설치하고 사용해 보자.

 

2020.01.03 - [Linux] - How to install and use Samba in Fedora Linux 페도라 리눅스에서 Samba 사용하기

 

samba를 설치한다.

 

smb.conf 파일을 수정한다.

/etc/samba/smb.conf 파일 끝에 아래 내용을 추가한다.

[share]
path = /share
public = yes
writable = yes

 

smb.conf 내용대로 공유할 디렉토리를 만든다. (path = /share)

 

smb.conf 설정에 문제가 없는지 확인한다.

 

 

samba 접속을 위해 IP 주소를 확인한다. (192.168.171.200)

 

다른 컴퓨터에서 접속이 가능하다.

\\192.168.171.200
\\192.168.171.200\share

 

반응형
Posted by J-sean
:
반응형

리눅스에 MariaDB(MySQL)를 설치하고 데이터베이스 서버에 원격으로 접속 해 보자.

 

MariaDB 서버 및 클라이언트를 설치한다.

윈도우용 MariaDB 설치 파일은 서버와 클라이언트를 함께 설치 하지만 리눅스(우분투)용 MariaDB는 따로 설치해야 한다.

 

설치가 완료 되었다면 클라이언트를 실행해 본다.

 

클라이언트 실행에 문제가 없다면 설정파일을 열어준다.

MariaDB는 기본적으로 원격 접속이 막혀있다. 설정을 변경하기 위해 아래 경로의 파일을 수정해야 한다.

/etc/mysql/mariadb.conf.d/50-server.cnf

 

'bind-address = 127.0.0.1' 을 주석처리 하고 저장한다.

※ 방화벽이 설정되어 있다면 MariaDB가 사용하는 포트를 열어준다.

sudo ufw allow 3306

 

 

MariaDB(MySQL) 사용 포트 확인.

show global variables like 'port';

 

서버에 접속할 클라이언트가 사용하는 IP 주소를 확인한다.

데이터베이스 서버에 접속할 클라이언트의 IP 주소를 미리 서버에 등록해야 한다.

서버를 WMware 에 설치했기 때문에 IP 주소는 192.168.0.16 이 아니라 192.168.171.1 을 사용한다.

 

서버가 설치된 컴퓨터에서 사용자 정보가 들어 있는 mysql.user 테이블을 확인해 본다.

로컬호스트의 root 사용자(리눅스의 root 사용자와 무관)만 등록되어 있다. 로컬호스트 이므로 원격으로 접속할 수 없다.

 

모든 데이터베이스에 모든 권한을 가지고 192.168.171.XXX에서 접속하는 sean이라는 사용자를 만든다. password는 1234.

유동 IP의 경우 재부팅 할 때마다 IP가 바뀔 수 있으므로 192.168.171.XXX 범위의 IP 주소를 가지는 컴퓨터는 모두 접속 할 수 있도록 설정 한다.

grant all on *.* to sean@'192.168.171.%' identified by '1234';

 

 

원격 사용자 설정 후, MariaDB를 재시작하고 데이터베이스 서버가 설치된 컴퓨터의 IP 주소(192.168.171.200)를 확인한다.

sudo systemctl restart mariadb

 

클라이언트에서 서버로 접속한다.

MariaDB(MySQL) 클라이언트를 실행하고 아래와 같이 입력한다.

mysql -h (IP 주소) -u (사용자) -p

 

-p 옵션에 password를 바로 입력해도 된다.

-p 옵션에 password는 공백 없이 붙여야 한다.

-p 1234 (X)

-p1234 (O)

 

반응형
Posted by J-sean
: