s3fs 연결

IT/서버 2018. 11. 23. 00:12
서버에서 좀더 쉽게 S3에 파일을 업로드 하기 위해서 S3FS를 사용하자


  1. 설치 방법
  • On Debian 9 and Ubuntu 16.04 or newer:
    sudo apt-get install s3fs
  • On SUSE 12 or newer and openSUSE 42.1 or newer:
    sudo zypper in s3fs
  • On Fedora 27 and newer:
    sudo yum install s3fs-fuse
  • On RHEL/CentOS 7 and newer through EPEL repositories:
    sudo yum install epel-release
    sudo yum install s3fs-fuse
  • On macOS, install via Homebrew:
    $ brew cask install osxfuse
    $ brew install s3fs


  1. 의존성 패키지 설치
  2. sudo yum install automake fuse fuse-devel gcc-c++ git libcurl-devel libxml2-devel make openssl-devel

  1. s3fs 설치
    git clone https://github.com/s3fs-fuse/s3fs-fuse.git
    cd s3fs-fuse
    ./autogen.sh
    ./configure --prefix=/usr/local/s3fs
    make
    sudo make install
    ln -s /usr/local/s3fs/bin/* /usr/local/bin


  1. s3 엑세스키 설정
     - 기본적으로 mount의 경우 {사용자홈}/.passwd-s3fs 에서 파일을 로딩하고
    - fstab에서는 /etc/passwd-s3fs 에서 엑세스키에 대한 정보를 로딩한다.

    echo {엑세스키}:{시크릿키} > /etc/passwd-s3fs
    chmod 600 /etc/passwd-s3fs

  1. s3 마운트
    mkdir /data/s3fs
    s3fs {버킷이름} /data/s3fs -o passwd_file=/etc/passwd-s3fs
  2. fstab에 등록
    {버킷이름} /data/s3fs fuse.s3fs _netdev,allow_other 0 0

    <공개파일로 저장>
    {버킷이름} /data/s3fs fuse.s3fs  defaults,noatime,allow_other,uid=500,gid=48,use_cache=/tmp,default_acl=public-read,url=http://s3.amazonaws.com  0 0


해당권한이 퍼미션에 마스크로 들어간다.
777 -> 000  권한없음.

ISSUE
  • use_cache옵션을 사용했더니 어마어마하게 많은양의 캐쉬 데이터가 누적되어서 용량부족 현상이 발생했었다. 

  • mount에서 에러가 발생하지 않았는데 실제로 마운트가 되지 않은 현상이 발생하였다.
    s3fs에서 문제가 발생하였을 경우 로그를 확인해보면 그 원인을 좀더 쉽게 확인할수가 있다. 
    "-o dbglevel=info -f -o curldbg"

  • 버킷 이름이 Dot(.)가 있어서 마운트가 제대로 되지 않았다. -o use_path_request_style으로 해결하였다.
-o use_path_request_style 를 사용하면 유효하지 않은 옵션을 사용하지 않고 버킷 이름에 점들이있는 버킷에 액세스 할 수 있어야합니다.이 옵션 -o no_check_certificate은 유효성 검사 오류를 무시하므로 권장되지 않습니다.
  • 인증서 관련해서 에러가 발생하였다. 기본값이 https로 인증서가 없는 서버에서 접근하려면 url을 설정해 줘야 한다.

url (기본값 = " https://s3.amazonaws.com ")

  • Amazon S3에 액세스하는 데 사용할 URL을 설정합니다. HTTP를 사용하려면 "url = http://s3.amazonaws.com "을 설정할 수 있습니다 . 
    https를 사용하지 않는 경우 url 옵션을 사용하여 URL을 지정하십시오.


/etc/fstab에 설정한 다음 재부팅 하지 말고.

mount -a 로 설정값을 적용해보자. 만약에 fstab에 오타등 문제가 있을경우 부팅이 되지 않으니 조심해야 한다.



마운트 해제

$sudo fusermount -u /mnt/s3
sudo umount /mnt/s3fs







'IT > 서버' 카테고리의 다른 글

[SVN Server] E170001 : Authorization failed  (0) 2018.03.05
[MySQL] TimeStamp, DateTime 필드  (0) 2017.08.24
블로그 이미지

날기억해

Android / IOS / PHP / System Engineer / Service Architecture/ MongoDB / AWS / Mysql / Linux / Python / C++ / Vue.js / node.js / Java / Iot / BLE / Firebase / Bigdata Architecture / AD Server / SDK / Epub /

,

새로 구입한 NAS 장비에 SVN 서버를 설치하고


기존에 컴퓨터로 돌렸던 SVN Repository에서 폴더채로 Copy해서 연결했더니 정상적으로 CheckOut이동작하였다.


그래서 설정이 완료 된줄 알았는데,막상 사용하려고 하니 Commit할때 인증 에러가 발생하는것이였다.


다른 모든 권한들을 확인해봤으나 읽기만 가능한 옵션은 어디에도 설정되어 있지 않았다.



계속 삽질을 하던 결과 결국에는 svnserve.conf 파일이 읽기전용이라 그렇다는 글을 보았다. 


권한을 바꾸니 문제없이 해결이 되었다.


The E170001 error also appears for repository updates (commits) if svnserve has been invoked with the -R (--read-only) option.


'IT > 서버' 카테고리의 다른 글

s3fs 연결  (0) 2018.11.23
[MySQL] TimeStamp, DateTime 필드  (0) 2017.08.24
블로그 이미지

날기억해

Android / IOS / PHP / System Engineer / Service Architecture/ MongoDB / AWS / Mysql / Linux / Python / C++ / Vue.js / node.js / Java / Iot / BLE / Firebase / Bigdata Architecture / AD Server / SDK / Epub /

,

오랜만에 포스팅을 하게 되었다.


오늘 DB 쿼리를 짜게 되던중에 시간별로 되어 있는 리포트의 3시간 또는 12시간 등에 따라서 GroupBy를 해야 하는 상황이 발생하였다.



현재 Time 필드의 타입은 DateTime으로 되어 있었다.


따라서 쿼리로 Group By를 하기 위해서 리서치를 하던중에 다음과 같은 해법을 찾았다.



SELECT FROM_UNIXTIME(FLOOR(UNIX_TIMESTAMP('2017-08-11 11:00:00') / 10800) * 10800);


위의 쿼리를 간단하게 설명하자면,


1. (UNIX_TIMESTAMP('2017-08-11 11:00:00'))

현재 텍스트의 시간을 UNIX_TIMESTAMP로 변환한다.


2.  나누기 10800

3시간(60*60*3)으로 나눠서 분,초,밀리세컨드 등을 날려버린다. 


3. FLOOR 

나누기 전의 값을 찍어 보면 알겠지만 소수점 자리수등이 포함되어 있다. 


4. 곱하기 10800

원래 시간을 구하기 위해 다시 구하고자 하는 시간의 값을 곱해준다


EX) 68초의 시간을 10초단위로 묶는 다고 한다면,  68 / 10 = 6  그리고 다시 10을 곱해서 60을 만들어주는건다.




그런데 이때 문제가 발생했다. 


DB로 부터 읽어온 날짜를 계산하고 나면 결과날짜의 값이 +09:00 가 되어 있는것이다. 


이때 09:00 라는 숫자가 타임존을 의미하는것 같아서 이것저것 테스트 해보았다.




시간단위로 구할때는 문제를 발견하지 못하였다.


SELECT FROM_UNIXTIME(FLOOR(UNIX_TIMESTAMP('2017-08-11 11:00:00') / 3600) * 3600);



그런데 일자가 바뀌니까 같은 문제가 발생하는것이였다.


SELECT '2017-08-11 11:00:00', FROM_UNIXTIME(FLOOR(UNIX_TIMESTAMP('2017-08-11 11:00:00') / 86400) * 86400);



그래서 결론적으로 생각한것은


UNIX_TIMESTAMP로 변환한 값이 타임존에 영향을 받지 않고 그냥 들어가는데, 보일때만 타임존을 적용해서 보이는것 같았다.



무슨 말이냐면, 

UNIX_TIMESTAMP("2017-08-11 11:00:00") 을 하면 내가 원했던 타임의 값은 1502416800 인데,



실제로는 로컬 타임 기준이 아닌 GMT타임 기준으로 변환되어서 1502449200로 변환되는것같았다. 그래서 


SELECT FLOOR(UNIX_TIMESTAMP('2017-08-11 11:00:00'));


직접 타임스탬프를 찍어 보았으나 정상적으로 작동 하였다. 



 SELECT FLOOR(UNIX_TIMESTAMP('2017-08-11 11:00:00') / 86400) * 86400;


그래서 나눈다음에 버림을 하고 다시 곱하였더니 바로 문제의 +09:00시간이 추가되는것이다.



1502416800 / 86400 =  17389.0833


소수점 자리수가 버림 되면서 해당 문제가 발생한것으로 결론을 내렸다.


그래서 결론은 


SELECT '2017-08-11 11:00:00', FROM_UNIXTIME(FLOOR((UNIX_TIMESTAMP('2017-08-11 11:00:00')  + 32400) / 86400) * 86400 - 32400);


타임존을 더해주고 빼주었다.


사실 CONVERT_TZ 함수를 쓰는게 더 좋을것 같으나.. 그냥 9시간을 더해주고 빼주었따. 


도움이 되시는 분들이 있기를

'IT > 서버' 카테고리의 다른 글

s3fs 연결  (0) 2018.11.23
[SVN Server] E170001 : Authorization failed  (0) 2018.03.05
블로그 이미지

날기억해

Android / IOS / PHP / System Engineer / Service Architecture/ MongoDB / AWS / Mysql / Linux / Python / C++ / Vue.js / node.js / Java / Iot / BLE / Firebase / Bigdata Architecture / AD Server / SDK / Epub /

,


젠킨스 서버를 이전하였는데, 예전에 발생했던 로그 용량이 증가하는 문제가 발생했다.


이유는 정확히 모르겠다.


 예전에 자료를 찾아서 수정했었는데 해당 URL을 찾을수가 없었다.




젠킨스 로그가 어마어마하게 용량을 먹기 시작했다


/var/log/jenklins.log




그래서 기존 서버에 있던 설정을 보던중에 예전에 추가했던 설정을 찾았따.


/etc/sysconfig/jenkins

파일에다가


JENKINS_JAVA_OPTIONS = 


-Djava.awt.headless=true -Dhudson.DNSMultiCast.disabled=true -Dhudson.udp=-1


이것을 추가했다.



문제가 발생한 이유를 몰라서 찝찝하지만. 해결했다..


나중에 찾아봐야겠다. 

블로그 이미지

날기억해

Android / IOS / PHP / System Engineer / Service Architecture/ MongoDB / AWS / Mysql / Linux / Python / C++ / Vue.js / node.js / Java / Iot / BLE / Firebase / Bigdata Architecture / AD Server / SDK / Epub /

,
1. Composer 다운로드

https://getcomposer.org/doc/00-intro.md#installation-windows


2. php.exe가 있는 경로를 설정해준다.


3. 설치완료 끝!



oci.dll 을 찾지 못하여 에러가 발생했다.


해당 문제는 php.ini에서 oci모듈을 로딩하지 않도록 설정하면 된다.



또한 openssl모듈 관련해서 중복되서 설정되어 있다고 설치가 되지 않았다.

이 또한 지워주니 설치 완료 


끝!


'IT > PHP' 카테고리의 다른 글

이클립스에서 php, javascript작업시 멈춤 현상 해결 방법  (0) 2015.04.10
Codeigniter index.php 지우기  (0) 2014.04.12
블로그 이미지

날기억해

Android / IOS / PHP / System Engineer / Service Architecture/ MongoDB / AWS / Mysql / Linux / Python / C++ / Vue.js / node.js / Java / Iot / BLE / Firebase / Bigdata Architecture / AD Server / SDK / Epub /

,


라이브러리를 배포했었는데 갑자기 AndroidStudio에서 해당 라이브러리를 Import한 후에 빌드가 안된다는 문의가 들어왔다.


Error:Execution failed for task ':{project_name}:transformClassesWithMultidexlistForDebug'.
> java.io.IOException: Can't read [{project_name}\build\intermediates\transforms\jarMerging\debug\jars\1\1f\combined.jar] (Can't process class [{library_name}/b.class] (Unknown verification type [255] in stack map frame))



이전에 잘 동작했었는데 갑자기 이런 문제가 발생해서 당황했다.


Google 검색을 해보니 Proguard의 소스를 변경해서 다시 컴파일 하라는둥. 

MultiDex설정을 바꾸라는둥 여러가지 말들이 많이 있었다.



 우선 배포했던 JAR를 프로가드 돌리지 않고 Android Studio에서 테스트 해보니 정상적으로 빌드가 되었다.


 그래서 프로가드 문제가 확실하다고 판단하여 옵션을 살펴봤는데 크게 바꿀만한 내용이 없는것이였다.


결론은 프로가드 버전이 낮아서 SDK를 난독화 할때 뭔가 잘못 동작을 했던것 같다.


이제서야 개발용 컴퓨터가 기존이랑 바뀌었다는것을 인지하게 되었다.





프로가드 사이트 (버전 확인) : http://proguard.sourceforge.net


{android_sdk}/tools/proguard  를 최신 벋전으로 변경해서 다시 난독화를 진행하니 빌드가 잘되었다.



블로그 이미지

날기억해

Android / IOS / PHP / System Engineer / Service Architecture/ MongoDB / AWS / Mysql / Linux / Python / C++ / Vue.js / node.js / Java / Iot / BLE / Firebase / Bigdata Architecture / AD Server / SDK / Epub /

,
후.. 한참을 헤맸다.

예전에 작업 했언던 적이 있었는데 따로 정리를 안해놔서 삽질 엄청 했다.


우선 Android Studio에서는 모듈 난독화를 쉽게 설정이 가능했는데 어쩌다보니 이클립스에서 해야 하는 일이 생겼다.


Library Project는 빌드시에 동작하는 proguard-project.txt 가 먹히질 않는다.


그래서 따로 jar파일을 만든 후에 proguard를 따로 돌려줘야 한다.


1. Export Jar

2. {sdk_home}\tools\proguard\bin\proguardgui.bat

3. 저장했던 configure가 있다면 로딩해오면 좋다.


일단 대충 항목을 설명해야 겠다.

내가 헤맸던 부분은 바로 이 부분이였다.



-injars : 난독화할 jar 경로

-outjars : 결과물 경로

-libraryjars : 프로젝트에서 참조하고 있는 jar 파일

ex)

      -libraryjars 'C:\Android\sdk\platforms\android-23\android.jar'

-libraryjars 'C:\workspace\myproject\libs\android-support-v4.jar'

-libraryjars 'C:\workspace\myproject\libs\google-play-services.jar'

-libraryjars 'C:\Android\sdk\platforms\android-23\optional\org.apache.http.legacy.jar'




기존 proguard-project.txt 상단에 저 옵션을 추가한후 

load configuration을 하면 쉽게 설정이 가능하다.

추가로 {sdk_home}\tools\proguard\examples\android.pro 를 보면 프로가드에 대한 옵션을 볼수 있다. 






추가로 javascript가 동작하지 않았다.




I copy my answer from this topic for you: http://stackoverflow.com/a/19994873/1735499

And, if you are using Proguard, remember to add this

-keepclassmembers class * {
    @android.webkit.JavascriptInterface <methods>;
}

-keepattributes JavascriptInterface
-keep public class com.mypackage.MyClass$MyJavaScriptInterface
-keep public class * implements com.mypackage.MyClass$MyJavaScriptInterface
-keepclassmembers class com.mypackage.MyClass$MyJavaScriptInterface { 
    <methods>; 
}

If it's still not OK, add this

-keepattributes *Annotation*

Note: your MyJavaScriptInterface must be Public class

Ref#: Android Proguard Javascript Interface Fail

Br,

Frank



블로그 이미지

날기억해

Android / IOS / PHP / System Engineer / Service Architecture/ MongoDB / AWS / Mysql / Linux / Python / C++ / Vue.js / node.js / Java / Iot / BLE / Firebase / Bigdata Architecture / AD Server / SDK / Epub /

,

Jenkins + ec2-plugin + spotinstance + Elastic IP

 

1.     ec2 plugin 설정  

-       Jenkins> Jenkins 관리> 시스템 설정

-       Cloud에서 Amazon EC2선택


다음을 각각 입력

·         Access Key ID

·         Secret Access Key

·         Region

·         EC2 Key Pair 's Private Key

·         AMIs

o    Description

o    AMI ID : 작성한 AMI ID 설정

o    Instance Type

o    Availability Zone

o    Use Spot Instance 체크

o    Spot Max Bid Price

o    Choose Bid Type

o    Security group names : AWS  Security Group name 쉼표로 구분

o    Remote user : ec2-user (적절히 변경)

o    AMI Type : unix ( Amazon Linux  예이므로)

o    Root command prefix : sudo (필요한 경우)

o    Labels : Slave Node 관리하는 단위이므로 적절히 입력 공백으로 구분하여 여러 지정 가능

o    용도 : 슬레이브를 최대로 이용하기 (필요에 따라 변경)

o    Idle termination time : terminate (또는 stop) 때까지의 시간 ()

o    Init script : 젠킨스 에이전트를 설치하기 전에 해야 하는 단계

·         고급 설정

o    Number of Executors : 동시 빌드

o    Subnet ID for VPC : VPC  사용하면 Subnet ID 지정하는

o    Tags : 이것을 생략하면 움직이지 않습니다. EC2 용의 Name 태그를 설정합시다

o    Instance Cap : 최대 빌드

o    Associate Public IP : Global IP 자동으로 흔들어 원하는 경우 설정합시다

 

 

init scriptElastic IP를 바인딩하는 코드를 작성한다.

-       'aws ec2 associate-address --instance-id ' + instanceId + ' --allocation-id ' + elasticip

 

 

 

Multi-configuration project 생성하여서 slaves위에서 입력한 Labels 선택해준다.

Exceute Shell 부분에 에이전트가 설치되고 난 후에 해야하는 작업을 실행한다.

 


사용법을 몰라서 한참을 고생하여 혹시 필요하신 분들이 있을지 몰라 공유합니다.

 

블로그 이미지

날기억해

Android / IOS / PHP / System Engineer / Service Architecture/ MongoDB / AWS / Mysql / Linux / Python / C++ / Vue.js / node.js / Java / Iot / BLE / Firebase / Bigdata Architecture / AD Server / SDK / Epub /

,

레드마인의 최신 버전을 설치하기 위해서는 ruby 2.1.5 이상의 버전이 필요한데 CentOs 6에서 yum으로는 ruby 최신 버전이 설치되지 않는다.

nginx와 apache를 함께 설치하는 방법들도 많이 소개되어 있지만, 나는 기존 서버(nginx)에 redmine을 돌릴것이기 때문에 웹서버를 새로 띄우지 않고 proxy_pass를 이용해서 redmine을 실행하도록 할것이다.



1.epel 설치

wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm

sudo rpm -Uvh epel-release-*.rpm



2. 개발툴 설치

yum groupinstall "Development Tools"


3.  Ruby와 Passenger 빌드에 필요한 헤더파일

yum install openssl-devel readline-devel zlib-devel curl-devel libyaml-devel


4. ImageMagick과 헤더파일

yum install ImageMagick ImageMagick-devel


5. ruby 2.3.0 설치

https://www.ruby-lang.org/ko/downloads/

wget https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.0.tar.gz

  1. tar zxvf ruby-2.3.0.tar.gz
  2. cd ruby-2.3.0
  3. ./configure --disable-install-doc
  4. make
  5. make install
  6. make clean


6. bundler 설치

gem install bundler --no-rdoc --no-ri


7. Redmine용 데이터베이스 및 유저생성

create database redmine default character set utf8;

CREATE USER 'redmine'@'localhost' IDENTIFIED BY 'password';

GRANT ALL PRIVILEGES ON redmine.* TO 'redmine'@'localhost';

flush privileges;



8. 레드마인(3.2.0) 다운로드

http://www.redmine.org/projects/redmine/wiki/Download


wget http://www.redmine.org/releases/redmine-3.2.0.tar.gz

1. tar zxvf redmine-3.2.0.tar.gz

2. mv ./redmine-3.2.0 /usr/local/redmine/

3. cd /usr/local/redmine



9. database 설정 변경

cp config/database.yml.example config/database.yml

vim config/database.yml 



10. 메일 접속 설정

cp config/configuration.yml.example config/configuration.yml

vim config/configuration.yml

맨 아래 production 밑에다가 삽입 google계정이므로 구글 설정을 넣었다.

    email_delivery:
      delivery_method: :smtp
      smtp_settings:
        enable_starttls_auto: true
        address: "smtp.gmail.com"
        port: 587
        domain: "smtp.gmail.com" # 'your.domain.com' for GoogleApps
        authentication: :plain
        user_name: ""
        password: ""


11. Gem Package 설치
bundle install --without development test postgresql sqlite


12. 테이블 생성 및 초기 데이터 입력
#rake generate_secret_token
#RAILS_ENV=production rake db:migrate
#RAILS_ENV=production rake redmine:load_default_data
한국어는 ko로 입력한다.


DB 생성 중에 

redmine Can't connect to local MySQL server through socket '/tmp/mysql.sock'

라는 에러가 발생하였다.

mysql을 기본 폴더가 아닌 다른곳에 설치하였는데 redmine이 /tmp/mysql.sock을 바라보고 있어서 생긴 문제였다. 

그래서 기존에 설치되어 있던 폴더에 있던 mysql.sock의 심볼릭 링크를 /tmp/mysql.sock에 만들어니 해결 되었다.



13. 서버 실행 

bundle exec rails server webrick -e production


14. nginx 설정 추가

server {
        listen 80;
        server_name redmine.vmhost.com;
        access_log /home/httpd/logs/redmine_access.log main;
        error_log /home/httpd/logs/redmine_error.log;

        location / {
                proxy_pass http://localhost:3000;
        }
}







블로그 이미지

날기억해

Android / IOS / PHP / System Engineer / Service Architecture/ MongoDB / AWS / Mysql / Linux / Python / C++ / Vue.js / node.js / Java / Iot / BLE / Firebase / Bigdata Architecture / AD Server / SDK / Epub /

,

SVN에 권한을 모두 줬는데도


업데이트는 되는데 Commit이 안되는 경우가 있어서 헤매다 보니..


SVN레파지토리에 설정된 폴더가 대문자였으나. 소문자로 접근해서 사용하니 해당 문제가 발생하였다..



블로그 이미지

날기억해

Android / IOS / PHP / System Engineer / Service Architecture/ MongoDB / AWS / Mysql / Linux / Python / C++ / Vue.js / node.js / Java / Iot / BLE / Firebase / Bigdata Architecture / AD Server / SDK / Epub /

,