유료툴이긴 하지만 꽤 유용해서 포스팅을 남깁니다.


윈도우에서 리눅스 파일 시스템을 읽고 쓰기를 할 수 있는 툴이 있었네요.


https://www.paragon-software.com/business/extfs-for-windows/


라즈베리파이에 이미지를 굽고, sshd가 바로 구동 될 수 있도록 하기 위해서는


/etc/rc.local 파일을 수정해야합니다.


systemctl start ssh (추가)


그런데 이 작업은 라즈베리파이에 키보드를 연결하고, 모니터 연결해서 직접 수정하는 수밖에 없는데요, 이미지를 바로 수정하는 방법을 없을까 찾아보다가 알게된 툴입니다.



가격은 2만1천원입니다만,


설치시 트라이얼로 10일간 임시 사용을 할 수 있습니다.








이렇게 탐색기로 바로 접근이 가능합니다. (수정도 가능하구요. ext2/ext3/ext4 가 가능하다고 하네요.)



좀 더 찾아보니, HFS+ 파일시스템을 윈도우에서, macOS에서 NTFS를 사용할 수 있는 제품도 있고, 이 기능들을 통합한 제품도 판매를 하는 군요.


이름하여, 교차 플랫폼 팩,

https://www.paragon-software.com/ko/home/file-system-link-suite/



참 재미있고도 유용한 툴입니다.




osx, linux에서 테스트했는데 잘 됩니다...

osx에서 ftp서버 설치하려니 하이시에라부터 뭐가 바뀌어서 깔기 귀찮게 되어있더군요.

그래서 docker로 설치해봤습니다.


kitematic은 아직 osx에서는 불안한 감이 있네요. 죽기도하고....



좀 더 돌려봐야겠지만 .. ftp 서버를 간단히 만들기 좋습니다.


kitematic 조금 쓰다가.... 편한데? 불편합니다...

역시... 커맨드라인쪽이 기능이 풍부합니다.


docker run -d -v /home/erith:/home/vsftpd \
-p 20:20 -p 21:21 -p 21100-21110:21100-21110 \
-e FTP_USER=[아이디] -e FTP_PASS=[비번] \
-e PASV_ADDRESS=[아이피] -e PASV_MIN_PORT=21100 -e PASV_MAX_PORT=21110 \
--name vsftpd --restart=always fauria/vsftpd



https://gitnub.com/fauria/docker-vsftpd




11기가 정도파일은 쭉-- 잘 올라가는데, 50기가 짜리파일은 올라가면서 자꾸 멈추는 문제가있네요.

첨에 osx에서만 테스트하다가 맥 문제인가 싶었는데... 파일이 너무 커서 그런듯한데...

일단 여기까지만 테스트.


https://docs.docker.com/docker-for-mac/#explore-the-application



50기가 파일 테스트.. 자주 끊킴현상이 발생합니다. 도커설정에서 swap늘려주고하면 좀 증상이 줄어들긴한데 끊키는건 마찬가지입니다.


11기가 파일 테스트. 그냥 쭉 잘 올라갑니다.


도커로 mysql을 설치하고 보니 시간대가 이상합니다.

KST로 변경이 필요해 보였습니다.


우선 운영컨테이너에 다음 명령으로 시간대를 수정합니다.


ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime


mysql에서도 아래와 같이 수정하였습니다.




select now()해서 현재 시간을 확인합니다.


이후, 


set time_zone = 'Asia/Seoul';

하여 시간대를 변경합니다.

그리고 바뀐 것을 확인합니다.


* 추가 배포판 확인

#grep . /etc/*-release


#cd /usr/share/zoneinfo/


파일있는지 확인하여

cp /usr/share/zoneinfo/Asia/Seoul /etc/localtime

ovewrite 확인

date 해서 시간확인

mysql 최신버전에서 암호방식이 바뀌어서 그렇습니다. 

mysql.dll을 포함한 mysql을 설치하여 dll을 heidisql로 복사하는 방법도 있는데, mysql을 따로 설치하기 싫어서 아래 방법으로 해결했습니다.


docker ps 해서, CONTAINER ID를 확인입니다, 화면에서는 f0c69ac1c8dc 입니다.



docker exec -it [CONTAINER_ID] bash 하여 배쉬쉘로 접근합니다. 컨테이너 아이디는 구분되는 첫글자들만 입력해도 됩니다.

그리고 mysql -uroot -p[암호] mysql 하여 mysql로 접속합니다.




ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '암호';

flush privileges;

합니다..




Docker를 이용하면 번거롭게 서버 이것저것 깔지 않고 컨테이너 설치만으로 깔끔하게 서비스 운용이 가능합니다.


더군다나 Kitematic을 이용하면 GUI를 이용해 굳이 커맨드라인 안쓰더라도 설치가 가능합니다. 설치도 굉장히 간단해서 좋습니다.! 

수분만에 설정이 완료입니다. ㅎㅎ,



윈도우즈10기준으로 설명하며, 워드프레스 설치를 해보겠습니다.




먼저 윈도우즈용 도커를 다운로드 받아 설치합니다. CE(Community Edition)을 설치하면 됩니다.


https://docs.docker.com/docker-for-windows/install/



Docker Hub 로그인이 필요한데, 가입하고 로그인을 합니다.





워드프레스의 경우 MySQL DB Container와 Wordpress Container를 설치하면 됩니다.




우선 Share설정을 해줍니다. MySQL 저장소를 특정 디렉토리에 지정하기 위함입니다.


Setting를 들어갑니다.


저는 MYSQL 저장소를 D:\Docker\mysql 에 저장할 것이기때문에 D: 를 Share 하고 Apply했습니다.












이제 도커 트레이 아이콘에서 Kitematic을 클릭합니다.

그럼 Kitematic을 다운로드 받을텐데요. 적당한 곳에 압축을 풀고 실행해줍니다.



이후, C:\Program Files\Docker\Kitematic 폴더로 위치시킵니다. 








Kitematic을 실행합니다.







먼저 mysql Container설치가 필요합니다. mysql을 검색하시고 공식 컨테너이너에 Create버튼을 눌러주세요.







설치 후, MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD, MYSQL_RANDOM_ROOT_PASSSWORD 중 하나 설정이 필요하다고 하는데요. 설정해주러 갑니다. 오른쪽 위에 Setting 를 클릭합니다.








환경변수에 MYSQL_ROOT_PASSWORD  항목을 입력하고, 암호를 입력합니다. 저는 wordpress로 했습니다.


그리고 반드시 SAVE버튼을 눌러주어 저장해야합니다.











Hostname / Ports 탭에서 포트 설정도 해줍니다. 기본적으로 임의로 포트로 구성되는데 mysql의 기본포트인 3306 포트로 지정하고 SAVE버튼을 꼭 눌러줍니다.












Volume도 지정합니다. 저의 경우 D:\Docker\mysql 폴더를 지정했기 때문에 \host_mnt\d\Docker\mysql로 연결되었습니다. 이렇게하면 MySQL의 DB데이터들이 이 디렉토리에 저장 됩니다.












이제 다시 좌 상단에 + NEW 버튼을 눌러 새로운 컨테너를 검색해서 설치합니다.  wordpress를 검색해서 공식 wordpress 컨테이너에 CREATE버튼을 클릭합니다.









설치 후, 역시 Settings 탭에 들어가 외부포트를 80으로 맞추어줍니다. 혹시 이미 80포트를 사용하고 있다면, 기존 서비스를 꺼준다던가, 다른포트를 사용해야 합니다.






앞서 설치한 mysql container와 연결시켜주기 위해 Network탭에서 Link 항목에 mysql을 위 그림과 같이 설정해줍니다. 주의할 점은 위처럼 입력 후, 반드시 + 버튼을 클릭해주셔야 합니다.









이제 끝났습니다. 


localhost로 접속해보시면 아래와 같이 워드프레스 화면이 뜨는 것을 볼 수 있습니다!









ps) 워드프레스 컨테이너의  Volumes 디렉토리를 지정하여, PC 내부 디렉토리로 연결할 수 있습니다...

처음 대하는 환경이라 스칼라 설치에, 스파크, maven설치에 winutils까지 이것 저것 삽질을 많이 했었는데, 


쉘에서 실행해본다던가 다양한 방법이 있지만..

단지 스파크의 API를  스칼라 언어로 테스트해볼 것이라면 아래 설치만으로도 충분합니다.

뭐한건지...;;;




물론, 실제 운영 하려면 하둡설치에 다른 여러가지들이 필요 하겠지요.


간단하게 라인 수를 재는 프로그램을 돌려보기 위한 환경입니다.

스파크의 경우 파이썬, 자바, 스칼라 언어로 작동이 가능합니다.(공식문서에도 세가지 언어로 딱 가이드하더군요.) 

스칼라 기준으로합니다.. (윈도우7/10 환경입니다.)


1. 자바를 설치합니다. 자바 설치후 환경변수로 JAVA_HOME 을 자바 설치 경로로 셋팅해줍니다. 설치되어있다면 패스~


설치 : http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html



171버전을 설치했네요.


* 참고로 관리자 권한으로 CMD 입력창을 실행하고

"C:\Windows\system32\rundll32.exe" sysdm.cpl,EditEnvironmentVariables 를 입력하면 바로 환경변수 수정이 가능합니다.








2. IntelliJ를 설치합니다. 어차피 메모장에서 개발할 것은 아니기 때문에, 바로 IDE를 설치합니다. 설치시 scala 플러그인을 선택하면 필요한 것을 같이 받을 수 있습니다.

IntelliJ 설치 경로 : https://www.jetbrains.com/idea/download/#section=windows

위 링크에서 커뮤니티 버전을 선택하시면 무료로 테스트 사용이 가능합니다. (상용개발시에는 구매를 해야겠지요.)







64비트 런처 숏컷은 하나 만들었습니다 .x86은 JRE는 필요없어서 체크안했구요.




설치시 아래 화면은 기본으로 넘어가셔도 됩니다. 보시고 필요한 것 있으면 더 다운로드 받으시면 됩니다.







아래 화면에서는 플러그인에  Scala를 꼭 Install해주세요.~






런처화면이 나오고












Create New Porject 를 해서






Scala에 SBT를 선택합니다. SBT Simple Build Tool 이라해서, 스칼라 빌드 환경입니다.





기존에 JDK를 설치했기 때문에 설치한 경로로  JDK환경을 설정합니다.





위 화면이 중요한데요. 스파크 2.3.0 버전은 Scala 2.11.12 버전으로 해야 됩니다. 2.12.x로 하니 잘 안되더군요.

이것 때문에 또 삽질.

http://spark.apache.org/docs/latest/quick-start.html <- 여기는 2.11.8로 설명이..








프로젝트 뷰 창이 나오지 않으면 ALT+1 을 누르시거나 View 메뉴에 Tool Windows -> Project를 차례로 선택합니다.


그리고 build.sbt 파일을 위와 같이 수정합니다.


name := "lineCount" version := "0.1" scalaVersion := "2.11.12" libraryDependencies += "org.apache.spark" %% "spark-core" % "2.3.0"










스칼라 파일을 소스에 하나 추가합니다. (sbt파일이 한번 Sync가 되어야 Scala class파일을 추가할 수 있는걸로 보여집니다?)


Object를 추가할것으므로 Kind에서 Object를 선택하세요. 이름은 LineCount로 합니다.




소스파일 내용은 아래와 같습니다.



import org.apache.spark.{SparkConf, SparkContext}

object LineCount {

  def main(args: Array[String]): Unit = {

    val logFile = "c:\\download\\test.txt"  //경로는 바꿀 수 있습니다.


    val conf = new SparkConf().setAppName("Simple Application").setMaster("local")


    val sc = new SparkContext(conf)


    val logData = sc.textFile(logFile, 2).cache()


    val lineCount = logData.count()


    println("라인수==>"+lineCount)


    sc.stop()


  }

}


텍스파일은 하나 아무거나 준비합니다. 만들기 번거로우시면 아래링크를 받으세요.
Run 할때 실행 환경이 없다면 아래와 같이 하나 추가해주세요.
MainClass는 LineCount, Use classpath of module은 프로젝트내에 linecount 입니다.






위와 같이 라인 수가 잘 나오는 것을 확인 할 수 있습니다




추가 링크:

스팍 개발 환경 설정(영어) : http://www.itversity.com/2018/04/19/setup-development-environment-big-data-hadoop-and-spark/

스팍 공식 문서(영어) http://spark.apache.org/docs/latest/index.html

스칼라 언어 배우기(한글) : https://twitter.github.io/scala_school/ko/index.html



한동안 떠들석하게 했던 그 업데이트입니다.

스펙터의 경우엔  Bios업데이트로 해결을, 멜트다운 문제는 윈도우 업데이트로 해결이 가능합니다.


메인PC의 경우 업그레이드 한지 얼마 안되어서 그런지, bios업데이트가 있었지만, 구형 PC에는 bios가 아직

나오지 않았더군요. 둘다 기가바이트꺼 인데 ㅠ.ㅠ


https://www.ashampoo.com/en/usd/pin/1304/security-software/spectre-meltdown-cpu-checker


위 링크에서 제공해주는 툴로 쉽게 확인이 가능합니다.


메인PC. 모두 업데이트해서 잘 됬다고 나오고요.






* 기가바이트 메인보드의 경우, 최신 바이오스 파일을 다운로드 받으신 후, USB저장매체등에 복사를 해두고,

재부팅 한 후, F8키를 누르면 바이오스 업데이모드로 진입합니다.

스펙터 해결을 위한 바이오스 업데이트.


서브컴.. 


윈도우7의 경우 업데이트시에는 아래와 같이 나타날 수 있습니다.

Windows Management Framework version5가 필요하다고 하여 업데이트를 해줘야 할 수도 있습니다.






해당하는 윈도우 버전을 체크하여 다운로드 받은 후 설치하면 그 이후에야 멜트다운 관련 업데이트를 진행할 수 있습니다.




이후 윈도우즈에 업데이트 항목에서 보안업데이트를 진행합니다.






바이오스 업데이트가 지원되지 않아 여전히 스펙터에 취약한 서브 컴 ㅠ.ㅠ

코드를 예쁘게 보이게 하기위해 Syntax highlighting을 붙혔습니다.


적용하는 방법은 아래 링크를 참고하시면 됩니다.

http://mclass.tistory.com/54



그런데, 어떤 소스코드를 붙히니까 자꾸 </t>가 붙더군요.

첨에 왜 그러지..했는지 확인해보니. HTML모드를 하고서는 소스코드 내용에 '<' '>' 문자가 문제였더군요.

HTML모드에서는 < > 문자는 태그로 인식되어서 그랬던 것이었습니다.


해서 강제로 < 는 &lt;   > 는 &gt; 로 바꾸고 등록했습니다.

&는 &amp; , 빈공백은 &nbsp;로 해줘야겠지만 그러한 문자는 없어서 패스했습니다.



즉 태그 내용 등록시 아래처럼 말이죠.



<pre class="brush: csharp">

using System.ComponentModel;


namespace RxTestWinForm

{

    public static class ControlExtension

    {

        /// &lt;summary&gt;

        /// T Type의 Delegate  선언

        /// &lt;/summary&gt;

        /// &lt;typeparam name="T"&gt;T타입&lt;/typeparam&gt;

        /// &lt;param name="obj"&gt;Invoke 할 컨트롤 &lt;/param&gt;

public delegate void RunOnUIThreadDelegate&lt;T&gt;(T obj) where T : ISynchronizeInvoke;

        /// &lt;summary&gt;

        /// ISynchoronizeInvoke 인터페이스 구현체 대한 RunOnUIThread확장 메소드

        /// &lt;/summary&gt;

        /// &lt;typeparam name="T"&gt;T타입, 캐스팅을 피하기 위해 사용&lt;/typeparam&gt;

        /// &lt;param name="obj"&gt;메소드 확장할 컨트롤&lt;/param&gt;

        /// &lt;param name="action"&gt;수행할 Action&lt;/param&gt;

        public static void RunOnUIThread&lt;T&gt;(this T obj, RunOnUIThreadDelegate&lt;T&gt; action)

            where T : ISynchronizeInvoke

        {

            if (obj.InvokeRequired)

            {

                obj.Invoke(action, new object[] { obj });

            }

            else

            {

                action(obj);

            }

        }

    }

}

</pre>





그런데 이렇게 안하고, 그냥, 아래 코드로 먼저 HTML 에서 입력하고 난 뒤,


<pre class="brush: csharp">

</pre>


에디트 모드로 돌아가면 회색 사각형이 보이는데, 거기서 그냥 코드 입력하면, 굳이 위에 처럼 귀찮게 문자 바꾸지 않고도

잘 등록이 되더군요.



위 화면에서 바로 코드를 입력하면 됩니다.

+ Recent posts