설치

백업

mv ~/.config/nvim ~/.config/nvim.bak

Clean neovim folders (Optional but recommended)

mv ~/.local/share/nvim ~/.local/share/nvim.bak
mv ~/.local/state/nvim ~/.local/state/nvim.bak
mv ~/.cache/nvim ~/.cache/nvim.bak

Clone the repository

git clone --depth 1 https://github.com/AstroNvim/AstroNvim ~/.config/nvim
nvim

1. 기본 맵핑 설정변경(기본설정)

`leader key` 가 기본적으로 `SPACEBAR` 로 설정되어 있습니다. 개인적으로는 vim 에서 전통적으로 사용하는 \ 키를 변경하고 싶지않아 변경하였습니다.
  1. lua/astronvim/optionslua ... leader key 설정변경
  2. lua/astronim/mapping.lua ... 기타 키 맵핌 설정
    -- mapleader = " ", -- 기본설정
    mapleader = "\\",k

2. 기타 설정 변경

leader key 변경

~/.config/nvim/lua/user/init/lua에 기타 설정들을 변경할 수 있습니다.

아래샐정은 leaderkey 를 변경하고 , mapping.lua에 설정되어 있는 pane split 기능에 대한 단축키를 disabled 처리 한 것입니다.

return {
  options = {
    g = {
      mapleader = "\\"
    }
  },
  mappings = {
    n = {
      ["|"] = false,
      ["\\"] = false
    }
  },
  plugins = {
    init = {
      { "ofejwpofwpeojf",
        config = function()
          require("rust-tools").setup {
          server = astrovim.lsp.server_settings "rust_analyzer"
          }
      }
    }
  }
}

3. plugin 설치

~/.config/nvim/lua/user/plugins/ 폴더에 플러그인 파일들을 생성하면 자동으로 파일을 읽어들인다.

nvim-surround

~/.config/nvim/lua/plugin/nvim-surround.lua에 아래 내용을 삽입

return {
  {
    "kylechui/nvim-surround",
    version ="*",
    event = "VeryLazy",
    config = function()
      require("nvim-surround").setup({
        -- Configuration here, or leave empty to use defaults
      })
    end,
  },
}

i

codeium

~/.config/nvim/lua/plugins/codium.lua 파일에 아래 내용을 추가하고 저장하면, 자동으로 플러그인을 인식한다.

return {
  {
    'Exafunction/codeium.vim',
    event = 'BufEnter',
    config = function ()
    -- Change '<C-g>' here to any keycode you like.
      vim.keymap.set('i', '<C-g>', function () return vim.fn['codeium#Accept']() end, { expr = true })
      vim.keymap.set('i', '<c-;>', function() return vim.fn['codeium#CycleCompletions'](1) end, { expr = true })
      vim.keymap.set('i', '<c-,>', function() return vim.fn['codeium#CycleCompletions'](-1) end, { expr = true })
      vim.keymap.set('i', '<c-x>', function() return vim.fn['codeium#Clear']() end, { expr = true })
      vim.keymap.set("n", "<leader>;", function()
        if vim.g.codeium_enabled == true then
          vim.cmd "CodeiumDisable"
        else
          vim.cmd "CodeiumEnable"
        end
      end, { noremap = true, desc = "Toggle Codeium active" })
    end,
  }
}

vim에 들어가서 명령모드에서 아래와 같이 입력하면, 인증을 시작한다.

:Codeium Auth
반응형

Manjaro 저장소 변경

패키지 미러 서버를 변경해서 빠른 소스 업데이트 적용하자. 조금 시간이 걸리지만, 빠르게 다운로드 적용할 수 있는 점이 있다.

sudo pacman-mirrors --fastrrack && sudo pacman -Syyu
# 그런데 위와 같이하면, 세계에 있는 서버에 핑을 날린다
# 아래와 같이 입력하자

$ sudo pacman-mirros --country South_Korea

ctrl swap capslock

$ setxbmap -option ctrl:swapcaps

한글 자판 설치

nimf를 포크해서 하모니카 리눅스에서 보완해주고 있습니다.

nimf-git 패키지를 이용해서 설치하여야 합니다.

설치

# 설치를 위한 툴 설치
sudo pacman -S base base-devel yay git
sudo pacman -Syu
yay -S nimf

im-config 세팅

$ vi ~/.xprofile

아래 내용을 추가

export GTK_IM_MODULE=nimf
export QT4_IM_MODULE="nimf"
export QT_IM_MODULE=nimf
export XMODIFIERS="@im=nimf"
nimf

시스템 Reboot

nimf 설치하신 후, nimf-settings 를 실행하셔서 환경 변수 설정 옵션을 disable로 변경 합니다.

만약 다른 입력기를 사용하시려면 환경 변수 설정 옵션을 반드시 꺼주셔야 합니다.

반응형

현재 mac과 linux 를 사용하고 있습니다. 최근에서 linux 운영체계를 더 자주사용하고 있습니다. 사용하면서 blog 글을 linux 에서 작성해서 mac과 공유하는 문제가 발생했습니다.
저는 Mac에서 ㅣObsidian 을 사용해서 google drive 와 파일싱크를 통해서 저장하고 있었습니다. 그런데, linux에서는 공식적으로 지원하는 google drive앱이 없기 때문에, 3rd party앱으로 이를 해결해야 합니다.

여러가지 앱을 사용해 봤지만, 현재는 rclone 을 사용해서 해결하고 있습니다.
우선 rclone config 명령어를 통해서 웹하드를 연결해야 합니다. (구글드라이브 연결도 간단함)

rclone 을 통해서 드라이버 연결

현재는 GOOGLE DRIVE 와 DROPBOX가 연결 해놓은 상태입니다. NEW를 통해서 새로운 웹하드에 연결을 할 수 있습니다.
rclone v1.61.1 에서 지원하는 목록입니다.

$ rclone config
Current remotes:

Name                 Type
====                 ====
dropbox              dropbox
gDrive               drive

e) Edit existing remote
n) New remote
d) Delete remote
r) Rename remote
c) Copy remote
s) Set configuration password
q) Quit config
e/n/d/r/c/s/q> n

Enter name for new remote.
name> d

Option Storage.
Type of storage to configure.
Choose a number from below, or type in your own value.
 1 / 1Fichier
   \ (fichier)
 2 / Akamai NetStorage
   \ (netstorage)
 3 / Alias for an existing remote
   \ (alias)
 4 / Amazon Drive
   \ (amazon cloud drive)
 5 / Amazon S3 Compliant Storage Providers including AWS, Alibaba, Ceph, China Mobile, Cloudflare, ArvanCloud, DigitalOcean, Dreamhost, Huawei OBS, IBM COS, IDrive e2, IONOS Cloud, Liara, Lyve Cloud, Minio, Netease, RackCorp, Scaleway, SeaweedFS, StackPath, Storj, Tencent COS, Qiniu and Wasabi
   \ (s3)
 6 / Backblaze B2
   \ (b2)
 7 / Better checksums for other remotes
   \ (hasher)
 8 / Box
   \ (box)
 9 / Cache a remote
   \ (cache)
10 / Citrix Sharefile
   \ (sharefile)
11 / Combine several remotes into one
   \ (combine)
12 / Compress a remote
   \ (compress)
13 / Dropbox
   \ (dropbox)
14 / Encrypt/Decrypt a remote
   \ (crypt)
15 / Enterprise File Fabric
   \ (filefabric)
16 / FTP
   \ (ftp)
17 / Google Cloud Storage (this is not Google Drive)
   \ (google cloud storage)
18 / Google Drive
   \ (drive)
19 / Google Photos
   \ (google photos)
20 / HTTP
   \ (http)
21 / Hadoop distributed file system
   \ (hdfs)
22 / HiDrive
   \ (hidrive)
23 / In memory object storage system.
   \ (memory)
24 / Internet Archive
   \ (internetarchive)
25 / Jottacloud
   \ (jottacloud)
26 / Koofr, Digi Storage and other Koofr-compatible storage providers
   \ (koofr)
27 / Local Disk
   \ (local)
28 / Mail.ru Cloud
   \ (mailru)
29 / Mega
   \ (mega)
30 / Microsoft Azure Blob Storage
   \ (azureblob)
31 / Microsoft OneDrive
   \ (onedrive)
32 / OpenDrive
   \ (opendrive)
33 / OpenStack Swift (Rackspace Cloud Files, Memset Memstore, OVH)
   \ (swift)
34 / Oracle Cloud Infrastructure Object Storage
   \ (oracleobjectstorage)
35 / Pcloud
   \ (pcloud)
36 / Put.io
   \ (putio)
37 / QingCloud Object Storage
   \ (qingstor)
38 / SMB / CIFS
   \ (smb)
39 / SSH/SFTP
   \ (sftp)
40 / Sia Decentralized Cloud
   \ (sia)
41 / Storj Decentralized Cloud Storage
   \ (storj)
42 / Sugarsync
   \ (sugarsync)
43 / Transparently chunk/split large files
   \ (chunker)
44 / Union merges the contents of several upstream fs
   \ (union)
45 / Uptobox
   \ (uptobox)
46 / WebDAV
   \ (webdav)
47 / Yandex Disk
   \ (yandex)
48 / Zoho
   \ (zoho)
49 / premiumize.me
   \ (premiumizeme)
50 / seafile
   \ (seafile)
Storage> ^C⏎             

웹하드를 등록하는 부분은 간단한 부분이어서 따로 설명은 안 하려고합니다.

sync 하기

웹드라이브에서 파일과 LOCAL의 폴더를 동기화하고 싶을 때 사용합니다. 필요한 경우 파일 삭제를 포함하여 소스와 일치하도록 대상을 업데이트 합니다.

동기화시 삭제가 포함되므로 데이터 손실을 방지하기 위해 항상 --dry-run 또는 --interactive/-i 프랠그를 사용하여 동기하 작업을 먼저 테스트 하는 것이 좋습니다.

`-i`: interactive 모드를 사용하면 파일이 강제적으로 수정되는 것을 막고, 확인하면서 동기화할 수 있습니다.

파일을 원본에서 복사할 곳을 잘 설정하는 것이 중요합니다
$ rclone sync -i [원본 폴더] [목적지]

# google drive -----> local
$ mkdir -p ~/gdrive/[폴더명]
$ rclone sync -i mygdrive:/[폴더명] ~/gdrive/[폴더명]

# local ------> google drive
$ rclone sync -i ~/gdrive/[폴더명] mygdrive:/[폴더명]
  • --bwlimit=8.5M: 대역폭 속도를 8.5M으로 제한하여 Google에 부과하는 일일 최대업로드 한도에 도달하지 못하도록 합니다.
  • --progress: 복제/동기화 중인 파일이 완료될 때까지 남은 시간, 복제/동기화가 전송되는 속도를 보여주는 출력 합니다.

파일 조회하기

동기화 하기 전에 해당 웹하드에 어떤파일이 들어있는지 명령어를 통해서 조회 할수 있습니다. 굳이 웹을 통해서 조회하지 않아도 바로 조회할 수 있어 편합니다.

$ rclone ls mygdrive:
$ rclone lsd mygdrive:

mount 하기

저는 실시간으로 파일을 동기화해서 사용하고 싶기 때문에 위와 같이 파일을 sync 하는 것과는 다릅니다.

$ rclone mount gDrive:source_folder target_folder --allow-other --cache-db-purge --fast-list --poll-interval 10m

systemd 구성으로 자동 mount 하기

매번 명령어를 실행해서 동작하는 것을 systemd에 등록해서 자동 mount 하려고 합니다.

/etc/systemd/system/gdrive.service 파일을 생성합니다.

[Unit]
Description=rclone for gdrive_mount
AssertPathIsDirectory=/home/leaf/target_folder
After=networking.service

[Service]
Type=simple
ExecStart=rclone mount --config=/home/leaf/.config/rclone/rclone.conf gdrive_source_folder: /home/leaf/target_folder --allow-other --cache-db-purge --fast-list --poll-interval 10m
ExecStop=/bin/fusermount -u /home/leaf/target_folder
Restart=always
RestartSec=10

[Install]
WantedBy=default.target
$ systemctl enable gdrive.service
$ systemctl start gdrive.service
반응형

현재 리눅스에서 지원하는 키보드 세팅 확인

$ grep -E "(ctrl|caps)" /usr/share/X11/xkb/rule/base.lst
$ setxkbmap -option ctrl:swapcaps

참조: https://wiki.archlinux.org/title/xmodmap

The following example modifies CapsLock to Control, and Shift+CapsLock to CapsLock:

  • CapsLock -> Control
  • Shif t+ CapsLoc ->: CapsLock

~/.Xmodmap 파일수정

clear lock
clear control
add control = Caps_Lock Control_L Control_R
keycode 66 = Control_L Caps_Lock NoSymbol NoSymbol
반응형

타오나스 구매해서 minidlna 구성을 하려고 합니다. 공유기에서 자체 설치가 가능하기 때문에 설치할 수 있습니다.

jailfreebsd 11.3 버전을 생성하고, minidlna 을 설정 한다.

기본 포트는 8200 입니다.

$ pkg update -y && pkg upgrade -y
$ pkg install minidlna

minidlna가 설치가 완래 되면 아래의 conf 파일을 설정하자.

/usr/local/etc/minidlna.conf

# /usr/local/etc/minidlna.conf
#media_dir=/opt 
media_dir=/media 월하는 마운트 한 폴더로 설정
db_dir=/var/db/minidlna
log_dir=/var/log

/etc/rc.conf

# /etc/rc.conf
minidlna_enable="YES"

명령어

파일 재스캔

$ minidlna -R

서비스 시작

$ service minidlna start
반응형

리눅스 서버를 다루다보니, 터미널을 매일사용하고 있습니다. 저는 기본으로 fish, tmux. alacritty 을 이용해서 작업을 하고 있습니다. 제가 사용하는 것들의 주요 특징들은 가볍고 빠릅니다.
iterm2는 전혀 성에 차지 않습니다. wasp와 같은 터미널 프로그램은 쓸만합니다. 하지만, 기본기로 돌아가면 alacritty 사용을 권하고 싶습니다. (rust 로 작성되어 있다는 점도 무시할 수 없습니다.)

현재 사용중인 stack

오늘부터 도전!

자주가는 reddit.comr/unixpron에는 커스텀화 된 화면들을 공유하고 자신들의 설정을 공유하는 곳입니다. 리눅스 사용자들을 위한 곳입니다. 리눅스도 같이 사용하고 있는 저에게는 지루한 랩탑을 좋은 놀이깜으로 만들어주는 곳입니다. (리눅스에 대해서도 학습하면서...)
아래 적용하려고 하는 도구들도 이 곳에서는 많이 사용하는 것들입니다.

여기서 최신 도구들을 몇개 사용해 보려고 합니다. 선정이유는 다들 rust로 작성되어 있는 점입니다. rust를 사랑하는 개발자로서 이 세팅은 반드시(!) 좋을 것 같습니다.

아래 TOOLS 를 사용하려고 하고, 장점에 대해서 설명하려고 합니다.

  • nushell
  • startship
  • zellij

nushell

rust로 작성된 최신 데이터 지향 쉘입니다. 기본적인 구성만으로 자동완성 및 기타 유용한 기능을 사용하기 위해 여러 설정을 할 필요가 없습니다.

아직 사용하기에는 여러문제들이 보임.

설치

$ brew install nushell
.......
$ nu
✘  ~  nu
No environment config file found at /Users/forteleaf/Library/Application Support/nushell/env.nu
Would you like to create one with defaults (Y/n):

Config file created at: /Users/forteleaf/Library/Application Support/nushell/env.nu
No config file found at /Users/forteleaf/Library/Application Support/nushell/config.nu
Would you like to create one with defaults (Y/n):

Config file created at: /Users/forteleaf/Library/Application Support/nushell/config.nu
     __  ,
 .--()°'.' Welcome to Nushell,
'|, . ,'   based on the nu language,
 !_-(_\    where all data is structured!

Please join our Discord community at https://discord.gg/NtAbbGn
Our GitHub repository is at https://github.com/nushell/nushell
Our Documentation is located at http://nushell.sh
Tweet us at @nu_shell

Nushell has been around for:
3yr 4month 3wk 1day 23hr 37min 48sec 769ms 498µs

You can disable this banner using the config nu command
to modify the config.nu file and setting show_banner to false.

let-env config {
    show_banner: false
    ...
}

장점

  1. Linux, macOS, Window 에서 작동
  2. nu pipeline은 구조화 된 데이터를 사용.
    안전하게 선택, 필터링, 정렬을 사용
  3. 강력한 플러그인

단점

  1. command 학습이 필요함.
    shell이름을 확인하려고 했는데....

    `echo $SHELL`
    Error: nu::parser::variable_not_found (link)
    
    × Variable not found.
    ╭─[entry #12:1:1]
    1 │ echo $SHELL
    ·      ───┬──
    ·         ╰── variable not found
    ╰────

nushell는 데이터 표현을 테이블 저장합니다. 마치 DB의 쿼리를 이용해서 물러오는 것 같습니다. 기본 zsh, fish, bash 등에 익숙해 있다면 생소한`cui
화면 처럼 보이기도 합니다.

/Users/forteleaf/vagrant〉ls                                                                                                                             09/28/2022 11:43:33 PM
╭───┬──────────┬──────┬───────┬──────────────╮
│ # │   name   │ type │ size  │   modified   │
├───┼──────────┼──────┼───────┼──────────────┤
│ 0 │ kubeset  │ dir  │ 320 B │ 2 months ago │
│ 1 │ window10 │ dir  │ 128 B │ 2 months ago │
╰───┴──────────┴──────┴───────┴──────────────╯
  1. 미완성적인 부분
    기존에 것들과 차이가 나고 PATH등 설정을 새로 해야함

starship

  • 호환성 우선
  • RUST 를 이용한 최고의 퍼포먼스와 안정성
  • 세심한 CUSTOM

Starship은 간단한 yaml 파일에 매우 다양한 구성 옵션을 제공 합니다. 그러나 nushell과 마찬가지로 처음에는 구성이 필요하지 않습니다. 모든 기본값이 이미 설정되어 있습니다! 바로 사용할 수 있는 멋진 구성 사전 설정을 제공합니다.

Starship은 다른 여러 도구 및 기술과 자동으로 통합됩니다. 패키지 버전을 표시하고(예: Poetry 프로젝트에 있을 때) AWS 리전, kubernetes 컨텍스트 및 네임스페이스를 표시할 수 있습니다. 간단히 말해서 모든 것과 작동합니다. 여기에서 전체 통합 목록을 살펴보십시오.


현재는 pastel Powerline으로 설정해서 사용하고 있습니다.

rust 로 작성되어 있어서 빠르다고 생각했지만, 별 차이를 느낄 수 없었습니다.

zellij

tmux와 매우 유사한 기능을 가지고 있습니다. 이쁜 라인이 생겨서 화면을 구분할 수 있는 큰 장점이 있습니다. 그런데 이로 인해서 볼 수 있는 text가 조금은 줄어듭니다. 한줄 정도 차이지만, 신경이 쓰입니다.

설치

$ brew install # Zellij
or
# zsh
bash <(curl -L zellij.dev/launch)

# fish
bash (curl -L zellij.dev/launch | psub)

장점

  • 기존에 사용하던 tmux의 단축키가 호환
  • 이쁨
  • layout 저장 (tmuxinator를 사용하고 있어서 ....)
  • pane 이동 기능이 직관적이고 편리

단점

  • tmuxinator 를 사용하고 있는데 이와 같은게 안 보임
  • ctrl+p 로 과거 실행했던 메뉴를 찾는데, 단축키가 설정되어 있음(pane 설정용)
    별도의 세팅을 해야되는 아쉬움
  • synchronize-pane 기능이 없다. 2021년에 기능이 추가 됨

기존에 사용하던 tmux의 단축키의 익숙함 때문에 zellij 에 적응이 안됩니다. 그리고, 기본 repository 에서 tmux 를 실행할 수 있는데, 굳이 zellij 를 설치해서 사용할 필요가 있을까 싶습니다.

반응형

'개발 > 리눅스' 카테고리의 다른 글

arch ctrl <-> caps lock swap  (0) 2023.01.02
freebsd | minidlna 구축  (0) 2022.10.13
ansible - 자동화의 시작  (0) 2022.07.14
Gitlab-CE 업그레이드  (0) 2022.07.05
LINUX | Linus Torvalds 가 우분투, 데비안을 싫어하는 이유  (0) 2020.07.13

Imgur

Ansible

Ansible은 오픈 소스 소프트웨어 프로비저닝, 구성 관리, 애플리케이션 전개 도구이다. 수많은 유닉스 계열 시스템에서 실행되며 유닉스 계열 운영 체제 및 마이크로소프트 윈도우의 구성이 가능하다.
시스템 구성을 기술하기 위해 자체 선언형 언어를 포함하고 있다. 위키백과

  • 테스트 환경을 구축(다양한 OS)

  • python으로 개발 되었고 YAML 언어를 통해 정의할 수 있고, JSON 방식으로 통신

  • OPEN Source

기본개념

환경설정, 배포를 가능케 하는 언어. 리모트 서버에 접속해서 무언가를 실행시키는 정책을 기술한다. YAML 문법으로 정책이 기술되어 고급 단계에서 로드밸런서를 모니터링하는 복잡한 환경에서도 사용할 수 있도록 한다.

playbook은 하나 또는 하나 이상의 play를 두게 되고, play의 목적은 여러 호스트들을 잘 정의 된 ROLETASK를 매핑하는 역할을 합니다. TASKAnsible모듈의 호출을 의미한다.
ROLE을 더 편하게 관리하기 위해서 YAML파일로 정의해서 사용할 수 있다. 또한 host inventory 파일에 정의한 서버 그룹별로 각각 나누너 provision 할 수 있도록 할 수 있다.

장점

  • 빠른 SSH 통신, 빠른 Provision을 이용가능

  • agent daemon을 사용하지 않음

  • 자동 배포 환경이 구성 쉬움

  • 멱등성
    여러 번 적용해도 결과 변동 없음
    바뀌는 것이 없으면 당연히 배포되어도 변경 없음
    바뀌는 부분이 있으면 그 부분만 반영
    shell, command, file module은 보장 안됨

  • playbook

  • ad-hoc 지원

  • 병렬 Provisioning 지원

단점

  • 시스템 초기 설치 수행은 불가능

  • 시스템 모니터링은 지원 안함

  • 시스템 변경사항 초적하지 않음

할수있는 것

앤서블에는 크게 3가지 요소가 있다.
inventory, playbook, module이 그것이다.
이는 각각 (1) 어디서, (2) 무엇을, (3) 어떻게 수행할지를 정의한다. (엄밀히 말하면 모듈이 플레이북에서 사용되지만, 이해를 위해 구분해 설명한다)

inventory

remote server에 대한 meta 데이터를 기술하는 파일.
인벤터리는 앤서블에 의해 제어되어 Infrastructure as a Code의 대상이 될 서버들의 목록을 정의하는 파일 일반적으로 hosts.ini 파일에 정의해 사용하는 듯 하며, 위 예시에서 작성했던 hosts.ini 파일이 바로 그것이다.
인벤터리에는 여러 서버들의 접속 정보 (SSH 접근 IP, 포트, 리눅스 사용자) 등을 정의.
기본 파일은 /etc/ansible/hosts를 읽게 하거나, 따로 inventory파일을 만들고 옵션을 주어 동작하게 할 수 있다. 만약 고정 ip를 가지고 있고, ghost 파일 안에 들어가 있지 않는 서버가 있다면 설정 파일을 만들 수 있고 테스트 환경을 만들 때 유용하다.

대충 아래와 같은 파일로 구성이 된다.

centos1 ansible_host=172.16.49.133 ansible_user=root
centos2 ansible_host=172.16.49.134 ansible_user=root
zabbix ansible_host=172.16.49.135 ansible_user=root

[server]
centos1
centos2
zabbix

PLAYBOOK

설정을 관리가호 다수의 머신에 대한 배포 시스템에 대한 기본적인 단위. 복잡한 형태의 배포에 매우 적합하다. 설정을 정의할 수 있으며 특정머신의 집합을 오가며 다른 작업을 수행하도록 수동으로 작업 순서를 설정하는 것도 가능하다. 이 때의 작업은 동기 또는 비동기로 수행할 수 이다. /usr/bin/ansible명령을 통해서 AD-HOC 테스크를 실행하는 것에 반해 PLAYBOOK은 소스 컨트롤을 통해 보관하거나 사용자의 설정을 내보내거나 원격 시스템을 구성,보장디는데 더욱 적합합니다.

Module

이미 정의해 놓은 모듈들을 통해서 다중명령어를 보내줄 수 있다. 예를 들어 yum이라는 모듈을 통해서 설치작업을 요청할 수 있으며, shell모듈을 통해서 커맨드 입력을 보낼 수 있다.

ansible -l #모든 module 목록 조회

ad-hoc

adhoc이라는 의미는 임시적 수행을 말한다.
ansible의 playbook을 작성하는 것이 아니라 임시적으로 또는 특별하게 어떤 작업을 수행하기 위해서 사용할 수 있는 실행방법이라고 할 수 있다.

Ansible 시작하기

![](/Users/forteleaf/Library/Application Support/marktext/images/2019-09-06-16-16-11-image.png)

기본옵션 (Inventory)

hosts.ini파일을 아래와 같이 설정 된다. 파일 이름은 정해진 틀이 없으므로 편한데로 맞춰서 사용합니다.

centos1 ansible_host=172.16.49.133 ansible_user=root
centos2 ansible_host=172.16.49.134 ansible_user=root
zabbix ansible_host=172.16.49.135 ansible_user=root

[server]
centos1
centos2
zabbix

ssh-copy-id로 자동로그인을 설정해 놓으면 ansible_password와 같은 옵션을 따로 설정하지 않아도 된다.

설정파일 ( ansible.cfg / .ansible.cfg )

ansible.cfg파일을 지정해 줌으로서 옵션에 넣을 변수를 줄이고 편하게 사용할 수 있다

## ansible.cfg
[defaults]
inventofy=./hosts.ini
remote_user=root
private_key_file=~/.ssh/id_rsa

host_key_checking=false옵션을 추가하면, 접속시 key 확인하는 작업을 스킵합니다. 일일히 yes칠 상황을 제거해 줍니다

service 상태 조회

ansible all -m shell -a "service status sshd"

모듈 ( MODULE )

모듈들은 정말 다양한 기능들을 제공한다. 이런 기능은 없나? 생각하면 이미 개발되어 있는 상황이고 그게 안된다면, shell또는 command명령을 통해서 작업할 수 있다

shellcommand 모듈의 차이

Module : command

원격 노드에서 명령을 실행

명령 모듈은 명령 이름 뒤에 공백으로 구분 된 인수 목록을 사용합니다. 주어진 명령은 선택된 모든 노드에서 실행됩니다.
쉘을 통해 처리되지 않으므로 $HOME과 같은 변수 및 "<", ">", "|"및 "&"와 같은 조작은 작동하지 않습니다 (이 기능이 필요한 경우 쉘 모듈을 사용하십시오).

Module : shell

노드에서 명령을 실행

쉘 모듈은 명령 이름 뒤에 공백으로 구분 된 인수 목록을 사용합니다. 명령 모듈과 거의 동일하지만 원격 노드의 쉘 (/bin/sh)을 통해 명령을 실행합니다.

Module : template

nginx.ini와 같은 설정 파일을 role을 지정해서 서버마다 다른 설정 값을 넣어서 파일을 생성할 수 있는 기능입니다. 자주 사용되는 기능

PLAYBOOK

# public key 를 server들에 등록하는 playbook
---
- hosts: all    # inventory 의 모든 대상
  tasks:        # 수행할 작업
    - name: authorized to server    # 작업 이름
      authorized_key:               # 수행할 MODULE 명
        user: root                  # MODULE에 들어갈 environment
        state: present
        key: "{{ lookup('file', '~/.ssh/id_rsa.pub') }}" 

yml(야믈)의 파일 구조를 갖고 있습니다. 규칙성에서 벗어나면 제대로 동작하지 않습니다. 이를 유의해 주시면서 작업 하시면 오히려 정규화 된 표현에 코드 리딩하기 편할 것 입니다.

authorized_key를 사용하기 위해서는 암호또한 자동으로 입력 해 주는 sshpass가 필요합니다.

유용한 유틸리티

문법체크

$ ansible-playbook --syntax-check [file]

호스트 나열

$ ansible-playbook --list-hosts [file]

테스크 나열

$ ansible-playbook --list-tasks[file]

#체크모드

$ ansible-playbook --check [file]

참조


반응형

2년동안 gitlab을 운영하면서 한번도 업그레이드를 하지 않았습니다. gitlab.com 사이트에서는 계속 신기술과 최적화가 이뤄지도 있었지만, 온프로미스에 설치되어 있는 사내 gitlab은 새로운 시대에 적응을 못하고 있었습니다. 그래서, 이번에 버전업을 진행하면서 작업 방법에 대해서 글을 남깁니다.

gitlab 은 업그레이드 주요버전을 넘어서 업그레이드 할 수 없습니다. 설치하려고해도 설치완료 되었다는 메세지를 확인할 수 없습니다. 아래와 같은 메세지 Complete!라는 메세지와 로고가 나와야 합니다.

gitlab Reconfigured!
Restarting previously running GitLab services
ok: run: alertmanager: (pid 29637) 0s
ok: run: gitaly: (pid 9202) 7121s
ok: run: gitlab-exporter: (pid 29649) 0s
ok: run: gitlab-kas: (pid 29612) 1s
ok: run: gitlab-workhorse: (pid 29623) 1s
ok: run: grafana: (pid 29653) 1s
ok: run: logrotate: (pid 29663) 0s
ok: run: nginx: (pid 29672) 1s
ok: run: node-exporter: (pid 29683) 0s
ok: run: postgres-exporter: (pid 29689) 1s
ok: run: postgresql: (pid 1562) 9127s
ok: run: prometheus: (pid 29707) 0s
ok: run: puma: (pid 29794) 0s
ok: run: redis: (pid 8759) 7201s
ok: run: redis-exporter: (pid 29800) 1s
ok: run: sidekiq: (pid 29807) 0s

     _______ __  __          __
    / ____(_) /_/ /   ____ _/ /_
   / / __/ / __/ /   / __ `/ __ \
  / /_/ / / /_/ /___/ /_/ / /_/ /
  \____/_/\__/_____/\__,_/_.___/


Upgrade complete! If your GitLab server is misbehaving try running
  sudo gitlab-ctl restart
before anything else.
The automatic database backup was skipped as requested.
You may enable it again anytime by running the following command:
  sudo rm /etc/gitlab/skip-auto-backup

  Verifying  : gitlab-ce-14.10.4-ce.0.el7.x86_64                                                                                                      1/2
  Verifying  : gitlab-ce-14.9.5-ce.0.el7.x86_64                                                                                                       2/2

Updated:
  gitlab-ce.x86_64 0:14.10.4-ce.0.el7

Complete!

1. 준비

1.1. 백업

원복하기 위한 작업입니다. 2년 넘게 작업해온 내역들이 날아갈 수 있습니다. 내용을 작성하면서 다시 한번 백업을 진행했습니다. 백업은 자주 해 주시면 좋습니다. 기왕이면 crontab을 사용해서 작성하시기 바랍니다.

$ gitlab-backup create
2022-07-05 23:04:05 +0900 -- Dumping repositories ... done
2022-07-05 23:04:05 +0900 -- Dumping uploads ...
2022-07-05 23:04:06 +0900 -- Dumping uploads ... done
2022-07-05 23:04:06 +0900 -- Dumping builds ...
2022-07-05 23:04:06 +0900 -- Dumping builds ... done
2022-07-05 23:04:06 +0900 -- Dumping artifacts ...
2022-07-05 23:04:06 +0900 -- Dumping artifacts ... done
2022-07-05 23:04:06 +0900 -- Dumping pages ...
2022-07-05 23:04:06 +0900 -- Dumping pages ... done
2022-07-05 23:04:06 +0900 -- Dumping lfs objects ...
2022-07-05 23:04:06 +0900 -- Dumping lfs objects ... done
2022-07-05 23:04:06 +0900 -- Dumping terraform states ...
2022-07-05 23:04:06 +0900 -- Dumping terraform states ... done
2022-07-05 23:04:06 +0900 -- Dumping container registry images ... [DISABLED]
2022-07-05 23:04:06 +0900 -- Dumping packages ...
2022-07-05 23:04:06 +0900 -- Dumping packages ... done
2022-07-05 23:04:06 +0900 -- Creating backup archive: 1657029839_2022_07_05_14.10.4_gitlab_backup.tar ...
2022-07-05 23:04:06 +0900 -- Creating backup archive: 1657029839_2022_07_05_14.10.4_gitlab_backup.tar ... done
2022-07-05 23:04:06 +0900 -- Uploading backup archive to remote storage  ... [SKIPPED]
2022-07-05 23:04:06 +0900 -- Deleting tar staging files ...
2022-07-05 23:04:06 +0900 -- Cleaning up /var/opt/gitlab/backups/backup_information.yml
2022-07-05 23:04:06 +0900 -- Cleaning up /var/opt/gitlab/backups/db
2022-07-05 23:04:06 +0900 -- Cleaning up /var/opt/gitlab/backups/repositories
2022-07-05 23:04:07 +0900 -- Cleaning up /var/opt/gitlab/backups/uploads.tar.gz
2022-07-05 23:04:07 +0900 -- Cleaning up /var/opt/gitlab/backups/builds.tar.gz
2022-07-05 23:04:07 +0900 -- Cleaning up /var/opt/gitlab/backups/artifacts.tar.gz
2022-07-05 23:04:07 +0900 -- Cleaning up /var/opt/gitlab/backups/pages.tar.gz
2022-07-05 23:04:07 +0900 -- Cleaning up /var/opt/gitlab/backups/lfs.tar.gz
2022-07-05 23:04:07 +0900 -- Cleaning up /var/opt/gitlab/backups/terraform_state.tar.gz
2022-07-05 23:04:07 +0900 -- Cleaning up /var/opt/gitlab/backups/packages.tar.gz
2022-07-05 23:04:07 +0900 -- Deleting tar staging files ... done
2022-07-05 23:04:07 +0900 -- Deleting old backups ... [SKIPPED]
2022-07-05 23:04:07 +0900 -- Warning: Your gitlab.rb and gitlab-secrets.json files contain sensitive data
and are not included in this backup. You will need these files to restore a backup.
Please back them up manually.

/var/opt/gitlab/backups 에 백업한 파일들이 있는 것을 확인할 수 있습니다.

1.2. DB 자동 백업 중지

gitlab은 버전업을 하면 DB 또한 버전에 맞춰서 갱신되는 작업을 합니다. 이 부분을 자동으로 갱신되는 것을 방지 합니다. /etc/gitlab폴더에 파일을 생성해 놓으면 gitlab에서 자동으로 백업되는 것을 방지할 수 있습니다.

$ touch /etc/gitlab/skip-auto-backup

2. 업그레이드 작업

2.1. 업그레이드 순서 확인

8.11.Z -> 8.12.0 -> 8.17.7 -> 9.5.10 -> 10.8.7 -> 11.11.8 -> 12.0.12 -> 12.1.17 -> 12.10.14 -> 13.0.14 -> 13.1.11 -> 13.8.8 -> 13.12.15 -> 14.0.12 -> 14.3.6 -> 14.9.5 -> 14.10.Z -> 15.0.Z -> latest 15.Y.Z

여기에 업그레이드 버전에 맞춰서 단계별로 진행해야 합니다. 현재 버전이 중간에 있다면, 그 다음 버전으로 업그레이드 해주면 됩니다.

주의: 한번씩 업그레이드 해 줄때마다 백그라운드 이전작업이 진행 됩니다. 이 부분을 반드시 확인하면서 진행하여야 합니다.
또한 redis 버전, progres 버전 등을 업그레이드 해줘야 하는 경우도 있습니다.

$ yum install gitlab-ce-13.8.8
$ yum install gitlab-ce-13.12.15
$ yum install gitlab-ce-14.0.12

2.2. 업그레이드 전에 백그라운드 업데이트 체크

업그레이드 후에 백그라운드에서 DB 데이터등을 업데이트 하는 작업이 있는지 확인하면서 진행합니다. 작업이 다 끝나지 않았는데 업그레이드를 진행하면 데이터가 깨질 수 있다고 합니다.

2.2.1. bash 명령어로 확인

# 작업 확인
$ sudo gitlab-rails runner -e production 'puts Gitlab::BackgroundMigration.remaining'
0 # 작업중이면 '1'로 표기

2.2.2. 관리자 화면에서 확인

gitlab을 admin계정으로 접속을 한 후,
[Admin Area] - [Monitoring] - [Background Migrations] 에 들어가면 상단 Queue에 현재 작업 또는 대기중인 내역을 확인할 수 있다.

반응형

많은 인터뷰에서 Linux 제작자 Linus Torvalds는 자신의 컴퓨터에서 Fedora를 선호한다고 밝혔습니다. 그러나 왜 그는 “인기있는 리눅스 배포판 데비안을 사용하지 않습니까?”에 대한 대답은 과거 데비안 리눅스에서의 설치 경험에 있다고 말했습니다.

Linus Torvalds는 지난 25 년 동안 리눅스를보다 효율적이고 사용자 친화적인 컴퓨팅 플랫폼으로 만들기 위해 끊임없이 노력하고 있습니다. 그의 창작물은 이제 다양한 사용자에게 서비스를 제공하는 많은 Linux 배포판 형태로 오픈 소스 애호가들에게 제공되고 있습니다.

Linux 및 오픈 소스 소프트웨어는 선택의 아이디어를 지원하며 이들의 원동력이 되었습니다. 그러나 시간이 지남에 따라 인터넷에는 데비안 및 우분투와 같은 기능을 기반으로 한 수많은 Linux 배포판들로 채워지게 되었습니다.

Linux 커널은 Google의 Android를 포함한 오픈 소스 운영 체제의 핵심입니다. Linux 창시자가 사용하는 운영 체제는 무엇일까요?

Linus는 자신이 소유 한 모든 장치에서 Fedora를 사용하기를 좋아한다는 것은 알려져있는 사실입니다. 하지만, 세계에서 가장 인기있는 오픈 소스 데스크탑 운영 체제인 Ubuntu 및 다른 사용자가 선호하는 데비안에 대한 그의 생각을 모를 수도 있습니다.

Linus Torvalds에게 데비안 :

Linus가 데비안을 설치하기 어려워 했다는 것은 재미있는 사실입니다. 실제로 그 일이 있은 후, 몇 년 후 2007년 인터뷰에서 그가 말했습니다.

“미안 하지만, 귀를 닫고 싶을지도 모릅니다. 저는 배포판 설치를 쉽게 해서 커널이 대부분인 내 삶을 이어나가고 싶습니다.”

Linus는 데비안을 "무의미한 연습"이라고 부릅니다. 배포의 중요한 점은 설치가 간단하고 쉬워야 한다는 것입니다.

우분투 리눅스에서 리누스 토발즈 :

또 다른 인터뷰에서 Linus는 Ubuntu Linux에 대해 이야기했습니다. 그는 데비안을 너무 기술적이라고 말하면서도, Windows 및 OS X 백그라운드에서 온 사용자에게 Linux를 친숙하게 만들어 준 Ubuntu에 감사했습니다. 여전히 그는 우분투보다 페도라를 선호합니다.

그가 말하길:

나는 몇년동안 우분투를 몇번 시도했는데, 대부분 우분투가 데비안을 사용할 수 있게 해 줬기 때문이었습니다.

지난 몇 년 동안 데비안은 설치를 더 쉽게하기 위해 노력해 왔습니다. 오늘날 데비안 설치 프로그램은 그래픽, 텍스트 또는 음성 합성 옵션을 제공하여 작업을 단순화했습니다.

반응형

'개발 > 리눅스' 카테고리의 다른 글

ansible - 자동화의 시작  (0) 2022.07.14
Gitlab-CE 업그레이드  (0) 2022.07.05
VIM | Surround.vim 사용하기  (0) 2020.07.09
LINUX | manjaro 설치후 할일  (0) 2020.05.29
LINUX | swap 용량 늘리기  (0) 2020.04.29

Vim 에디터를 사용하고 있다면, 필수로 사용해야 하는 플러그인이라고 생각된다. 괄호, HTML 태그 및 따옴표 같은 값을 몇번의 단축키를 통해서 입력할 수 있다.

설치

surround.vim in awesome-vim 에서 설치방법을 통해서 설치를 진행한다. 별도의 옵션을 설정할 필요없이 바로 사용할 수 있다.

surround.vim

학습 팁

우선, 플러그인 작동 발식을 이해합니다.

  • 감싸기(surround)(ys)
  • 삭제(delete)(ds)
  • 바꾸기(change)(cs)

그리고, 아래에 나와있는 예제를 따라 가세요. 기본 사항들이 이해가 된다면, 코딩에 직접 하시기 바랍니다.

빠르게 개선하기 위해서는 신중한 연습을 필요로 합니다. 매일 약한 부분(ex: 따옴표로 여러단어 추가)을 파악하고, 관련 예제들을 통해 작업하고, 더 많은 예제를 직접 작성 해 봅니다. 그리고, 반복적인 테스트를 진행하시기 바랍니다. 너무 많이 생각할 필요 없이 {motion}단축키를 입력하세요.

며칠동안 하루에 몇분이라도 작업을 한다면, surround.vim을 빠르게 사용할 수 있게 될 것입니다.

  Old text                  Command     New text ~
  "Hello *world!"           ds"         Hello world!
  [123+4*56]/2              cs])        (123+456)/2
  "Look ma, I'm *HTML!"     cs"<q>      <q>Look ma, I'm HTML!</q>
  if *x>3 {                 ysW(        if ( x>3 ) {
  my $str = *whee!;         vllllS'     my $str = 'whee!';

감싸기

한 단어 감싸기

I am happy.
I am "happy".

ysiw"
(ys: 감싸기; iw: 둘러싸고 싶은 단어 위에 커서가 위치한 상태의 전체 단어; ": "로 감싸기

한 줄 감싸기

I am happy; she is sad.
(I am happy; she is sad.)

yss)
(ys: 감싸기 추가; s: 한줄 선택; ) 한 줄을 괄호로 감싼다 )

Note: 만약 yss(로 입력을 하게 되면 괄호 사이에 공간이 추가 된다. ( I am happy; she is sad. )

태그로 단락 또는 한줄 감싸기

Hello World! How are you?
<p>Hello World! How are you?</p>

yss<p>

(yss: 감쌀(surround) 한줄을 선택; <p> 태그를 추가한다.)

다중 단어 감싸기

I am very very happy.
I am *very very* happy.

ys2aw*

(ys: 감싸기 추가; 2: 감쌀 단어의 숫자; aw: 단어 주위; *: *로 깜싼다)

다중 단어 태그로 감싸기

Hello World! How are you?
<h1>Hello World</h1>! How are you?

ys2aw<h1>

다중 단어 감싸기와 동일하다.

선택 영역 감싸기

The solution is x + y = z. You responded wrongly.
The solution is `x + y = z`. You responded wrongly.

veeeeeS`
커서를 단어 x에 위치한 상태로vVisual Mode로 들어 간 후, S 선택 영역을 `로 감싸기

제거

감싸기 삭제

"Hello World!"
Hello World

ds"
(ds: 감싸기 삭제; ": 쌍따옴표 삭제하기

감싼 태그 제거

<em><p>Hello World!</p></em>
Hello World!

dstdst
감싼 태그를 삭제한다. 커서가 안쪽에 있으면, 안쪽 부터 삭제
바깥에 커서가 위치하고 있으면, 바깥 쪽부터 제거한다.

변경

감싸기 변경

"Hello World!"
*Hello World!*

cs"*
(cs: 감싸기 변경; ": 변경 대상자; *: *로 변경)

태그 변경

<p>Hello World!</p>
<em>Hello World!</em>

cst
(cst: 감싸기 변경 태그; <em>: 새로운 태그명)

일반적인 예제

계산식에 괄호 추가하기

3 + 2 + 5 + 7 / 4    # 괄호가 없기에 계산 결과가 달라진다.
3 + 2 + 5 + 7 / 4    # 3에 커서를 위치한 상태에서 veeeeS)iprint
(3 + 2 + 5 + 7) / 4
(3 + 2 + 5 + 7) / 4
print((3 + 2 + 5 + 7) / 4)

메뉴얼 참조

surround.vim에서 기본으로 제공되고 있는 surround.txt에서도 많은 예문을 찾아 볼 수 있다. 이부분만 한번씩 따라해도 어떻게 사용하는 건지 감이 온다.

Old text에 포함되어 있는 *은 커서의 위치다.

  Old text                  Command     New text ~
  "Hello *world!"           ds"         Hello world!
  [123+4*56]/2              cs])        (123+456)/2
  "Look ma, I'm *HTML!"     cs"<q>      <q>Look ma, I'm HTML!</q>
  if *x>3 {                 ysW(        if ( x>3 ) {
  my $str = *whee!;         vllllS'     my $str = 'whee!';

삭제

  Old text                  Command     New text ~
  "Hello *world!"           ds"         Hello world!
  (123+4*56)/2              ds)         123+456/2
  <div>Yo!*</div>           dst         Yo!

변경

  Old text                  Command     New text ~
  "Hello *world!"           cs"'        'Hello world!'
  "Hello *world!"           cs"<q>      <q>Hello world!</q>
  (123+4*56)/2              cs)]        [123+456]/2
  (123+4*56)/2              cs)[        [ 123+456 ]/2
  <div>Yo!*</div>           cst<p>      <p>Yo!</p>
반응형

+ Recent posts