[컴] linux 와 windows 10 에서 파일 공유 - cifs , samba

CIFS file system / SAMBA / 쌈바 / 파일공유



windows 에서 '공유'한 폴더를 linux 에 mount 하기


Windows folder 공유설정

여기에 있는대로 윈도우즈 폴더를 공유하자

참고로 Windows 10 에서는 SMBv1 이 기본적으로 설치되지 않는다.

linux 에서 SAMBA mount

Linux : Mint Linux 18.3 64bit

위에서 이야기 한 것처럼 windows 10 에서 기본 SMBv1 이 disable 이기 때문에, smbclient 를 사용할 때도 SMB version 을 적어줘야 한다. 아래처럼 하면 된다.
smbclient -L 192.168.0.1 -U user_name -m SMB2


$ sudo mount -t cifs //<server_ip>/<share> /mnt/<mountpoint> -o username=user_name,vers=2.0
mount point 의 owner 를 변경하려면 아래처럼 해주면 된다.
$ sudo mount -t cifs //<server_ip>/<share> /mnt/<mountpoint> -o username=user_name,vers=2.0,uid=user_name,gid=user_name


unmount

unmount 는 아래처럼 하면 된다.(참고로, 명령어는 umount 이다.)
$ sudo umount -t cifs /mnt/<mountpoint>


error

만약 아래와 같은 error 가 보인다면 password 를 추가해주자.
mount: //10.0.2.2/share is write-protected, mounting read-only
mount: cannot mount //10.0.2.2/share read-only

$ sudo mount -t cifs //<server_ip>/<share> /mnt/<mountpoint> -o username=user_name,password=mypassword,vers=2.0,uid=user_name,gid=user_name


vmbox 의 linux 에서 공유를 하고, 이것을 windows 에서 접근하는 법

이때 vmbox 의 네트워크 설정을 주의하자.(VirtualBox Networking: an overview - Notes to self)

See Also


References

  1. How to Share Files Between Windows and Linux



[컴] 윈도우즈 WSL에서 Linux 설치하기




WSL(Windows Subsystem for Linux) 과 Linux 설치하기

admin 권한으로 명령프롬프트 를 하나 열고, powershell 로 들어가자. 그리고 powershell 에서 아래 명령어를 실행하자. 그리고 windows 를 restart 하자.

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

여기서는 Windows build 16215 이후 버전과 관련해서 설명한다.
  • 버전 정보 확인 : 세팅(설정) > 정보 > OS 빌드

설치

Microsoft Store 를 실행하자. store 를 통해 설치할 수 있다. 참고로 용량도 많지 않은데 엄청 느리다.(약 200MB 정도)

현재 지원하는 windows distros 는 3개 정도이다. 아래 3개중 하나를 택하면 download 가 시작된다.
  • ubuntu
  • sles-12
  • opensuse-42

다운로드가 완료되면 설치를 눌러주자. 설치가 끝나면 아래처럼 계정을 하나 만들게 된다. 계정이 만들어지면 자도 login 이 된 상태로 prompt 를 하나 보여준다.

설치파일 path

linux 는 아래 경로에 있다.

  • 실행파일: c:\Program Files\WindowsApps\CanonicalGroupLimited.UbuntuonWindows_1604.2017.922.0_x64__79rhkp1fndgsc\ubuntu.exe
  • %appdata%\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\
  • root path : %appdata%\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs
참고로 '실행파일' 은 보안(security) 설정을 해서, 실행권한을 넣어줘야 exe 파일을 직접 실행할 수 있다.


root 의 password 변경하기


sudo passwd

repository 변경


해외보다 국내 서버를 쓰는 것이 빠르다고 해서 일단 적어놓는다.
sudo vi /etc/apt/sources.list
  • http://ftp.neowiz.com/ubuntu/  (참고)

MariaDB - Setting up MariaDB Repositories - MariaDB : 여기서 command line 에서 repository 를 추가하는 법을 알려준다.


python-pip3 설치하기

  1. Installing Python 3.6.2 on WSL – smallsec
sudo add-apt-repository ppa:jonathonf/python-3.6
위처럼 repository 를 추가해주자. 그래야 python-pip3 package 를 설치할 수 있다.


Limitation 한계


모든 Linux app 들을 WSL 에서 실행할 수 없다.

WSL은 windows 에서 bash 를 실행하려고 하거나 core linux command-line tools 를 실행하려고 하는 유저를 위한 것이다.

그래서 GUI desktop 과 applications 들은 지원하지 않는다.

많은 server application 을 실행할 수 있지만, MS 에서는 WSL에서 server 를 돌리는 것을 추천하지 않는다.

Can I run ALL Linux apps in WSL?
No! WSL is a tool aimed at enabling users who need them to run Bash and core Linux command-line tools on Windows.
WSL does not aim to support GUI desktops or applications (e.g. Gnome, KDE, etc.)
Also, even though you will be able to run many popular server applications (e.g. Redis), we do not recommend WSL for server scenarios – Microsoft offers a variety of solutions for running production Ubuntu workloads in Azure, Hyper-V, and Docker. 


기타

  • windows 의 path 는 /mnt/ 에 drive 가 mount 되어 있다. /mnt/c 가 c:\ 이다.



[컴][웹] bootstrap .scss 에서 .css 만들기

부트스트랩/붓스트랩/ 부트스트랩 .scss 에서 .css 로 컴파일 / 빌드 /


bootstrap .scss 에서 .css 만들기

설치

아래 명령어들을 실행하자.

c:\> npm intall bootstrap
c:\> npm intall node-sass
c:\> mkdir scss
c:\> copy .\node_modules\bootstrap\scss\bootstrap.scss .\scss\app.scss
c:\> copy .\node_modules\bootstrap\scss\_variables.scss .\scss\_customVariables.scss

그러면 이제 아래와 같은 파일구조가 된다.
     sass +------> app.scss
          |
          +-----> _customVariables.scss

_customVariables.scss

_customVariables.scss 는 위의 command 를 통해서도 알 수 있듯이 _variables.scss 이다. 여기에 대부분의 변수들이 정의되어 있다. 그러므로 bootstrap 에서 변경할 내용은 여기서 변경하면 된다.

app.scss

일단 app.scss 는 bootstrap.scss 를 그대로 copy 한 것이라서 path 가 맞지 않는다. 그러므로 일단 아래처럼 path 를 수정해 준다.

그리고 여기에 더해 variables 를 @import 하는 것을 위에서 만든 _customVariables.scss 를 @import 하도록 하자.

/*!
 * Bootstrap v4.0.0 (https://getbootstrap.com)
 * Copyright 2011-2018 The Bootstrap Authors
 * Copyright 2011-2018 Twitter, Inc.
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
 */
@import "./node_modules/bootstrap/scss/functions";
@import "customVariables";
@import "./node_modules/bootstrap/scss/mixins";
...

compile

이제 scss 를 compile 해서 css 를 만들자. 아래처럼 하면 된다. compile 을 하면 결과가 standard output 으로 뿌려주기 때문에 >(파이프) 가 필요하다.
c:\> .\node_modules\.bin\node-sass.cmd .\scss\app.scss > .\result.css
만약 compressed version 을 만들고 싶다면 아래처럼 하면 된다.
c:\> .\node_modules\.bin\node-sass.cmd --output-style compressed .\scss\app.scss > .\result.css




See Aslo



[컴][웹][파이썬] celery beat 에서 schedule task 를 dynamically 추가/삭제

셀러리 비트 / celery beat how to add/remove scheduled task dynamically / 원하는 순간에 추가/삭제 / 다이내믹하게  /


celery beat 에서 schedule task 를 dynamically add/remove


git hub issue comment 에서 dynamic 하게 event 를 추가할 때 celery beat 가 새롭게 populate_heap() 을 하도록 하는 법이 나와 있다. 여기서 이야기하는 바는 아래 2가지이다.
  1. populate_heap() 을 schedule 이 변경될 때마다 해주는 것
  2. 그리고 DatabaseSchduler 를 사용해서 add/remove 를 하는 것(참고: Using custom scheduler classes / Celery 4.1.0 documentation)

이중에 1번째 내용은 이슈의 comment에 의하면 4.1 버전에 반영되었다고 한다.

실제로 확인을 해보니 반영이 되어 있다. Populate heap when periodic tasks are changed · celery/celery@6a24e00 · GitHub


Scheduler

celery.beat.PersistentScheduler

기본적으로 celery.beat.PersistentScheduler를 사용한다.
$celery -A proj beat -s /home/celery/var/run/celerybeat-schedule

celery.beat.PersistentScheduler 는 celerybeat-schedule file을 이용하는데 shelve database 파일이다. 아래 shelve database 의 '제한사항(retrictions)' 에도 나오지만 concurrent access 를 지원하지 않는다.

django-celery-beat

django-celery-beat 은 database 에 "periodic task schedule" 을 저장할 수 있도록 해준다. 하지만 이것은 Django 를 필요로 한다.

Django 없이 SQLAlchemy 를 이용하는 DatabaseScheduler

사용법은 간단한다.  SQLAlchemy 를 설치하고
$pip install sqlalchemy

아래 code 를 실행해서 DB table 을 생성한다.(참고로, 아래코드는 sqlite 을 사용하는 코드다)(다른 DB  urls 과 관련해서는 여기 를 참고하자.)

참고로 추후에 sqlalchemy_scheduler_models.py 의 engine  도 user/password 를 해줘야 한다. 예를 들면 아래와 같은 식으로 말이다.
  • engine = sqlalchemy.create_engine('mysql://root:root_password@localhost/db_name')




## sqlalchemy_scheduler_models.py
...
engine = sqlalchemy.create_engine('sqlite://')
Base = declarative_base(bind=engine)
...

from sqlalchemy import create_engine
from sqlalchemy_scheduler_models import Base


# Create an engine that stores data in the local directory's
# sqlalchemy_example.db file.
engine = create_engine('sqlite:///sqlalchemy_example2.db')
 
# Create all tables in the engine. This is equivalent to "Create Table"
# statements in raw SQL.
Base.metadata.create_all(engine)

그리고 celconfig.py 에 아래를 추가하자.
CELERYBEAT_SCHEDULER = 'yourproject.sqlalchemy_scheduler:DatabaseScheduler'


주의

주의할 점은 scheduler 가 바뀌는 것에 대해서는 새롭게 sync 를 하지만 celery_crontabs 내용이 바뀌는 것에 대해서는 반영되지 않는다. 이것이 왜 중요하냐면, scheduler 에서 시간 설정을 crontab_id 로 하기 때문이다.

즉, crontab 의 내용을 변경하는 경우(시간을 변경하는 것)라면 새롭게 celery beat 를 restart 해야 한다.

etc

수행조건

enabled, last_run_at

table 'celery_schedules' 에 있는 task 들은 해당되는 crontab_id 시간에 수행된다. 이때 "enabled" 가 '1' 이 되어 있어야 하고, 또 하나 "last_run_at" 이 현재 UTC 보다 이전이어야 한다.

참고로 last_run_at 이라고 가정하고, 동작한다. 그러기 때문에 insert 할 때도 UTC 를 insert 해야 한다. 그렇지 않으면 last_run_at 이 현재 UTC 보다 큰 값이 돼서 동작이 실행되지 않을 수 있다.

sync 시점

또는 date_changed 를 보고 이전의 date_changed 시간이후여야 한다. 그래야 task 를 resync 하게 된다.(참고 : sqlalchemy_scheduler.py: DatabaseScheduler.should_sync())

should_sync 가 발생빈도는 Scheduler 의 sync_every 변수를 수정하면 된다.
# beat.py
class Scheduler(object):
     ...
    #: How often to sync the schedule (3 minutes by default)
    sync_every = 3 * 60

그리고 또하나 주의할 점은 session 과 관련돼서, session 이 기본적으로 autoflush 를 하지 않기 때문에, 새롭게 update 된 내용이 session 을 통해 이루어지지 않았다면, DatabaseScheduler 가 새롭게 sync 하지 못한다. (예를 들면, DB client 에서 직접 수정한 경우등)

그렇기 때문에 되도록 schedule 을 추가하는 부분도 동일한 session 을 이용하도록 하는 것이 낫다.


See Also

  1. Don't keep important data in your Celery queue : celery 에 apply_async 를 사용하는 것보다는 주기적으로 task 를 확인하고 실행하도록 하는 것이 낫다는 내용의 글. expires option 에 대한 이야기도 있다.
  2. Celery 4.4.5- task_time_limit task_time_limit 은 default 가 No time limit 이다. 하지만, 주기적으로 task 를 돌릴 때 설정한 주기와 task 를 끝내는데 걸리는 시간은 고려해야 한다.


[컴][웹] HTML5 효과들

css 효과들 / css transition css3 codes/ css3 demo / prallax 효과 / 패럴렉스 효과 /


css 효과들


150 Amazing Examples of CSS Animation & Effects
31~150

css transition


css checkboxes




ETC

parallax, top sticky menu


[컴][웹] gradient 만들때 도움이 되는 사이트들

그라데이션 툴 / gradient sites tool how to generate the gradient background / 배경 그라데이션 백그라운드


출처 : https://designmodo.com/gradients/

gradient 만들때 도움이 되는 사이트들

  • Web Gradients : 좋다. full 로 background 를 채운 모습도 볼 수 있다.
  • Grabient : gradient 를 만들면, css3 code 를 가져올 수 있다.
  • coolhue : 여러 gradient template 들이 있다. css3 code 를 얻을 수 있다.
  • Gradient Buttons with Hover Effects : hover 를 하면 변하는 gradient button 들을 확인할 수 있다.

[컴] 썬더버드에서 mbox file import 하기

thunderbird / .mbox 파일 임포트 / 불러오기


썬더버드 에서 mbox 파일 import 하기

아래 경로에서 Thunderbird 를 다운로드 하고, 설치하자.

이제 썬더버드를 실행하자.



처음에 아래와 같은 팝업이 뜨는데, 그냥 넘기자


여기서 '건너뛰고 기존 메일 사용하기' 를 선택하자. 메일등록을 해야 .mbx 파일을 import 할 수 있다.



처음에 '메일주소'와 '암호'를 넣어서 설정이 안되면, 아래처럼 메뉴가 확장돼서 보이는데, 이때 아래처럼 'SSL/TLS' 와 '암호화된 패스워드' 로 선택하자.

그러면, '고급' 버튼이 활성화 된다.



그래서 '고급'을 누르면 아래처럼 '계정설정' 메뉴가 보여지고, 계정이 등록된다.
계정이 실제로 연결되어 있는 것과는 상관없이 아래처럼 화면에 등록이 되면 된다.





이제 계정설정에서 '개인폴더'를 선택하면 아래그림 처럼 보인다. 여기서 '로컬 디렉토리' 에 있는 경로를 복사하자.




그리고 그 경로로 가서 .mbox 파일을 붙여놓기 하자.




그리고 썬더버드를 껐다가 다시 시작하면 아래처럼 보이게 된다.