라즈베리파이용으로 배포된 이미지를 SD 카드에 구웠더니 16GB 용량인데도 root 파티션이 너무 작게 잡혀있네요~

4G 용량 이하로 이미지가 만들어졌는가 봅니다.

남아있는 공간을 할당하여 사이즈를 확장하는 방법입니다.

늘였다가 줄이기는 안됩니다. ( 먹통이 됩니다. )

[root@localhost ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/root       1.4G  1.3G  112M  92% /
devtmpfs        460M     0  460M   0% /dev
tmpfs           464M     0  464M   0% /dev/shm
tmpfs           464M   12M  452M   3% /run
tmpfs           464M     0  464M   0% /sys/fs/cgroup
/dev/mmcblk0p1  667M   43M  625M   7% /boot
tmpfs            93M     0   93M   0% /run/user/0

[root@localhost ~]# fdisk /dev/mmcblk0
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): p

Disk /dev/mmcblk0: 15.8 GB, 15819866112 bytes, 30898176 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x000cc7a5

        Device Boot      Start         End      Blocks   Id  System
/dev/mmcblk0p1   *        2048     1370111      684032    c  W95 FAT32 (LBA)
/dev/mmcblk0p2         1370112     2369535      499712   82  Linux swap / Solaris
/dev/mmcblk0p3         2369536     5298175     1464320   83  Linux  ( 이 부분을 지웠다가 다시 늘여줍니다. )
   ( 시작블럭이 같고 뒷쪽에 남아있는 영역을 사용하는 것은 기존 파일이 있더라도 가능한가 봅니다. )

Command (m for help): d
Partition number (1-3, default 3): 3
Partition 3 is deleted

Command (m for help): p

Disk /dev/mmcblk0: 15.8 GB, 15819866112 bytes, 30898176 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x000cc7a5

        Device Boot      Start         End      Blocks   Id  System
/dev/mmcblk0p1   *        2048     1370111      684032    c  W95 FAT32 (LBA)
/dev/mmcblk0p2         1370112     2369535      499712   82  Linux swap / Solaris

Command (m for help): n
Partition type:
   p   primary (2 primary, 0 extended, 2 free)
   e   extended
Select (default p): p
Partition number (3,4, default 3):
First sector (2369536-30898175, default 2369536):
Using default value 2369536
Last sector, +sectors or +size{K,M,G} (2369536-30898175, default 30898175):
Using default value 30898175
Partition 3 of type Linux and of size 13.6 GiB is set

Command (m for help): p

Disk /dev/mmcblk0: 15.8 GB, 15819866112 bytes, 30898176 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x000cc7a5

        Device Boot      Start         End      Blocks   Id  System
/dev/mmcblk0p1   *        2048     1370111      684032    c  W95 FAT32 (LBA)
/dev/mmcblk0p2         1370112     2369535      499712   82  Linux swap / Solaris
/dev/mmcblk0p3         2369536    30898175    14264320   83  Linux  ( 엄청 늘어났습니다. )

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks. ( 재부팅하라고 하네요~ )

[root@localhost ~]# reboot
login as: root
root@192.168.1.3's password:
Last login: Wed May  8 13:57:11 2019 from 192.168.1.83
[root@localhost ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/root       1.4G  1.3G  113M  92% /
devtmpfs        460M     0  460M   0% /dev
tmpfs           464M     0  464M   0% /dev/shm
tmpfs           464M   12M  452M   3% /run
tmpfs           464M     0  464M   0% /sys/fs/cgroup
/dev/mmcblk0p1  667M   43M  625M   7% /boot
tmpfs            93M     0   93M   0% /run/user/0


[root@localhost ~]# resize2fs /dev/mmcblk0p3 ( 리사이즈 명령어를 실행합니다. )
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/mmcblk0p3 is mounted on /; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 2
The filesystem on /dev/mmcblk0p3 is now 3566080 blocks long.

[root@localhost ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/root        14G  1.3G   13G  10% /
devtmpfs        460M     0  460M   0% /dev
tmpfs           464M     0  464M   0% /dev/shm
tmpfs           464M   12M  452M   3% /run
tmpfs           464M     0  464M   0% /sys/fs/cgroup
/dev/mmcblk0p1  667M   43M  625M   7% /boot
tmpfs            93M     0   93M   0% /run/user/0

늘어난 용량을 확인할 수가 있습니다.

이렇게 늘인 공간을 다시 줄이기는 안되는군요~

 

블로그 이미지

영은파더♥

가상서버호스팅 VPS 리눅스 서버관리 윈도우 IT

,

라즈베리파이 2/3 용 CentOS 7 이미지의 루트계정 초기 비번은 centos 입니다.

라즈베리파이 2 에 로그인해서 간단하게 정보를 살펴보았습니다.

 

[root@localhost ~]# cat /proc/cpuinfo
processor       : 0
model name      : ARMv7 Processor rev 5 (v7l)
BogoMIPS        : 38.40
Features        : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm
CPU implementer : 0x41
CPU architecture: 7
CPU variant     : 0x0
CPU part        : 0xc07
CPU revision    : 5

processor       : 1
model name      : ARMv7 Processor rev 5 (v7l)
BogoMIPS        : 38.40
Features        : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm
CPU implementer : 0x41
CPU architecture: 7
CPU variant     : 0x0
CPU part        : 0xc07
CPU revision    : 5

processor       : 2
model name      : ARMv7 Processor rev 5 (v7l)
BogoMIPS        : 38.40
Features        : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm
CPU implementer : 0x41
CPU architecture: 7
CPU variant     : 0x0
CPU part        : 0xc07
CPU revision    : 5

processor       : 3
model name      : ARMv7 Processor rev 5 (v7l)
BogoMIPS        : 38.40
Features        : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm
CPU implementer : 0x41
CPU architecture: 7
CPU variant     : 0x0
CPU part        : 0xc07
CPU revision    : 5

Hardware        : BCM2835
Revision        : a21041
Serial          : 000000001fa9334f

[root@localhost ~]# cat /etc/centos-release
CentOS Linux release 7.6.1810 (AltArch)

[root@localhost ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/root       1.4G  896M  451M  67% /
devtmpfs        460M     0  460M   0% /dev
tmpfs           464M     0  464M   0% /dev/shm
tmpfs           464M   12M  452M   3% /run
tmpfs           464M     0  464M   0% /sys/fs/cgroup
/dev/mmcblk0p1  667M   38M  629M   6% /boot
tmpfs            93M     0   93M   0% /run/user/0
[root@localhost ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:            927          38         767          11         120         832
Swap:           487           0         487

블로그 이미지

영은파더♥

가상서버호스팅 VPS 리눅스 서버관리 윈도우 IT

,

ARM 용 CentOS 7 을 설치했더니 epel-release 가 그냥으로는 설치가 안되는군요~

[root@localhost android]# yum install epel-release
...
No package epel-release available.
Error: Nothing to do

# yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
주소를 직접 입력해서 설치가 가능합니다.

File /var/cache/yum/armhfp/7/epel/metalink.xml does not exist 같은 에러가 발생할 겁니다.

삭제하고 아래 처럼 repo 를 추가합니다.

cat > /etc/yum.repos.d/epel.repo << EOF
[epel]
name=Epel rebuild for armhfp
baseurl=https://armv7.dev.centos.org/repodir/epel-pass-1/
enabled=1
gpgcheck=0
EOF

cat > /etc/yum.repos.d/php72-testing.repo << EOF
[php72-testing]
name=Remi php72 rebuild for armhfp
baseurl=https://armv7.dev.centos.org/repodir/community-php72-testing/
enabled=1
gpgcheck=0
EOF

cat > /etc/yum.repos.d/remi.repo << EOF
[remi]
name=Remi's RPM repository for Enterprise Linux 7 - $basearch
mirrorlist=http://cdn.remirepo.net/enterprise/7/remi/mirror
enabled=1
gpgcheck=1
gpgkey=https://rpms.remirepo.net/RPM-GPG-KEY-remi
EOF

epel-release 를 지원했으면 좋겠군요~

 

 

 

블로그 이미지

영은파더♥

가상서버호스팅 VPS 리눅스 서버관리 윈도우 IT

,

삼성 갤럭시윈에 리눅스를 설치하는데 "Missing parameters: TARGET_PATH" 메시지 이후로 더 이상 설치가 안되는군요~

Missing parameters: TARGET_PATH

Debug 모드를 켜고 로그를 보니 Permission denied 퍼미션 문제로 나오는군요~

인터넷에 검색해서 아래 처럼 설정하고 진행하니 잘 됩니다.

왼쪽 상단에 옵션을 실행해서 설정으로 들어가서 아래의 옵션 값으로 설정을 합니다.

ENV 폴더 : /data/user/0/ru.meefik.linuxdeploy/files

PATH 값 : /system/xbin/

CLI 활성화 체크

ENV 업데이트

이제 다시 설치를 해보세요~

 

블로그 이미지

영은파더♥

가상서버호스팅 VPS 리눅스 서버관리 윈도우 IT

,

LG 옵티머스 GK 스마트폰에 리눅스를 한번 설치해 보았습니다.

Play 스토어에서 Linux Deploy 앱을 설치합니다.

Linux Deploy

생각 보다 많은 분들이 설치를 하였네요~

앱을 실행하면 도움말이 자세하게 나와있습니다.

루팅하는 방법은 https://ivps.tistosy.com/711 여기를 참고하세요~

2번의 링크를 눌러서 BusyBox 를 설치합니다.

 

BusyBox

설치하고 실행합니다.

 

설치를 눌러서 진행합니다.

 

루트 권한이 필요하다고 창이 뜨면 ALLOW 를 누릅니다.

 

BusyBox 설치가 완료되었습니다.

이제 다시 Linux Deploy 앱에서 원하는 리눅스 종류를 선택합니다.

저는 CentOS 를 선택했습니다.

 

ssh 에 사용할 계정과 비밀번호를 설정합니다.

 

그리고 SSH 활성화 항목에 체크를 합니다.

 

상단 오른쪽을 터치해서 설치를 진행합니다.

 

루트 권한을 요청하는 팝업이 뜨면 허용을 해줍니다.

 

30분 넘게 기다리면 설치가 완료됩니다.

물론 사용자 환경에 따라 시간은 달라질 수 있습니다.

 

위의 화면 처럼 <<< deploy 가 나오면 왼쪽 하단의 시작 버튼을 눌러서 리눅스 서비스를 시작합니다.

 

Starting extra/ssh ... done 이 나오는 것을 확인합니다.

이제 ssh 접속이 가능한 ssh client 앱을 설치하고 127.0.0.1 22번 포트로 연결합니다.

저 위에서 설정한 계정 정보로 로그인을 합니다.

공유기 와이파이로 연결되어서 그런지 192.168.x.x 로는 접속이 안되네요~

공유기에서 ssh 포트를 포트포워딩하고 외부아이피로 접속을 하니깐 잘 됩니다.

 

블로그 이미지

영은파더♥

가상서버호스팅 VPS 리눅스 서버관리 윈도우 IT

,

Kingo ROOT 앱과 같은 구글 플레이 스토어에 등록되지 않은 앱을 설치하다 보면 "Play 프로텍트에 의해 차단됨" 메시지를 볼 수가 있습니다.

이 화면에서 세부정보를 눌러서 계속 설치(안전하지 않음) 을 눌러서 설치를 하면 됩니다.

혹시 확인을 눌렀다면 앱을 재 설치 시도하더라도 더 이상 설치가 되지 않습니다.

 

이런 경우에는 애플리케이션 관리에서 "Google Play 스토어" 앱의 데이터 삭제를 하고 다시 설치하면 됩니다.

 

블로그 이미지

영은파더♥

가상서버호스팅 VPS 리눅스 서버관리 윈도우 IT

,

집에 굴러다니는 오래된 모델인 갤럭시윈(그리고, 갤럭시S3, LG 옵티머스 GK)에 Linux Deploy 로 리눅스 설치 한번 해 보려고 루팅을 해 보았습니다.

인터넷에 루팅앱을 검색해 보니 TowelRoot 와 KingoRoot 등이 있더군요~

towelroot.com 에서 받은 앱은 설치까지는 성공했지만 제가 가지고 있는 모델로는 루팅까지는 안되네요~

다음으로 시도해본 kingoapp.com 에서 다운로드 받은 앱으로 시도하였습니다.

KingoRoot

www.kingoapp.com 에서 안드로이드용 KingoRoot.apk 를 다운로드합니다.

 

KingoRoot.apk

다운로드 받은 앱을 실행합니다.

 

설치를 하다보면 Play 프로텍트에 의해 차단됨 메시지 창이 뜨는데 세부정보를 눌러서 계속 설치(안전하지 않음)을 누르면 됩니다.

 

Play 프로텍트에 의해 차단됨

그냥 확인 눌렀다면 다음부터는 더 이상 설치가 되지 않습니다.

다시 설치하려면 애플리케이션 관리에서 "Google Play 스토어" 앱의 데이터를 삭제하고 다시 진행하면 됩니다.

Google Play 스토어 데이터 삭제

앱을 설치하였다면 실행합니다.

 

Kingo ROOT

일부 모델은 위 화면에서 One Clink Root 를 실행하면 안드로이드 앱 만으로도 루팅이 됩니다.

"ROOT FAILED" 가 메시지가 나오면서 실패했다면 아래의 PC 버전으로 루팅하는 방법을 이용합니다.

 

아래는 PC와 연결해서 루팅하는 방법입니다.

 

앱을 실행한 상태에서 이제 윈도우용 Kingo Root 프로그램을 다운로드 받아서 설치합니다.

 

미리 폰에서 USB Debugging 을 허용한 상태여야 합니다.

단말기와 PC 를 USB 케이블로 연결하고 프로그램을 실행합니다.

 

조금 지나면 폰에서 자동으로 Kingo Link 앱을 설치 시도가 됩니다.

세부정보를 눌러서 계속 설치를 합니다.

 

연결이 된 상태입니다.

 

ROOT 를 눌르면 됩니다.

 

몇 분이 지나면 루팅이 완료가 됩니다.

 

PC 에서 위 화면이 뜨고 난 뒤에 폰을 보면 아래와 같은 상태인데 One Clink Root 를 실행하면 됩니다.

 

 

ROOT SUCCEEDED 메시지가 뜨면 루팅이 완료된 상태입니다.

 

루팅이 된 상태에서 PC 의 KingoROOT 프로그램을 다시 실행하면 REMOVE ROOT 와 ROOT AGAIN 메뉴가 나타납니다.

 

그리고 폰에서는 아래와 같은 화면이 보입니다.

루팅이 생각 보다 쉽게 되는군요~

 

블로그 이미지

영은파더♥

가상서버호스팅 VPS 리눅스 서버관리 윈도우 IT

,

라즈베리파이 2, 3 용 CentOS Image 를 다운로드 하고 굽는 방법입니다.

https://wiki.centos.org/Download 여기에서 해당 링크로 들어가시면 됩니다.

RaspberryPi 2/3 CentOS Image Download

Gnome, KDE, Minimal image 중에 원하는 이미지를 받으면 됩니다.

http://isoredirect.centos.org/altarch/7/isos/armhfp/CentOS-Userland-7-armv7hl-RaspberryPI-GNOME-1810-sda.raw.xz

http://isoredirect.centos.org/altarch/7/isos/armhfp/CentOS-Userland-7-armv7hl-RaspberryPI-KDE-1810-sda.raw.xz

http://isoredirect.centos.org/altarch/7/isos/armhfp/CentOS-Userland-7-armv7hl-RaspberryPI-Minimal-1810-sda.raw.xz

미러사이트를 잘 골라야 속도가 빠르네요~

다운로드 후에 https://www.balena.io/etcher/ 여기에서 Etcher 프로그램을 받습니다.

balenaEtcher Download

Portable 이 편하겠네요~

다운로드 받고 실행하면 한참 뒤에 아래와 같이 프로그램이 실행이 됩니다.

balenaEtcher 이미지굽기

Select image 를 눌러서 라즈베리용 CentOS 7 이미지를 선택하고 일정 시간이 지나면 Flash 버튼이 실행할 수 있도록 바뀌면 Flash 를 누르면 됩니다.

라즈베리파이 SD카드 OS 굽기

굽기가 완료되고 확인하면 668 MB 드라이브만 보이는데 디스크 관리자에서 보면 파티션이 분할되어 있는 것을 볼 수 있습니다.

이제 라즈베리파이에 넣고 부팅을 해보면 되겠네요~

 

블로그 이미지

영은파더♥

가상서버호스팅 VPS 리눅스 서버관리 윈도우 IT

,

스마트폰의 사진과 문자를 컴퓨터에서 바로 공유 및 문자전송이 가능한 MS의 Your Phone 이라는 프로그램이 있네요~

먼저 폰에서 구글 Play 스토어로 가서 your phone 을 검색해서 설치를 하여야 합니다.

윈도우에서는 Microsoft Store 를 실행하고 앱에서 your phone 을 검색하고 설치하면 됩니다.

한글로 번역되어서 사용자 전화로 나오는군요~

 

최근에 폰에서 찍은 사진을 바로 확인이 가능하네요~

마이크로소프트 Your Phone 사진공유

 

컴퓨터에서 문자도 볼 수 있고 전송도 가능합니다.

마이크로소프트 Your Phone 문자전송

 

참 편한 기능이네요~

 

블로그 이미지

영은파더♥

가상서버호스팅 VPS 리눅스 서버관리 윈도우 IT

,

URL 로 서버에 있는 파일을 AsyncTask 를 활용하여 비동기식으로 다운로드 하는 예제입니다.

 

DownloaderTask task = new DownloaderTask(url, filename); // 파일의 주소와 저장할 파일경로
task.execute(); // 다운로드 시작

task.cancel(true); // 다운로드 취소

package com.example.asyncdownload;

import android.os.AsyncTask;
import android.util.Log;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.IOException;
import java.net.URL;
import java.net.URLConnection;

public class DownloaderTask extends AsyncTask<String, String, Boolean> {
	private String TAG = "DownloaderTask";
	public String fileUrl = null;
	public String filePath = null;
	public long fileSize = -1;
	public long downloadSize = 0;
	public Boolean downloadEnd = false;

	public DownloaderTask(String url, String file) {
		this.fileUrl = url;
		this.filePath = file;
	}

	protected Boolean doInBackground(String... params) {
		Log.i( TAG, "doInBackground" );
		Boolean result = false;
		InputStream input = null;
		OutputStream output = null;
		URLConnection connection = null;

		try {
			URL url = new URL( fileUrl );
			connection = url.openConnection();
			connection.connect();

			fileSize = connection.getContentLength();
			Log.i( TAG, "fileLength : " + fileSize+"");
			input = new BufferedInputStream(url.openStream(), 8192);
			File outputFile = new File( filePath );
			Log.i( TAG, "outputFile : " + outputFile+"");
			output = new FileOutputStream(outputFile);

			byte[] buffer = new byte[8192];
			for (int bytesRead; (bytesRead = input.read(buffer)) >= 0; ) {
				if(isCancelled()) {
					Log.i( TAG, "isCancelled : " + isCancelled()+"");
					break;
				}
				downloadSize += bytesRead;
				publishProgress(downloadSize + "");
				output.write(buffer, 0, bytesRead);
			}
			output.flush();
			output.close();
			input.close();
			if(isCancelled()) {
				if(outputFile.exists()) { // 다운로드 취소된 파일은 삭제
					outputFile.delete();
					Log.i( TAG, "outputFile.exists() : " + outputFile.exists()+"");
				}
				downloadEnd = true;
				result = false;
			} else {
				result = true;
			}
		} catch (IOException e) {
			e.printStackTrace();
			result = false;
		}

		return result;
	}

	@Override
	protected void onPreExecute() {
		super.onPreExecute();
		Log.i( TAG, "onPreExecute" );
	}

	@Override
	protected void onPostExecute(Boolean aBoolean) {
		super.onPostExecute(aBoolean);
		if(fileSize == downloadSize) {
			downloadEnd = true;
		}
		Log.i( TAG, "onPostExecute" );
	}

	@Override
	protected void onProgressUpdate(String... values) {
		super.onProgressUpdate(values);
		long v = Long.parseLong(values[0]);
		//Log.i( TAG, "onProgressUpdate : " + v );
	}
}

  onPreExecute 제일 먼저 호출되는 함수
  doInBackground 실제 다운로드하는 루틴
  onProgressUpdate 다운로드 하면서 publishProgress 함수에 값을 넣으면 실행되는 함수
  onPostExecute 다운로드가 끝나면 호출되는 함수

 

프로그래스바는 호출하는 Activity 에서 구현하면 됩니다.

 

블로그 이미지

영은파더♥

가상서버호스팅 VPS 리눅스 서버관리 윈도우 IT

,