Обновление openSUSE Leap на следующий релиз

Обновляем систему до актуального состояния

sudo zypper up

После перезагрузки можно приступать к обновлению дистрибутива до нового релиза

Создаем резервную копию репозиториев на всякий случай

sudo cp -r /etc/zypp/repos.d/ /etc/zypp/repos.d.bak

Меняем версию релиза в репозиториях

sudo sed -i 's/15.1/$releasever/g' /etc/zypp/repos.d/*

Обновляем метаданные из новых репозиториев

sudo zypper --releasever 15.2 ref

Проверяем у каких репозиториев не обновились метаданные, и отключаем их, скорей всего там пока новый репозиторий не включен

sudo zypper mr $repo -d

ВАЖНО!!! Для того что бы избежать падения пакетного менеджера во время обновления, желательно использовать терминал мультиплексор, например tmux

sudo zypper in tmux

Создать новую сессию

tmux new-session -s update

Теперь само обновление дистрибутива

sudo zypper --releasever 15.2 dup

Если терминал или сессия пользователя упали, можно подключиться к ранее созданной сесии tmux в которой было запущено обновление

tmux attach -t update

Процесс обновления не будет нарушен или прерван.

После обновления перезагружаем ПК

Создание моста для KVM

Смотрим активные интерфейсы

1
nmcli con show --active

Создаем интерфейс br0

1
sudo nmcli con add ifname br0 type bridge con-name br0

Смотрим имя интерфейса который хотим использовать

1
ip a s

Создаем мост с нужной сетевой картой и отдаем интерфейсу br0

1
sudo nmcli con add type bridge-slave ifname enp3s0 master br0

Отключаем STP

1
sudo nmcli con modify br0 bridge.stp no

Смотрим что получилось

1
nmcli con show

Отключаем проброшенный интерфейс

Пример

1
sudo nmcli con down "Проводное соединение 1"

Запускаем интерфейс br0

1
sudo nmcli con up br0

Перезапускаем демон NM

1
sudo systemctl restart NetworkManager.service

Сеть должна заработать

Добавляем новый интерфейс в список сетей libvirt

Смотрим какие сети доступны

1
virsh net-list --all

Скорей всего будет доступна только сеть default с NAT

Создадим xml файл новой сети c с указанием ранее созданного интерфейса br0

1
2
3
4
5
6
7
cat > bridge.xml <<EOF
<network>
<name>bridge</name>
<forward mode="bridge"/>
<bridge name="br0"/>
</network>
EOF

Создадим сеть используя только что создыннй xml файл

1
sudo virsh net-define bridge.xml

Проверяем

1
sudo virsh net-list --all

Должна появиться еще одна только что созданная сеть bridge

Запускаем сеть

1
sudo virsh net-start bridge

Автозапуск сети

1
sudo virsh net-autostart bridge

Теперь в настройках сети у ВМ можно выбирать сеть bridge

Готово

Второй вариант

1
sudo nmcli con add type bridge ifname virbr0 ipv4.method shared ipv4.address 172.16.13.30/24

Разрешить

1
echo allow virbr0 | sudo tee -a /etc/qemu/bridge.conf

Готово

Твикаем систему при помощи tuned

Устанавливаем tuned если не установлен

1
sudo zypper in tuned

Запускаем демон

1
sudo systemctl enable --now tuned.service

Копируем профиль

1
sudo cp -R /usr/libexec/tuned/latency-performance /etc/tuned

Активируем скопированный профиль

1
sudo tuned-adm profile latency-performance

Перезапускаем сервис

1
sudo systemctl restart tuned

Проверяем активированный профиль

1
sudo tuned-adm list

Глядим в строку

1
Current active profile: latency-performance

Видим что профиль активен

Тюнинг vim

Устанавливаем Vundle

1
git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim

Создаем директорию для цветовых схем

1
mkdir -p ~/.vim/colors && cd ~/.vim/colors

Скачиваем тему, например papercolor

1
wget https://raw.githubusercontent.com/NLKNguyen/papercolor-theme/master/colors/PaperColor.vim

Создаем файл конфигурации .vimrc с таким содержимым

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"
" "
" __ _ _ _ __ ___ _ __ ___ "
" \ \ / / | '_ ` _ \| '__/ __| "
" \ V /| | | | | | | | | (__ "
" \_/ |_|_| |_| |_|_| \___| "
" "
" "
"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"

" Be iMproved
set nocompatible

"=====================================================
"" Vundle settings
"=====================================================
filetype off
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()

Plugin 'VundleVim/Vundle.vim' " let Vundle manage Vundle, required

"-------------------=== Code/Project navigation ===-------------
Plugin 'scrooloose/nerdtree' " Project and file navigation
Plugin 'majutsushi/tagbar' " Class/module browser
Plugin 'kien/ctrlp.vim' " Fast transitions on project files

"-------------------=== Other ===-------------------------------
Plugin 'bling/vim-airline' " Lean & mean status/tabline for vim
Plugin 'vim-airline/vim-airline-themes' " Themes for airline
Plugin 'Lokaltog/powerline' " Powerline fonts plugin
Plugin 'fisadev/FixedTaskList.vim' " Pending tasks list
Plugin 'rosenfeld/conque-term' " Consoles as buffers
Plugin 'tpope/vim-surround' " Parentheses, brackets, quotes, XML tags, and more
Plugin 'flazz/vim-colorschemes' " Colorschemes
Plugin 'NLKNguyen/papercolor-theme' " PaperColor Theme

"-------------------=== Snippets support ===--------------------
Plugin 'garbas/vim-snipmate' " Snippets manager
Plugin 'MarcWeber/vim-addon-mw-utils' " dependencies #1
Plugin 'tomtom/tlib_vim' " dependencies #2
Plugin 'honza/vim-snippets' " snippets repo

"-------------------=== Languages support ===-------------------
Plugin 'tpope/vim-commentary' " Comment stuff out
Plugin 'mitsuhiko/vim-sparkup' " Sparkup(XML/jinja/htlm-django/etc.) support
Plugin 'Rykka/riv.vim' " ReStructuredText plugin
Plugin 'Valloric/YouCompleteMe' " Autocomplete plugin

"-------------------=== Python ===-----------------------------
Plugin 'klen/python-mode' " Python mode (docs, refactor, lints...)
Plugin 'scrooloose/syntastic' " Syntax checking plugin for Vim

call vundle#end() " required
filetype on
filetype plugin on
filetype plugin indent on

"=====================================================
"" General settings
"=====================================================

"""""""""""" Start Powerline Settings """"""""""""""""

set guifont=Inconsolata\ for\ Powerline:h15
let g:Powerline_symbols = 'fancy'
set encoding=utf-8
set t_Co=256
set fillchars+=stl:\ ,stlnc:\
set term=xterm-256color
set termencoding=utf-8

if has("gui_running")
let s:uname = system("uname")
if s:uname == "Darwin\n"
set guifont=Source\ Code\ Pro\ for\ Powerline:h15
colorscheme PaperColor " set color scheme
endif
endif

""""""""""" END of PowerLine Settings """""""""""""""


syntax enable " syntax highlight

set t_Co=256 " set 256 colors
colorscheme PaperColor " set color scheme
set background=dark

set number " show line numbers
set ruler
set ttyfast " terminal acceleration

set tabstop=4 " 4 whitespaces for tabs visual presentation
set shiftwidth=4 " shift lines by 4 spaces
set smarttab " set tabs for a shifttabs logic
set expandtab " expand tabs into spaces
set autoindent " indent when moving to the next line while writing code

set cursorline " shows line under the cursor's line
set showmatch " shows matching part of bracket pairs (), [], {}

set enc=utf-8 " utf-8 by default

set nobackup " no backup files
set nowritebackup " only in case you don't want a backup file while editing
set noswapfile " no swap files

set backspace=indent,eol,start " backspace removes all (indents, EOLs, start) What is start?

set scrolloff=10 " let 10 lines before/after cursor during scroll

set clipboard=unnamed " use system clipboard

set exrc " enable usage of additional .vimrc files from working directory
set secure " prohibit .vimrc files to execute shell, create files, etc...

"=====================================================
"" Tabs / Buffers settings
"=====================================================
tab sball
set switchbuf=useopen
set laststatus=2
nmap <F9> :bprev<CR>
nmap <F10> :bnext<CR>
nmap <silent> <leader>q :SyntasticCheck # <CR> :bp <BAR> bd #<CR>

"" Search settings
"=====================================================
set incsearch " incremental search
set hlsearch " highlight search results

"=====================================================
"" AirLine settings
"=====================================================
let g:airline_theme='badwolf'
let g:airline#extensions#tabline#enabled=1
let g:airline#extensions#tabline#formatter='unique_tail'
let g:airline_powerline_fonts=1

"=====================================================
"" TagBar settings
"=====================================================
let g:tagbar_autofocus=0
let g:tagbar_width=42
autocmd BufEnter *.py :call tagbar#autoopen(0)
autocmd BufWinLeave *.py :TagbarClose

"=====================================================
"" NERDTree settings
"=====================================================
let NERDTreeIgnore=['\.pyc$', '\.pyo$', '__pycache__$'] " Ignore files in NERDTree
let NERDTreeWinSize=40
autocmd VimEnter * if !argc() | NERDTree | endif " Load NERDTree only if vim is run without arguments
nmap " :NERDTreeToggle<CR>

"=====================================================
"" SnipMate settings
"=====================================================
let g:snippets_dir='~/.vim/vim-snippets/snippets'

"=====================================================
"" Riv.vim settings
"=====================================================
let g:riv_disable_folding=1

"=====================================================
"" Python settings
"=====================================================

" omnicomplete
set completeopt-=preview " remove omnicompletion dropdown

" python executables for different plugins
let g:pymode_python='python'
let g:syntastic_python_python_exec='python'

" rope
let g:pymode_rope=0
let g:pymode_rope_completion=0
let g:pymode_rope_complete_on_dot=0
let g:pymode_rope_auto_project=0
let g:pymode_rope_enable_autoimport=0
let g:pymode_rope_autoimport_generate=0
let g:pymode_rope_guess_project=0

" documentation
let g:pymode_doc=0
let g:pymode_doc_key='K'

" lints
let g:pymode_lint=0

" virtualenv
let g:pymode_virtualenv=1

" breakpoints
let g:pymode_breakpoint=1
let g:pymode_breakpoint_key='<leader>b'

" syntax highlight
let g:pymode_syntax=1
let g:pymode_syntax_slow_sync=1
let g:pymode_syntax_all=1
let g:pymode_syntax_print_as_function=g:pymode_syntax_all
let g:pymode_syntax_highlight_async_await=g:pymode_syntax_all
let g:pymode_syntax_highlight_equal_operator=g:pymode_syntax_all
let g:pymode_syntax_highlight_stars_operator=g:pymode_syntax_all
let g:pymode_syntax_highlight_self=g:pymode_syntax_all
let g:pymode_syntax_indent_errors=g:pymode_syntax_all
let g:pymode_syntax_string_formatting=g:pymode_syntax_all
let g:pymode_syntax_space_errors=g:pymode_syntax_all
let g:pymode_syntax_string_format=g:pymode_syntax_all
let g:pymode_syntax_string_templates=g:pymode_syntax_all
let g:pymode_syntax_doctests=g:pymode_syntax_all
let g:pymode_syntax_builtin_objs=g:pymode_syntax_all
let g:pymode_syntax_builtin_types=g:pymode_syntax_all
let g:pymode_syntax_highlight_exceptions=g:pymode_syntax_all
let g:pymode_syntax_docstrings=g:pymode_syntax_all

" highlight 'long' lines (>= 80 symbols) in python files
augroup vimrc_autocmds
autocmd!
autocmd FileType python,rst,c,cpp highlight Excess ctermbg=DarkGrey guibg=Black
autocmd FileType python,rst,c,cpp match Excess /\%81v.*/
autocmd FileType python,rst,c,cpp set nowrap
autocmd FileType python,rst,c,cpp set colorcolumn=80
augroup END

" code folding
let g:pymode_folding=0

" pep8 indents
let g:pymode_indent=1

" code running
let g:pymode_run=1
let g:pymode_run_bind='<F5>'

" syntastic
let g:syntastic_always_populate_loc_list=1
let g:syntastic_auto_loc_list=1
let g:syntastic_enable_signs=1
let g:syntastic_check_on_wq=0
let g:syntastic_aggregate_errors=1
let g:syntastic_loc_list_height=5
let g:syntastic_error_symbol='X'
let g:syntastic_style_error_symbol='X'
let g:syntastic_warning_symbol='x'
let g:syntastic_style_warning_symbol='x'
let g:syntastic_python_checkers=['flake8', 'pydocstyle', 'python']

" YouCompleteMe
let g:ycm_global_ycm_extra_conf='~/.vim/ycm_extra_conf.py'
let g:ycm_confirm_extra_conf=0
nmap <leader>g :YcmCompleter GoTo<CR>
nmap <leader>d :YcmCompleter GoToDefinition<CR>

GDB

Устанавливаем сам отладчик gdb

1
sudo zypper in gdb

Запускаем отладчик и указываем полный путь к программе которую нужно дебажить

1
2
3
4
5
gdb /usr/bin/foo-bar 2>&1 | tee ~/backtrace.log
handle SIGPIPE nostop noprint
catch throw
catch signal
run

Скорей всего от вас потребуется естановить дополнительные debug пакеты, предварительно необходимо подключить Debug репозиторий

1
sudo zypper mr -e repo-debug

За тем выполнить установку требуемых пакетов, gdb выведет список нужных, установить их можно одной командой, например

1
sudo zypper install -C "debuginfo(build-id)=30d3fe18ba6b3ae2f21731f7d809959f88caf6f5" "debuginfo(build-id)=3ee787f26fcf4bbf8768e660695809a2b60712bf"

После установки снова выполнить

1
run

Дождаться сегфолта

1
2
3
bt
l
quit

Strace log можно получить выполнив команду в терминале

1
strace -o ~/trace.log /usr/bin/foo-bar

certbot systemd

Создаем сервис

1
sudo vi /usr/lib/systemd/system/certbot.service

Содержимое

1
2
3
4
5
6
7
8
9
[Unit]
Description=Certificate auto-renewal

[Service]
Type=simple
ExecStart=/usr/bin/certbot renew --quiet --nginx

[Install]
WantedBy=multi-user.target

Создаем таймер

1
sudo vi /usr/lib/systemd/system/certbot.timer

Содержимое

1
2
3
4
5
6
7
8
9
10
11
[Unit]
Description=Certificate auto-renewal
After=suspend.target

[Timer]
OnBootSec=3 min
OnCalendar=daily
Persistent=true

[Install]
WantedBy=timers.target

Включаем и запускаем таймер

1
sudo systemctl enable certbot.timer && sudo systemctl start certbot.timer

Теперь раз в сутки таймер будет запрашивать обновление сертификатов.

lpadmin

Добавляем сетевые принтеры при помощи lpadmin

Смотрим URI

1
sudo lpinfo -v

Копируем PPD в /usr/share/cups/model

Добавляем

1
sudo lpadmin -p Kyocera_ECOSYS_M2835dw -E -v socket://172.16.13.5 -P "/usr/share/cups/model/Kyocera ECOSYS M2835dw.PPD"