X7ROOT File Manager
Current Path:
/usr/bin
usr
/
bin
/
📁
..
📄
2to3
(106 B)
📄
2to3-3.6
(106 B)
📄
GET
(15.84 KB)
📄
HEAD
(15.84 KB)
📄
Magick-config
(1.43 KB)
📄
MagickCore-config
(1.56 KB)
📄
MagickWand-config
(1.56 KB)
📄
Mail
(408.89 KB)
📄
POST
(15.84 KB)
📄
Wand-config
(1.42 KB)
📄
[
(53.67 KB)
📄
ab
(72.63 KB)
📄
ac
(33.07 KB)
📄
aclocal
(35.62 KB)
📄
aclocal-1.16
(35.62 KB)
📄
acyclic
(12.41 KB)
📄
addr2line
(33.41 KB)
📄
agentxtrap
(24.53 KB)
📄
alias
(29 B)
📄
alt-mysql-reconfigure
(21.16 KB)
📄
alt-php-mysql-reconfigure
(21.16 KB)
📄
alt-php-mysql-reconfigure.py
(21.16 KB)
📄
animate
(11.84 KB)
📄
apropos
(54.04 KB)
📄
ar
(61.96 KB)
📄
arch
(37.41 KB)
📄
aria_chk
(4.53 MB)
📄
aria_dump_log
(4.33 MB)
📄
aria_ftdump
(4.34 MB)
📄
aria_pack
(4.37 MB)
📄
aria_read_log
(4.49 MB)
📄
arpaname
(11.82 KB)
📄
as
(889.91 KB)
📄
aspell
(159.5 KB)
📄
at
(57.33 KB)
📄
atop
(284.66 KB)
📄
atopconvert
(24.66 KB)
📄
atopd
(922 B)
📄
atopsar
(284.66 KB)
📄
atq
(57.33 KB)
📄
atrm
(57.33 KB)
📄
attr
(13.06 KB)
📄
aulast
(20.58 KB)
📄
aulastlog
(12.44 KB)
📄
ausyscall
(12.27 KB)
📄
authselect
(41.13 KB)
📄
autoconf
(14.42 KB)
📄
autoheader
(8.33 KB)
📄
autom4te
(31.43 KB)
📄
automake
(251.9 KB)
📄
automake-1.16
(251.9 KB)
📄
autopoint
(25.95 KB)
📄
autoreconf
(20.57 KB)
📄
autoscan
(16.72 KB)
📄
autoupdate
(33.08 KB)
📄
auvirt
(32.73 KB)
📄
awk
(669.77 KB)
📄
b2sum
(57.76 KB)
📄
base32
(41.55 KB)
📄
base64
(41.56 KB)
📄
basename
(37.49 KB)
📄
bash
(1.1 MB)
📄
bashbug
(7.18 KB)
📄
bashbug-64
(7.18 KB)
📄
batch
(137 B)
📄
bc
(94.98 KB)
📄
bcomps
(20.62 KB)
📄
bdftopcf
(45.4 KB)
📄
bg
(26 B)
📄
bind9-config
(3.33 KB)
📄
bison
(437.72 KB)
📄
blkiomon
(25.7 KB)
📄
blkparse
(51.39 KB)
📄
blkrawverify
(16.4 KB)
📄
blktrace
(43.07 KB)
📄
bno_plot.py
(3.47 KB)
📄
bond2team
(22.74 KB)
📄
bootctl
(45.15 KB)
📄
brotli
(739.2 KB)
📄
btrace
(891 B)
📄
btrecord
(17.39 KB)
📄
btreplay
(29.72 KB)
📄
btt
(80.84 KB)
📄
bunzip2
(36.86 KB)
📄
busctl
(77.26 KB)
📄
bzcat
(36.86 KB)
📄
bzcmp
(2.08 KB)
📄
bzdiff
(2.08 KB)
📄
bzegrep
(1.64 KB)
📄
bzfgrep
(1.64 KB)
📄
bzgrep
(1.64 KB)
📄
bzip2
(36.86 KB)
📄
bzip2recover
(16.44 KB)
📄
bzless
(1.23 KB)
📄
bzmore
(1.23 KB)
📄
c++
(1.21 MB)
📄
c++filt
(28.89 KB)
📄
c89
(224 B)
📄
c99
(215 B)
📄
ca-legacy
(1.61 KB)
📄
cairo-sphinx
(69.71 KB)
📄
cal
(65.98 KB)
📄
captoinfo
(85.31 KB)
📄
cat
(37.54 KB)
📄
catchsegv
(3.21 KB)
📄
catman
(41.45 KB)
📄
cc
(1.21 MB)
📄
ccomps
(24.72 KB)
📄
cd
(26 B)
📄
centrino-decode
(11.27 KB)
📄
certutil
(195.26 KB)
📄
chacl
(16.36 KB)
📄
chage
(77.68 KB)
📄
chardetect
(400 B)
📄
chattr
(16.41 KB)
📄
chcon
(70.43 KB)
📄
chfn
(32.89 KB)
📄
chgrp
(66.35 KB)
📄
chmem
(45.47 KB)
📄
chmod
(62.29 KB)
📄
chown
(70.39 KB)
📄
chronyc
(127.6 KB)
📄
chrt
(37.18 KB)
📄
chsh
(24.71 KB)
📄
chvt
(12.53 KB)
📄
cifsiostat
(41.35 KB)
📄
circo
(12.26 KB)
📄
cksum
(37.46 KB)
📄
cl-linksafe-reconfigure
(4.83 KB)
📄
clear
(12.54 KB)
📄
cluster
(518.33 KB)
📄
cmp
(103.76 KB)
📄
cmsutil
(118.27 KB)
📄
col
(29 KB)
📄
colcrt
(16.48 KB)
📄
colrm
(24.88 KB)
📄
column
(49.47 KB)
📄
comm
(41.63 KB)
📄
command
(31 B)
📄
compare
(11.85 KB)
📄
compile_et
(1.31 KB)
📄
composite
(11.84 KB)
📄
config_data
(6.97 KB)
📄
conjure
(11.84 KB)
📄
convert
(11.84 KB)
📄
coredumpctl
(44.91 KB)
📄
corelist
(14.64 KB)
📄
cp
(148.05 KB)
📄
cpan
(8.17 KB)
📄
cpan-mirrors
(4.19 KB)
📄
cpapi1
(3.18 MB)
📄
cpapi2
(3.18 MB)
📄
cpapi3
(3.18 MB)
📄
cpio
(159.8 KB)
📄
cpp
(1.21 MB)
📄
cpupower
(66.91 KB)
📄
crb
(2.58 KB)
📄
crc32
(1.02 KB)
📄
crlutil
(134.74 KB)
📄
cronnext
(49.8 KB)
📄
crontab
(61.67 KB)
📄
csplit
(53.76 KB)
📄
csslint-0.6
(24.56 KB)
📄
curl
(230.09 KB)
📄
cut
(49.59 KB)
📄
cvtsudoers
(284.13 KB)
📄
cxpm
(29.11 KB)
📄
date
(106.03 KB)
📄
db_archive
(12.45 KB)
📄
db_checkpoint
(16.48 KB)
📄
db_deadlock
(16.48 KB)
📄
db_dump
(16.51 KB)
📄
db_dump185
(69.55 KB)
📄
db_hotbackup
(20.49 KB)
📄
db_load
(28.61 KB)
📄
db_log_verify
(16.52 KB)
📄
db_printlog
(33.4 KB)
📄
db_recover
(16.51 KB)
📄
db_replicate
(16.49 KB)
📄
db_stat
(16.48 KB)
📄
db_tuner
(24.55 KB)
📄
db_upgrade
(12.45 KB)
📄
db_verify
(16.46 KB)
📄
dbilogstrip
(1.35 KB)
📄
dbiprof
(6.06 KB)
📄
dbus-binding-tool
(110.43 KB)
📄
dbus-cleanup-sockets
(16.38 KB)
📄
dbus-daemon
(239.76 KB)
📄
dbus-monitor
(28.63 KB)
📄
dbus-run-session
(15.95 KB)
📄
dbus-send
(28.6 KB)
📄
dbus-test-tool
(24.66 KB)
📄
dbus-update-activation-environment
(16.47 KB)
📄
dbus-uuidgen
(12.37 KB)
📄
dc
(53.02 KB)
📄
dd
(78.05 KB)
📄
deallocvt
(12.54 KB)
📄
debuginfo-install
(3.62 KB)
📄
debuginfod-find
(16.47 KB)
📄
delv
(42.46 KB)
📄
desktop-file-edit
(95.45 KB)
📄
desktop-file-install
(95.45 KB)
📄
desktop-file-validate
(83.61 KB)
📄
df
(91.16 KB)
📄
diff
(268.01 KB)
📄
diff3
(128.6 KB)
📄
diffimg
(12.27 KB)
📄
dig
(162.19 KB)
📄
dijkstra
(16.71 KB)
📄
dir
(139.97 KB)
📄
dircolors
(49.63 KB)
📄
dirmngr
(580.16 KB)
📄
dirmngr-client
(120.12 KB)
📄
dirname
(33.44 KB)
📄
display
(11.84 KB)
📄
dltest
(13.05 KB)
📄
dmesg
(77.88 KB)
📄
dnf
(2.05 KB)
📄
dnf-3
(2.05 KB)
📄
dnsdomainname
(21.16 KB)
📄
dnstap-read
(20.43 KB)
📄
domainname
(21.16 KB)
📄
dos2unix
(58.54 KB)
📄
dot
(12.26 KB)
📄
dot2gxl
(41.3 KB)
📄
dotty
(2.04 KB)
📄
doveadm
(983.31 KB)
📄
doveconf
(228.41 KB)
📄
dovecot-sysreport
(5.8 KB)
📄
dpkg
(316.17 KB)
📄
dpkg-deb
(165.5 KB)
📄
dpkg-divert
(157.75 KB)
📄
dpkg-maintscript-helper
(20.67 KB)
📄
dpkg-query
(165.84 KB)
📄
dpkg-realpath
(4.05 KB)
📄
dpkg-split
(132.39 KB)
📄
dpkg-statoverride
(66.41 KB)
📄
dpkg-trigger
(87.66 KB)
📄
dracut
(67.56 KB)
📄
dsync
(983.31 KB)
📄
dtrace
(17.39 KB)
📄
du
(107.1 KB)
📄
dumpkeys
(169.88 KB)
📄
dumpsexp
(16.43 KB)
📄
dwp
(2.13 MB)
📄
dwz
(167.64 KB)
📄
ea-php74
(6.09 MB)
📄
ea-php74-pear
(383 B)
📄
ea-php74-pecl
(299 B)
📄
ea-php80
(7.61 MB)
📄
ea-php80-pear
(383 B)
📄
ea-php80-pecl
(299 B)
📄
ea-php81
(7.72 MB)
📄
ea-php81-pear
(383 B)
📄
ea-php81-pecl
(299 B)
📄
ea-php82
(7.77 MB)
📄
ea-php82-pear
(383 B)
📄
ea-php82-pecl
(299 B)
📄
easy_install-2
(234 B)
📄
easy_install-2.7
(234 B)
📄
easy_install-3
(246 B)
📄
easy_install-3.6
(246 B)
📄
echo
(37.43 KB)
📄
ed
(57.28 KB)
📄
edgepaint
(420.79 KB)
📄
egrep
(28 B)
📄
eject
(57.78 KB)
📄
elfedit
(33.3 KB)
📄
elinks
(1.55 MB)
📄
enc2xs
(40.97 KB)
📄
encguess
(2.91 KB)
📄
enchant
(21.08 KB)
📄
enchant-2
(20.25 KB)
📄
enchant-lsmod
(13.09 KB)
📄
enchant-lsmod-2
(12.35 KB)
📄
env
(41.43 KB)
📄
envml
(4.1 KB)
📄
envsubst
(48.99 KB)
📄
eps2eps
(639 B)
📄
eqn
(232.16 KB)
📄
event_rpcgen.py
(54.26 KB)
📄
evmctl
(62.54 KB)
📄
ex
(1.13 MB)
📄
expand
(41.66 KB)
📄
expr
(49.65 KB)
📄
factor
(86.05 KB)
📄
fallocate
(28.96 KB)
📄
false
(33.39 KB)
📄
fc
(26 B)
📄
fc-cache
(132 B)
📄
fc-cache-64
(20.35 KB)
📄
fc-cat
(16.35 KB)
📄
fc-conflist
(12.25 KB)
📄
fc-list
(12.25 KB)
📄
fc-match
(16.26 KB)
📄
fc-pattern
(12.26 KB)
📄
fc-query
(12.24 KB)
📄
fc-scan
(12.26 KB)
📄
fc-validate
(16.26 KB)
📄
fdp
(12.26 KB)
📄
fg
(26 B)
📄
fgconsole
(12.55 KB)
📄
fgrep
(28 B)
📄
filan
(94.72 KB)
📄
file
(24.68 KB)
📄
fincore
(33.03 KB)
📄
find
(223.3 KB)
📄
find-repos-of-install
(3.62 KB)
📄
findmnt
(70.6 KB)
📄
fips-finish-install
(1.29 KB)
📄
fips-mode-setup
(3.91 KB)
📄
firewall-cmd
(139.6 KB)
📄
firewall-offline-cmd
(120.73 KB)
📄
flex
(428.45 KB)
📄
flex++
(428.45 KB)
📄
flock
(33.2 KB)
📄
fmt
(45.57 KB)
📄
fold
(41.48 KB)
📄
fonttosfnt
(41.18 KB)
📄
fprintd-delete
(77.29 KB)
📄
fprintd-enroll
(85.88 KB)
📄
fprintd-list
(77.27 KB)
📄
fprintd-verify
(81.38 KB)
📄
free
(20.79 KB)
📄
freetype-config
(4.31 KB)
📄
fribidi
(21.14 KB)
📄
ftp
(101.2 KB)
📄
funzip
(36.63 KB)
📄
g++
(1.21 MB)
📄
g13
(212.02 KB)
📄
galera_new_cluster
(917 B)
📄
galera_recovery
(3.29 KB)
📄
gapplication
(20.45 KB)
📄
garb-systemd
(1.2 KB)
📄
garbd
(1.65 MB)
📄
gawk
(669.77 KB)
📄
gc
(16.64 KB)
📄
gcc
(1.21 MB)
📄
gcc-ar
(36.66 KB)
📄
gcc-nm
(36.66 KB)
📄
gcc-ranlib
(36.66 KB)
📄
gcov
(1.31 MB)
📄
gcov-dump
(570.88 KB)
📄
gcov-tool
(607.75 KB)
📄
gdbm_dump
(21.05 KB)
📄
gdbm_load
(25.31 KB)
📄
gdbmtool
(111.57 KB)
📄
gdbus
(48.72 KB)
📄
gdk-pixbuf-query-loaders-64
(15.93 KB)
📄
gdk-pixbuf-thumbnailer
(20.45 KB)
📄
gdlib-config
(2.79 KB)
📄
gencat
(24.84 KB)
📄
genl-ctrl-list
(12.04 KB)
📄
geqn
(232.16 KB)
📄
getconf
(32.46 KB)
📄
getent
(33.13 KB)
📄
getfacl
(25.38 KB)
📄
getfattr
(23.03 KB)
📄
getkeycodes
(12.54 KB)
📄
getopt
(20.52 KB)
📄
getopts
(31 B)
📄
gettext
(48.97 KB)
📄
gettext.sh
(4.52 KB)
📄
gettextize
(42.69 KB)
📄
ghostscript
(12.35 KB)
📄
gio
(85.22 KB)
📄
gio-querymodules-64
(16.3 KB)
📄
git
(26.38 MB)
📄
git-receive-pack
(26.38 MB)
📄
git-shell
(15.79 MB)
📄
git-upload-archive
(26.38 MB)
📄
git-upload-pack
(26.38 MB)
📄
glib-compile-schemas
(48.85 KB)
📄
gmake
(235.32 KB)
📄
gml2gv
(41.23 KB)
📄
gneqn
(908 B)
📄
gnroff
(3.23 KB)
📄
gpasswd
(82.16 KB)
📄
gpg
(1.04 MB)
📄
gpg-agent
(419.29 KB)
📄
gpg-connect-agent
(165.3 KB)
📄
gpg-error
(34.16 KB)
📄
gpg-error-config
(2.26 KB)
📄
gpg-wks-server
(206.69 KB)
📄
gpg-zip
(3.44 KB)
📄
gpg2
(1.04 MB)
📄
gpgconf
(176.09 KB)
📄
gpgme-json
(85.68 KB)
📄
gpgparsemail
(28.74 KB)
📄
gpgrt-config
(2.26 KB)
📄
gpgsm
(514.45 KB)
📄
gpgsplit
(87.02 KB)
📄
gpgv
(451.58 KB)
📄
gpgv2
(451.58 KB)
📄
gpic
(293.84 KB)
📄
gpio-event-mon
(14.96 KB)
📄
gpio-hammer
(14.96 KB)
📄
gprof
(103.36 KB)
📄
gr2fonttest
(29.95 KB)
📄
graphml2gv
(20.65 KB)
📄
grep
(193.63 KB)
📄
groff
(124.92 KB)
📄
grops
(191.14 KB)
📄
grotty
(141.9 KB)
📄
groups
(37.47 KB)
📄
grub2-editenv
(448.09 KB)
📄
grub2-file
(928.48 KB)
📄
grub2-fstest
(1.15 MB)
📄
grub2-glue-efi
(279.35 KB)
📄
grub2-kbdcomp
(1.63 KB)
📄
grub2-menulst2cfg
(262.64 KB)
📄
grub2-mkfont
(312.09 KB)
📄
grub2-mkimage
(431.35 KB)
📄
grub2-mklayout
(285.46 KB)
📄
grub2-mknetdir
(485.73 KB)
📄
grub2-mkpasswd-pbkdf2
(291.84 KB)
📄
grub2-mkrelpath
(279.23 KB)
📄
grub2-mkrescue
(1.12 MB)
📄
grub2-mkstandalone
(594.47 KB)
📄
grub2-render-label
(937.11 KB)
📄
grub2-script-check
(315.96 KB)
📄
grub2-syslinux2cfg
(861.64 KB)
📄
gs
(12.35 KB)
📄
gsettings
(28.61 KB)
📄
gsnd
(277 B)
📄
gsoelim
(42.55 KB)
📄
gss-client
(24.56 KB)
📄
gtar
(448.99 KB)
📄
gtbl
(154.61 KB)
📄
gtk-query-immodules-2.0-64
(16.29 KB)
📄
gtk-update-icon-cache
(33.03 KB)
📄
gtroff
(805.02 KB)
📄
gunzip
(2.29 KB)
📄
gv2gml
(24.7 KB)
📄
gv2gxl
(41.3 KB)
📄
gvcolor
(46.9 KB)
📄
gvgen
(24.8 KB)
📄
gvmap
(526.31 KB)
📄
gvmap.sh
(2.14 KB)
📄
gvpack
(460.59 KB)
📄
gvpr
(7.83 KB)
📄
gxl2dot
(41.3 KB)
📄
gxl2gv
(41.3 KB)
📄
gzexe
(6.23 KB)
📄
gzip
(94.67 KB)
📄
h2ph
(28.69 KB)
📄
h2xs
(59.44 KB)
📄
hash
(28 B)
📄
head
(45.58 KB)
📄
hexdump
(57.5 KB)
📄
hmac256
(16.86 KB)
📄
host
(142.3 KB)
📄
hostid
(33.41 KB)
📄
hostname
(21.16 KB)
📄
hostnamectl
(20.83 KB)
📄
htdbm
(31.72 KB)
📄
htdigest
(21.71 KB)
📄
html2text
(406 B)
📄
htop
(304.73 KB)
📄
htpasswd
(31.55 KB)
📄
httxt2dbm
(21.1 KB)
📄
hunspell
(144.7 KB)
📄
i386
(20.76 KB)
📄
iceauth
(41.87 KB)
📄
iconv
(61.44 KB)
📄
id
(45.52 KB)
📄
identify
(11.84 KB)
📄
idiag-socket-details
(12.09 KB)
📄
idle2
(93 B)
📄
idle2.7
(93 B)
📄
idn
(39.41 KB)
📄
ifnames
(4.03 KB)
📄
iio_event_monitor
(22.98 KB)
📄
iio_generic_buffer
(26.98 KB)
📄
import
(11.84 KB)
📄
imunify-agent-proxy
(6.99 MB)
📄
imunify-antivirus
(1 KB)
📄
imunify-service
(1020 B)
📄
imunify360-agent
(1 KB)
📄
imunify360-command-wrapper
(8.4 KB)
📄
info
(249.89 KB)
📄
infocmp
(61.05 KB)
📄
infotocap
(85.31 KB)
📄
innochecksum
(3.59 MB)
📄
install
(156.25 KB)
📄
instmodsh
(4.1 KB)
📄
intel-speed-select
(93.02 KB)
📄
ionice
(28.98 KB)
📄
iostat
(57.69 KB)
📄
ipcalc
(46.08 KB)
📄
ipcmk
(29.14 KB)
📄
ipcrm
(28.99 KB)
📄
ipcs
(53.39 KB)
📄
isc-config.sh
(3.33 KB)
📄
isosize
(24.88 KB)
📄
ispell
(988 B)
📄
isql
(37.29 KB)
📄
iusql
(29.68 KB)
📄
jobs
(28 B)
📄
join
(53.77 KB)
📄
journalctl
(76.99 KB)
📄
json_pp
(4.19 KB)
📄
json_reformat
(16.55 KB)
📄
json_verify
(12.27 KB)
📄
json_xs
(6.84 KB)
📄
kbd_mode
(12.55 KB)
📄
kbdinfo
(16.56 KB)
📄
kbdrate
(16.45 KB)
📄
kbxutil
(177.32 KB)
📄
kdumpctl
(32.93 KB)
📄
kernel-install
(4.41 KB)
📄
keyctl
(36.82 KB)
📄
kill
(37.27 KB)
📄
killall
(29.77 KB)
📄
kmod
(159.95 KB)
📄
krb5-config
(6.98 KB)
📄
kvm_stat
(60.85 KB)
📄
last
(49.23 KB)
📄
lastb
(49.23 KB)
📄
lastcomm
(37.8 KB)
📄
lastlog
(20.62 KB)
📄
lchfn
(20.35 KB)
📄
lchsh
(16.35 KB)
📄
ld
(1.71 MB)
📄
ld.bfd
(1.71 MB)
📄
ld.gold
(2.35 MB)
📄
ld.so
(1.05 MB)
📄
ldd
(5.31 KB)
📄
lefty
(304.52 KB)
📄
less
(173.76 KB)
📄
lessecho
(12.4 KB)
📄
lesskey
(21.99 KB)
📄
lesspipe.sh
(3.07 KB)
📄
lex
(428.45 KB)
📄
lexgrog
(93.7 KB)
📄
libgcrypt-config
(3.84 KB)
📄
libnetcfg
(15.41 KB)
📄
libpng-config
(2.33 KB)
📄
libpng16-config
(2.33 KB)
📄
libtool
(359.11 KB)
📄
libtoolize
(126.17 KB)
📄
libwmf-fontmap
(13.03 KB)
📄
link
(33.41 KB)
📄
links
(1.55 MB)
📄
linux-boot-prober
(5.85 KB)
📄
linux32
(20.76 KB)
📄
linux64
(20.76 KB)
📄
ln
(70.57 KB)
📄
lnav
(3.57 MB)
📄
lneato
(1.51 KB)
📄
loadkeys
(210.53 KB)
📄
loadunimap
(29.03 KB)
📄
locale
(56.45 KB)
📄
localectl
(28.86 KB)
📄
localedef
(307.47 KB)
📄
locate
(47.41 KB)
📄
logger
(49.98 KB)
📄
login
(40.96 KB)
📄
loginctl
(57.28 KB)
📄
logname
(33.42 KB)
📄
logresolve
(21.45 KB)
📄
look
(16.45 KB)
📄
ls
(139.97 KB)
📄
lsattr
(11.93 KB)
📄
lsblk
(90.13 KB)
📄
lscpu
(81.7 KB)
📄
lsgpio
(15.06 KB)
📄
lsiio
(22.98 KB)
📄
lsinitrd
(8.68 KB)
📄
lsipc
(73.74 KB)
📄
lslocks
(37.53 KB)
📄
lslogins
(65.6 KB)
📄
lsmcli
(954 B)
📄
lsmd
(24.88 KB)
📄
lsmem
(45.34 KB)
📄
lsns
(49.28 KB)
📄
lsof
(175.4 KB)
📄
lsphp
(937 B)
📄
lsscsi
(86.01 KB)
📄
lsusb
(244.14 KB)
📄
lsusb.py
(14.89 KB)
📄
lua
(20.45 KB)
📄
luac
(152.77 KB)
📄
lwp-download
(10.05 KB)
📄
lwp-dump
(2.65 KB)
📄
lwp-mirror
(2.36 KB)
📄
lwp-request
(15.84 KB)
📄
lynx
(1.84 MB)
📄
lzcat
(82.09 KB)
📄
lzcmp
(6.48 KB)
📄
lzdiff
(6.48 KB)
📄
lzegrep
(5.76 KB)
📄
lzfgrep
(5.76 KB)
📄
lzgrep
(5.76 KB)
📄
lzless
(1.76 KB)
📄
lzma
(82.09 KB)
📄
lzmadec
(16.48 KB)
📄
lzmainfo
(12.36 KB)
📄
lzmore
(2.11 KB)
📄
m4
(185.56 KB)
📄
mac2unix
(58.54 KB)
📄
mail
(408.89 KB)
📄
mailx
(408.89 KB)
📄
make
(235.32 KB)
📄
make-dummy-cert
(610 B)
📄
makedb
(24.84 KB)
📄
man
(112.52 KB)
📄
mandb
(134.52 KB)
📄
manpath
(33.42 KB)
📄
mapscrn
(24.84 KB)
📄
mariadb
(4.34 MB)
📄
mariadb-access
(109.34 KB)
📄
mariadb-admin
(3.88 MB)
📄
mariadb-binlog
(4.14 MB)
📄
mariadb-check
(3.88 MB)
📄
mariadb-config
(12.2 KB)
📄
mariadb-conv
(3.59 MB)
📄
mariadb-convert-table-format
(4.12 KB)
📄
mariadb-dump
(3.96 MB)
📄
mariadb-dumpslow
(8.05 KB)
📄
mariadb-embedded
(22.6 MB)
📄
mariadb-find-rows
(3.21 KB)
📄
mariadb-fix-extensions
(1.22 KB)
📄
mariadb-hotcopy
(34.15 KB)
📄
mariadb-import
(3.87 MB)
📄
mariadb-install-db
(22.46 KB)
📄
mariadb-plugin
(3.57 MB)
📄
mariadb-secure-installation
(13.49 KB)
📄
mariadb-service-convert
(2.45 KB)
📄
mariadb-setpermission
(17.56 KB)
📄
mariadb-show
(3.87 MB)
📄
mariadb-slap
(3.89 MB)
📄
mariadb-tzinfo-to-sql
(3.57 MB)
📄
mariadb-upgrade
(4 MB)
📄
mariadb-waitpid
(3.55 MB)
📄
mariadb_config
(12.2 KB)
📄
mariadbd-multi
(26.71 KB)
📄
mariadbd-safe
(30.42 KB)
📄
mariadbd-safe-helper
(3.52 MB)
📄
mc
(1.3 MB)
📄
mcdiff
(1.3 MB)
📄
mcedit
(1.3 MB)
📄
mcookie
(33.26 KB)
📄
mcpp
(9.02 KB)
📄
mcview
(1.3 MB)
📄
md5sum
(45.62 KB)
📄
mdig
(48.52 KB)
📄
memstrack
(83.78 KB)
📄
mesg
(16.36 KB)
📄
mkdir
(82.79 KB)
📄
mkfifo
(66.56 KB)
📄
mkfontdir
(65 B)
📄
mkfontscale
(41.59 KB)
📄
mkinitrd
(6.43 KB)
📄
mknod
(70.55 KB)
📄
mktemp
(45.73 KB)
📄
mm2gv
(90.53 KB)
📄
mmdblookup
(16.74 KB)
📄
modulecmd
(384.75 KB)
📄
modulemd-validator
(24.96 KB)
📄
modutil
(177.2 KB)
📄
mogrify
(11.84 KB)
📄
montage
(11.84 KB)
📄
more
(44.94 KB)
📄
mount
(49.15 KB)
📄
mountpoint
(16.48 KB)
📄
mpicalc
(20.38 KB)
📄
mpstat
(53.51 KB)
📄
msgattrib
(25.58 KB)
📄
msgcat
(25.55 KB)
📄
msgcmp
(26.12 KB)
📄
msgcomm
(25.55 KB)
📄
msgconv
(21.55 KB)
📄
msgen
(21.55 KB)
📄
msgexec
(21.55 KB)
📄
msgfilter
(34.53 KB)
📄
msgfmt
(90.3 KB)
📄
msgfmt2.7.py
(6.33 KB)
📄
msgfmt2.py
(6.33 KB)
📄
msggrep
(43.6 KB)
📄
msginit
(67.85 KB)
📄
msgmerge
(71.48 KB)
📄
msgunfmt
(35.8 KB)
📄
msguniq
(25.56 KB)
📄
msql2mysql
(1.41 KB)
📄
multitail
(329.2 KB)
📄
mv
(144.03 KB)
📄
my_print_defaults
(3.56 MB)
📄
myisam_ftdump
(3.89 MB)
📄
myisamchk
(4.01 MB)
📄
myisamlog
(3.87 MB)
📄
myisampack
(3.91 MB)
📄
mysql
(4.34 MB)
📄
mysql_config
(4.51 KB)
📄
mysql_embedded
(22.6 MB)
📄
mysql_find_rows
(3.21 KB)
📄
mysql_fix_extensions
(1.22 KB)
📄
mysql_install_db
(22.46 KB)
📄
mysql_plugin
(3.57 MB)
📄
mysql_tzinfo_to_sql
(3.57 MB)
📄
mysql_upgrade
(4 MB)
📄
mysql_waitpid
(3.55 MB)
📄
mysqlaccess
(109.34 KB)
📄
mysqladmin
(3.88 MB)
📄
mysqlbinlog
(4.14 MB)
📄
mysqlcheck
(3.88 MB)
📄
mysqld_multi
(26.71 KB)
📄
mysqld_safe
(30.42 KB)
📄
mysqld_safe_helper
(3.52 MB)
📄
mysqldump
(3.96 MB)
📄
mysqlimport
(3.87 MB)
📄
mysqlshow
(3.87 MB)
📄
mysqlslap
(3.89 MB)
📄
mytop
(71.95 KB)
📄
nail
(408.89 KB)
📄
named-rrchecker
(19.88 KB)
📄
namei
(33.1 KB)
📄
nano
(247.94 KB)
📄
nc
(436.87 KB)
📄
ncat
(436.87 KB)
📄
ncdu
(89.88 KB)
📄
ncurses6-config
(5.87 KB)
📄
ncursesw6-config
(5.88 KB)
📄
ndptool
(24.45 KB)
📄
neato
(12.26 KB)
📄
needs-restarting
(3.62 KB)
📄
neqn
(908 B)
📄
net-snmp-create-v3-user
(3.15 KB)
📄
netstat
(158.68 KB)
📄
newgidmap
(47.8 KB)
📄
newgrp
(42.45 KB)
📄
newuidmap
(47.76 KB)
📄
nf-ct-add
(16.46 KB)
📄
nf-ct-events
(12.38 KB)
📄
nf-ct-list
(16.49 KB)
📄
nf-exp-add
(16.87 KB)
📄
nf-exp-delete
(16.66 KB)
📄
nf-exp-list
(16.49 KB)
📄
nf-log
(12.35 KB)
📄
nf-monitor
(12.36 KB)
📄
nf-queue
(16.35 KB)
📄
ngettext
(48.97 KB)
📄
nice
(37.41 KB)
📄
nisdomainname
(21.16 KB)
📄
nl
(45.63 KB)
📄
nl-addr-add
(12.34 KB)
📄
nl-addr-delete
(16.77 KB)
📄
nl-addr-list
(16.88 KB)
📄
nl-class-add
(16.73 KB)
📄
nl-class-delete
(12.63 KB)
📄
nl-class-list
(12.59 KB)
📄
nl-classid-lookup
(12.47 KB)
📄
nl-cls-add
(16.77 KB)
📄
nl-cls-delete
(16.77 KB)
📄
nl-cls-list
(12.73 KB)
📄
nl-fib-lookup
(12.5 KB)
📄
nl-link-enslave
(11.87 KB)
📄
nl-link-ifindex2name
(11.87 KB)
📄
nl-link-list
(12.23 KB)
📄
nl-link-name2ifindex
(11.86 KB)
📄
nl-link-release
(11.86 KB)
📄
nl-link-set
(12.77 KB)
📄
nl-link-stats
(12.59 KB)
📄
nl-list-caches
(12.27 KB)
📄
nl-list-sockets
(11.87 KB)
📄
nl-monitor
(12.52 KB)
📄
nl-neigh-add
(12.63 KB)
📄
nl-neigh-delete
(12.66 KB)
📄
nl-neigh-list
(12.19 KB)
📄
nl-neightbl-list
(12.01 KB)
📄
nl-pktloc-lookup
(12.56 KB)
📄
nl-qdisc-add
(12.65 KB)
📄
nl-qdisc-delete
(12.63 KB)
📄
nl-qdisc-list
(16.74 KB)
📄
nl-route-add
(16.39 KB)
📄
nl-route-delete
(16.88 KB)
📄
nl-route-get
(12.35 KB)
📄
nl-route-list
(16.44 KB)
📄
nl-rule-list
(12.05 KB)
📄
nl-tctree-list
(12.66 KB)
📄
nl-util-addr
(11.85 KB)
📄
nload
(234.35 KB)
📄
nm
(50.38 KB)
📄
nm-online
(20.84 KB)
📄
nmcli
(1009.01 KB)
📄
nmtui
(784.12 KB)
📄
nmtui-connect
(784.12 KB)
📄
nmtui-edit
(784.12 KB)
📄
nmtui-hostname
(784.12 KB)
📄
node
(29.74 MB)
📄
nohup
(37.48 KB)
📄
nop
(12.5 KB)
📄
npm
(2.83 KB)
📄
nproc
(37.48 KB)
📄
npx
(173 B)
📄
nroff
(3.23 KB)
📄
nsenter
(33.3 KB)
📄
nslookup
(146.26 KB)
📄
nss-policy-check
(16.3 KB)
📄
nsupdate
(73.05 KB)
📄
numfmt
(65.71 KB)
📄
objcopy
(240.07 KB)
📄
objdump
(419.76 KB)
📄
od
(73.88 KB)
📄
odbc_config
(13.05 KB)
📄
odbcinst
(37.68 KB)
📄
oddjob_request
(41.24 KB)
📄
open
(20.97 KB)
📄
openssl
(745.95 KB)
📄
openvt
(20.97 KB)
📄
os-prober
(5.78 KB)
📄
osage
(12.26 KB)
📄
p11-kit
(37.15 KB)
📄
package-cleanup
(3.62 KB)
📄
page_owner_sort
(11.34 KB)
📄
pango-list
(11.88 KB)
📄
pango-view
(57.44 KB)
📄
paperconf
(13.07 KB)
📄
passwd
(32.77 KB)
📄
paste
(37.46 KB)
📄
patch
(206.46 KB)
📄
patchwork
(12.26 KB)
📄
pathchk
(37.41 KB)
📄
pathfix.py
(6.63 KB)
📄
pcre2-config
(1.9 KB)
📄
pdf2dsc
(698 B)
📄
pdf2ps
(909 B)
📄
peekfd
(16.51 KB)
📄
perl
(12.43 KB)
📄
perl5.26.3
(12.43 KB)
📄
perlbug
(44.39 KB)
📄
perldoc
(118 B)
📄
perlivp
(10.56 KB)
📄
perlml
(6.86 KB)
📄
perlthanks
(44.39 KB)
📄
perror
(3.75 MB)
📄
pflags
(2.57 KB)
📄
pftp
(101.2 KB)
📄
pgrep
(28.84 KB)
📄
php
(937 B)
📄
pic
(293.84 KB)
📄
piconv
(8.08 KB)
📄
pidof
(16.7 KB)
📄
pidstat
(65.72 KB)
📄
pigz
(125.38 KB)
📄
pinentry
(2.35 KB)
📄
pinentry-curses
(77.89 KB)
📄
pinfo
(109.34 KB)
📄
ping
(66.13 KB)
📄
pinky
(41.53 KB)
📄
pip-2
(206 B)
📄
pip-2.7
(206 B)
📄
pip-3
(209 B)
📄
pip-3.6
(209 B)
📄
pip2
(206 B)
📄
pip2.7
(206 B)
📄
pip3
(209 B)
📄
pip3.6
(209 B)
📄
pk12util
(106.88 KB)
📄
pkaction
(16.38 KB)
📄
pkcheck
(24.43 KB)
📄
pkexec
(28.41 KB)
📄
pkg-config
(40.04 KB)
📄
pkgconf
(40.04 KB)
📄
pkill
(28.84 KB)
📄
pkla-admin-identities
(25.72 KB)
📄
pkla-check-authorization
(33.78 KB)
📄
pkttyagent
(20.38 KB)
📄
pl2pm
(4.43 KB)
📄
pldd
(16.75 KB)
📄
plesk_configure
(342 B)
📄
plymouth
(45.36 KB)
📄
pmap
(32.78 KB)
📄
png-fix-itxt
(13.04 KB)
📄
pngfix
(53.53 KB)
📄
pod2html
(4.04 KB)
📄
pod2man
(14.68 KB)
📄
pod2text
(10.55 KB)
📄
pod2usage
(3.86 KB)
📄
podchecker
(3.57 KB)
📄
podselect
(2.47 KB)
📄
post-grohtml
(238.73 KB)
📄
powernow-k8-decode
(10.88 KB)
📄
pr
(82.23 KB)
📄
pre-grohtml
(130.55 KB)
📄
precat
(5.52 KB)
📄
preconv
(57.65 KB)
📄
preunzip
(5.52 KB)
📄
prezip
(5.52 KB)
📄
prezip-bin
(11.98 KB)
📄
printenv
(33.4 KB)
📄
printf
(53.64 KB)
📄
prlimit
(37.54 KB)
📄
procan
(82.6 KB)
📄
protoc
(16.48 KB)
📄
protoc-c
(244.79 KB)
📄
protoc-gen-c
(244.79 KB)
📄
prove
(13.24 KB)
📄
prtstat
(20.51 KB)
📄
prune
(16.73 KB)
📄
ps
(134.75 KB)
📄
ps2ascii
(631 B)
📄
ps2epsi
(2.69 KB)
📄
ps2pdf
(272 B)
📄
ps2pdf12
(215 B)
📄
ps2pdf13
(215 B)
📄
ps2pdf14
(215 B)
📄
ps2pdfwr
(1.07 KB)
📄
ps2ps
(647 B)
📄
ps2ps2
(669 B)
📄
ps_mem
(17.69 KB)
📄
psfaddtable
(20.66 KB)
📄
psfgettable
(20.66 KB)
📄
psfstriptable
(20.66 KB)
📄
psfxtable
(20.66 KB)
📄
pslog
(12.48 KB)
📄
pstree
(33.53 KB)
📄
pstree.x11
(33.53 KB)
📄
ptar
(3.38 KB)
📄
ptardiff
(2.48 KB)
📄
ptargrep
(4.2 KB)
📄
ptx
(78.07 KB)
📄
pure-pw
(38.83 KB)
📄
pure-pwconvert
(10.72 KB)
📄
pure-statsdecode
(10.72 KB)
📄
pwd
(37.5 KB)
📄
pwdx
(12.68 KB)
📄
pwmake
(12.27 KB)
📄
pwscore
(12.27 KB)
📄
pydoc-3
(89 B)
📄
pydoc2
(78 B)
📄
pydoc2.7
(78 B)
📄
pydoc3
(89 B)
📄
pydoc3.6
(89 B)
📄
pygettext2.7.py
(21.56 KB)
📄
pygettext2.py
(21.56 KB)
📄
pynche2
(138 B)
📄
pynche2.7
(138 B)
📄
python-html2text
(406 B)
📄
python2
(7.84 KB)
📄
python2-config
(1.8 KB)
📄
python2.7
(7.84 KB)
📄
python2.7-config
(1.8 KB)
📄
python3
(11.59 KB)
📄
python3-config
(204 B)
📄
python3-html2text
(406 B)
📄
python3.6
(11.59 KB)
📄
python3.6-config
(204 B)
📄
python3.6m
(11.59 KB)
📄
python3.6m-config
(204 B)
📄
python3.6m-x86_64-config
(3.54 KB)
📄
pyvenv-3
(446 B)
📄
pyvenv-3.6
(446 B)
📄
quota
(91.49 KB)
📄
quotasync
(74.69 KB)
📄
ranlib
(61.98 KB)
📄
raw
(16.49 KB)
📄
read
(28 B)
📄
readelf
(624.54 KB)
📄
readlink
(45.96 KB)
📄
realpath
(50.02 KB)
📄
recode-sr-latin
(17.99 KB)
📄
red
(89 B)
📄
rename
(16.5 KB)
📄
renew-dummy-cert
(725 B)
📄
renice
(16.46 KB)
📄
replace
(3.54 MB)
📄
repo-graph
(3.62 KB)
📄
repoclosure
(3.62 KB)
📄
repodiff
(3.62 KB)
📄
repomanage
(3.62 KB)
📄
repoquery
(3.62 KB)
📄
reposync
(3.62 KB)
📄
repotrack
(3.62 KB)
📄
rescan-scsi-bus.sh
(38.24 KB)
📄
reset
(24.76 KB)
📄
resizecons
(20.77 KB)
📄
resolve_stack_dump
(3.56 MB)
📄
resolvectl
(195.74 KB)
📄
resolveip
(3.56 MB)
📄
rev
(12.45 KB)
📄
rm
(70.47 KB)
📄
rmdir
(45.54 KB)
📄
rnano
(247.94 KB)
📄
rpcbind
(61.55 KB)
📄
rpcinfo
(32.64 KB)
📄
rpm
(20.85 KB)
📄
rpm2archive
(20.46 KB)
📄
rpm2cpio
(11.84 KB)
📄
rpmdb
(16.96 KB)
📄
rpmkeys
(16.87 KB)
📄
rpmquery
(20.85 KB)
📄
rpmverify
(20.85 KB)
📄
rsync
(510.15 KB)
📄
rsyslog-recover-qi.pl
(5.96 KB)
📄
run-parts
(1.94 KB)
📄
run-with-aspell
(85 B)
📄
runcon
(37.45 KB)
📄
rvi
(1.13 MB)
📄
rview
(1.13 MB)
📄
rvim
(2.93 MB)
📄
sadf
(334.57 KB)
📄
sar
(135.77 KB)
📄
sccmap
(20.62 KB)
📄
scl
(36.87 KB)
📄
scl_enabled
(258 B)
📄
scl_source
(1.82 KB)
📄
scp
(102.85 KB)
📄
screen
(482.46 KB)
📄
script
(36.79 KB)
📄
scriptreplay
(28.99 KB)
📄
scsi-rescan
(38.24 KB)
📄
scsi_logging_level
(8.38 KB)
📄
scsi_mandat
(3.52 KB)
📄
scsi_readcap
(1.3 KB)
📄
scsi_ready
(1.09 KB)
📄
scsi_satl
(3.77 KB)
📄
scsi_start
(1.25 KB)
📄
scsi_stop
(1.44 KB)
📄
scsi_temperature
(936 B)
📄
sdiff
(105.33 KB)
📄
secon
(25.46 KB)
📄
secret-tool
(21.17 KB)
📄
sed
(115.48 KB)
📄
semodule_expand
(12.28 KB)
📄
semodule_link
(12.28 KB)
📄
semodule_package
(16.68 KB)
📄
semodule_unpackage
(12.3 KB)
📄
seq
(53.52 KB)
📄
sessreg
(17.38 KB)
📄
setarch
(20.76 KB)
📄
setfacl
(37.65 KB)
📄
setfattr
(23.19 KB)
📄
setfont
(45.19 KB)
📄
setkeycodes
(12.56 KB)
📄
setleds
(16.6 KB)
📄
setmetamode
(12.56 KB)
📄
setpriv
(45.15 KB)
📄
setsid
(16.38 KB)
📄
setterm
(45.12 KB)
📄
setup-nsssysinit
(1.5 KB)
📄
setup-nsssysinit.sh
(1.5 KB)
📄
setvtrgb
(16.64 KB)
📄
sfdp
(12.26 KB)
📄
sftp
(159.74 KB)
📄
sg
(42.45 KB)
📄
sg_bg_ctl
(16.07 KB)
📄
sg_compare_and_write
(20.9 KB)
📄
sg_copy_results
(20.81 KB)
📄
sg_dd
(44.58 KB)
📄
sg_decode_sense
(20.33 KB)
📄
sg_emc_trespass
(12.26 KB)
📄
sg_format
(33.37 KB)
📄
sg_get_config
(33.31 KB)
📄
sg_get_lba_status
(20.46 KB)
📄
sg_ident
(16.17 KB)
📄
sg_inq
(117.91 KB)
📄
sg_logs
(150.02 KB)
📄
sg_luns
(24.85 KB)
📄
sg_map
(16.41 KB)
📄
sg_map26
(24.87 KB)
📄
sg_modes
(43.88 KB)
📄
sg_opcodes
(28.69 KB)
📄
sg_persist
(34.13 KB)
📄
sg_prevent
(12.07 KB)
📄
sg_raw
(24.38 KB)
📄
sg_rbuf
(20.84 KB)
📄
sg_rdac
(15.88 KB)
📄
sg_read
(24.41 KB)
📄
sg_read_attr
(34.79 KB)
📄
sg_read_block_limits
(12.12 KB)
📄
sg_read_buffer
(20.96 KB)
📄
sg_read_long
(16.27 KB)
📄
sg_readcap
(20.86 KB)
📄
sg_reassign
(16.22 KB)
📄
sg_referrals
(16.23 KB)
📄
sg_rep_zones
(20.66 KB)
📄
sg_requests
(16.3 KB)
📄
sg_reset
(16.73 KB)
📄
sg_reset_wp
(16.17 KB)
📄
sg_rmsn
(12.06 KB)
📄
sg_rtpg
(16.16 KB)
📄
sg_safte
(20.27 KB)
📄
sg_sanitize
(24.58 KB)
📄
sg_sat_identify
(16.71 KB)
📄
sg_sat_phy_event
(20.59 KB)
📄
sg_sat_read_gplog
(16.3 KB)
📄
sg_sat_set_features
(16.27 KB)
📄
sg_scan
(16.5 KB)
📄
sg_seek
(16.85 KB)
📄
sg_senddiag
(25.27 KB)
📄
sg_ses
(118.23 KB)
📄
sg_ses_microcode
(29.48 KB)
📄
sg_start
(20.93 KB)
📄
sg_stpg
(20.3 KB)
📄
sg_stream_ctl
(20.27 KB)
📄
sg_sync
(16.22 KB)
📄
sg_test_rwbuf
(20.73 KB)
📄
sg_timestamp
(20.74 KB)
📄
sg_turs
(16.74 KB)
📄
sg_unmap
(24.32 KB)
📄
sg_verify
(20.46 KB)
📄
sg_vpd
(108.75 KB)
📄
sg_wr_mode
(20.3 KB)
📄
sg_write_buffer
(21.24 KB)
📄
sg_write_long
(16.33 KB)
📄
sg_write_same
(24.48 KB)
📄
sg_write_verify
(20.78 KB)
📄
sg_write_x
(53.75 KB)
📄
sg_xcopy
(40.59 KB)
📄
sg_zone
(16.3 KB)
📄
sginfo
(74.85 KB)
📄
sgm_dd
(32.55 KB)
📄
sgp_dd
(36.95 KB)
📄
sh
(1.1 MB)
📄
sha1hmac
(32.66 KB)
📄
sha1sum
(45.63 KB)
📄
sha224hmac
(32.66 KB)
📄
sha224sum
(45.66 KB)
📄
sha256hmac
(32.66 KB)
📄
sha256sum
(45.66 KB)
📄
sha384hmac
(32.66 KB)
📄
sha384sum
(45.66 KB)
📄
sha512hmac
(32.66 KB)
📄
sha512sum
(45.66 KB)
📄
shasum
(9.66 KB)
📄
showconsolefont
(20.73 KB)
📄
showkey
(16.58 KB)
📄
showrgb
(13.05 KB)
📄
shred
(61.94 KB)
📄
shuf
(58.16 KB)
📄
signver
(110.59 KB)
📄
sim_client
(16.28 KB)
📄
sim_lsmplugin
(1.22 KB)
📄
simc_lsmplugin
(114.45 KB)
📄
size
(33.25 KB)
📄
skill
(28.8 KB)
📄
slabinfo
(36.15 KB)
📄
slabtop
(20.84 KB)
📄
sleep
(37.47 KB)
📄
slencheck
(13.07 KB)
📄
sm3hmac
(32.66 KB)
📄
smtpd2.7.py
(18.11 KB)
📄
smtpd2.py
(18.11 KB)
📄
snice
(28.8 KB)
📄
snmpconf
(25.44 KB)
📄
socat
(406.49 KB)
📄
soelim
(42.55 KB)
📄
sort
(123.55 KB)
📄
sotruss
(4.18 KB)
📄
spell
(122 B)
📄
splain
(18.7 KB)
📄
split
(58.13 KB)
📄
sprof
(28.67 KB)
📄
sqlite3
(1.28 MB)
📄
ssh
(757.54 KB)
📄
ssh-add
(346.13 KB)
📄
ssh-agent
(325.58 KB)
📄
ssh-copy-id
(10.44 KB)
📄
ssh-keygen
(427.16 KB)
📄
ssh-keyscan
(428.57 KB)
📄
ssltap
(126.29 KB)
📄
sss_ssh_authorizedkeys
(28.79 KB)
📄
sss_ssh_knownhostsproxy
(28.79 KB)
📄
stat
(86.23 KB)
📄
stdbuf
(49.58 KB)
📄
strace
(1.94 MB)
📄
strace-log-merge
(1.78 KB)
📄
stream
(11.83 KB)
📄
strings
(37.43 KB)
📄
strip
(240.09 KB)
📄
stty
(77.68 KB)
📄
su
(48.98 KB)
📄
sudo
(186.52 KB)
📄
sudoedit
(186.52 KB)
📄
sudoreplay
(115.2 KB)
📄
sum
(45.61 KB)
📄
switch_mod_lsapi
(30.99 KB)
📄
sxpm
(28.81 KB)
📄
symlinks
(17.16 KB)
📄
sync
(37.43 KB)
📄
systemctl
(218.45 KB)
📄
systemd-analyze
(1.55 MB)
📄
systemd-ask-password
(12.02 KB)
📄
systemd-cat
(16.03 KB)
📄
systemd-cgls
(16.44 KB)
📄
systemd-cgtop
(32.88 KB)
📄
systemd-delta
(24.45 KB)
📄
systemd-detect-virt
(11.88 KB)
📄
systemd-escape
(16.01 KB)
📄
systemd-firstboot
(36.98 KB)
📄
systemd-hwdb
(28.91 KB)
📄
systemd-inhibit
(16.03 KB)
📄
systemd-machine-id-setup
(24.75 KB)
📄
systemd-mount
(52.63 KB)
📄
systemd-notify
(16.03 KB)
📄
systemd-path
(16.02 KB)
📄
systemd-resolve
(195.74 KB)
📄
systemd-run
(48.94 KB)
📄
systemd-socket-activate
(24.77 KB)
📄
systemd-stdio-bridge
(16.02 KB)
📄
systemd-sysusers
(53.05 KB)
📄
systemd-tmpfiles
(73.29 KB)
📄
systemd-tty-ask-password-agent
(32.82 KB)
📄
systemd-umount
(52.63 KB)
📄
tabs
(16.55 KB)
📄
tac
(41.57 KB)
📄
tail
(74.2 KB)
📄
tapestat
(41.32 KB)
📄
tar
(448.99 KB)
📄
taskset
(37.25 KB)
📄
tbl
(154.61 KB)
📄
tcamgr
(25.13 KB)
📄
tcamttest
(21.16 KB)
📄
tcatest
(57.6 KB)
📄
tcbmgr
(29.1 KB)
📄
tcbmttest
(53.22 KB)
📄
tcbtest
(69.56 KB)
📄
tcfmgr
(25.09 KB)
📄
tcfmttest
(37.2 KB)
📄
tcftest
(45.18 KB)
📄
tchmgr
(25.09 KB)
📄
tchmttest
(49.22 KB)
📄
tchtest
(57.53 KB)
📄
tclsh
(9.04 KB)
📄
tclsh8.6
(9.04 KB)
📄
tcptraceroute
(1.55 KB)
📄
tctmgr
(37.09 KB)
📄
tctmttest
(45.2 KB)
📄
tcttest
(57.19 KB)
📄
tcucodec
(37.08 KB)
📄
tcumttest
(25.16 KB)
📄
tcutest
(73.17 KB)
📄
teamd
(160.52 KB)
📄
teamdctl
(30.37 KB)
📄
teamnl
(20.47 KB)
📄
tee
(41.55 KB)
📄
telnet
(104.88 KB)
📄
test
(53.63 KB)
📄
tic
(85.31 KB)
📄
time
(27.54 KB)
📄
timedatectl
(36.96 KB)
📄
timeout
(41.93 KB)
📄
tload
(16.76 KB)
📄
tmon
(39.63 KB)
📄
tmpwatch
(35.47 KB)
📄
toe
(16.45 KB)
📄
top
(121.7 KB)
📄
touch
(94.02 KB)
📄
tput
(24.8 KB)
📄
tr
(49.7 KB)
📄
tracepath
(20.44 KB)
📄
traceroute
(70.97 KB)
📄
traceroute6
(70.97 KB)
📄
tred
(16.59 KB)
📄
tree
(81.59 KB)
📄
troff
(805.02 KB)
📄
true
(33.4 KB)
📄
truncate
(41.44 KB)
📄
trust
(219.55 KB)
📄
tset
(24.76 KB)
📄
tsort
(41.57 KB)
📄
tty
(33.39 KB)
📄
turbostat
(130.8 KB)
📄
twopi
(12.26 KB)
📄
type
(28 B)
📄
tzselect
(15.01 KB)
📄
uapi
(3.18 MB)
📄
ucs2any
(24.41 KB)
📄
udevadm
(424.59 KB)
📄
ul
(20.58 KB)
📄
ulimit
(30 B)
📄
umask
(29 B)
📄
umount
(32.75 KB)
📄
unalias
(31 B)
📄
uname
(37.41 KB)
📄
uname26
(20.76 KB)
📄
unexpand
(45.68 KB)
📄
unflatten
(16.63 KB)
📄
unicode_start
(2.55 KB)
📄
unicode_stop
(363 B)
📄
uniq
(49.72 KB)
📄
unix2dos
(58.53 KB)
📄
unix2mac
(58.53 KB)
📄
unlink
(33.41 KB)
📄
unlzma
(82.09 KB)
📄
unpigz
(125.38 KB)
📄
unshare
(24.92 KB)
📄
unversioned-python
(157 B)
📄
unxz
(82.09 KB)
📄
unzip
(201.88 KB)
📄
unzipsfx
(101.48 KB)
📄
update-ca-trust
(1.24 KB)
📄
update-crypto-policies
(87 B)
📄
update-desktop-database
(24.55 KB)
📄
update-gtk-immodules
(313 B)
📄
update-mime-database
(57.22 KB)
📄
updatedb
(53.84 KB)
📄
uptime
(12.59 KB)
📄
usb-devices
(4.01 KB)
📄
usbhid-dump
(31.04 KB)
📄
users
(37.47 KB)
📄
usleep
(11.85 KB)
📄
utmpdump
(28.66 KB)
📄
uuclient
(15.88 KB)
📄
uuidgen
(16.37 KB)
📄
uuidparse
(37.13 KB)
📄
vdir
(139.97 KB)
📄
vdo
(5 KB)
📄
vdo-by-dev
(1.83 KB)
📄
vdodmeventd
(62.45 KB)
📄
vdodumpconfig
(536.63 KB)
📄
vdoforcerebuild
(524.27 KB)
📄
vdoformat
(549.13 KB)
📄
vdosetuuid
(536.66 KB)
📄
vdostats
(10.26 KB)
📄
verify_blkparse
(11.87 KB)
📄
vi
(1.13 MB)
📄
view
(1.13 MB)
📄
vim
(2.93 MB)
📄
vimdiff
(2.93 MB)
📄
vimdot
(1.06 KB)
📄
vimtutor
(2.07 KB)
📄
vlock
(20.83 KB)
📄
vmstat
(36.79 KB)
📄
w
(20.75 KB)
📄
wait
(28 B)
📄
wall
(33.05 KB)
📄
watch
(29.19 KB)
📄
watchgnupg
(16.43 KB)
📄
wc
(49.72 KB)
📄
wdctl
(36.98 KB)
📄
wget
(521.41 KB)
📄
whatis
(54.04 KB)
📄
whereis
(29.27 KB)
📄
which
(29.44 KB)
📄
whiptail
(33.09 KB)
📄
who
(53.68 KB)
📄
whoami
(33.41 KB)
📄
wish
(13.05 KB)
📄
wish8.6
(13.05 KB)
📄
wmf2eps
(17.15 KB)
📄
wmf2fig
(17.15 KB)
📄
wmf2gd
(17.14 KB)
📄
wmf2svg
(17.16 KB)
📄
wmf2x
(17.13 KB)
📄
word-list-compress
(11.99 KB)
📄
write
(20.62 KB)
📄
wsrep_sst_backup
(2.39 KB)
📄
wsrep_sst_common
(66.86 KB)
📄
wsrep_sst_mariabackup
(49.47 KB)
📄
wsrep_sst_mysqldump
(8.1 KB)
📄
wsrep_sst_rsync
(29.72 KB)
📄
wsrep_sst_rsync_wan
(29.72 KB)
📄
x86_64
(20.76 KB)
📄
x86_64-redhat-linux-c++
(1.21 MB)
📄
x86_64-redhat-linux-g++
(1.21 MB)
📄
x86_64-redhat-linux-gcc
(1.21 MB)
📄
x86_64-redhat-linux-gcc-8
(1.21 MB)
📄
x86_64-redhat-linux-gnu-pkg-config
(424 B)
📄
x86_energy_perf_policy
(31.95 KB)
📄
xargs
(74.11 KB)
📄
xdg-desktop-icon
(20.61 KB)
📄
xdg-desktop-menu
(43.42 KB)
📄
xdg-email
(26.56 KB)
📄
xdg-icon-resource
(29.89 KB)
📄
xdg-mime
(41.68 KB)
📄
xdg-open
(24.76 KB)
📄
xdg-screensaver
(36.9 KB)
📄
xdg-settings
(37.04 KB)
📄
xgamma
(17.08 KB)
📄
xgettext
(283.88 KB)
📄
xhost
(17.12 KB)
📄
xinput
(63.61 KB)
📄
xkill
(17.1 KB)
📄
xml2-config
(1.71 KB)
📄
xmlcatalog
(20.38 KB)
📄
xmllint
(73.37 KB)
📄
xmlwf
(32.96 KB)
📄
xmodmap
(39.98 KB)
📄
xorg-x11-fonts-update-dirs
(1.29 KB)
📄
xrandr
(65.46 KB)
📄
xrdb
(33.98 KB)
📄
xrefresh
(17.94 KB)
📄
xset
(37.2 KB)
📄
xsetpointer
(13.05 KB)
📄
xsetroot
(21.44 KB)
📄
xslt-config
(2.36 KB)
📄
xsltproc
(28.47 KB)
📄
xstdcmap
(17.68 KB)
📄
xsubpp
(4.96 KB)
📄
xxd
(20.52 KB)
📄
xz
(82.09 KB)
📄
xzcat
(82.09 KB)
📄
xzcmp
(6.48 KB)
📄
xzdec
(16.48 KB)
📄
xzdiff
(6.48 KB)
📄
xzegrep
(5.76 KB)
📄
xzfgrep
(5.76 KB)
📄
xzgrep
(5.76 KB)
📄
xzless
(1.76 KB)
📄
xzmore
(2.11 KB)
📄
yat2m
(33.34 KB)
📄
yes
(33.45 KB)
📄
ypdomainname
(21.16 KB)
📄
yum
(2.05 KB)
📄
yum-builddep
(3.62 KB)
📄
yum-config-manager
(3.62 KB)
📄
yum-debug-dump
(3.62 KB)
📄
yum-debug-restore
(3.62 KB)
📄
yum-groups-manager
(3.62 KB)
📄
yumdownloader
(3.62 KB)
📄
zcat
(1.94 KB)
📄
zcmp
(1.64 KB)
📄
zdiff
(5.74 KB)
📄
zegrep
(29 B)
📄
zfgrep
(29 B)
📄
zforce
(2.03 KB)
📄
zgrep
(7.4 KB)
📄
zip
(229 KB)
📄
zipcloak
(102.91 KB)
📄
zipdetails
(49.39 KB)
📄
zipgrep
(2.88 KB)
📄
zipinfo
(201.88 KB)
📄
zipnote
(97.76 KB)
📄
zipsplit
(97.76 KB)
📄
zless
(2.15 KB)
📄
zmore
(1.8 KB)
📄
znew
(4.45 KB)
📄
zsoelim
(42.55 KB)
Editing: wsrep_sst_common
# Copyright (C) 2017-2024 MariaDB # Copyright (C) 2012-2015 Codership Oy # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; version 2 of the License. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; see the file COPYING. If not, write to the # Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston # MA 02110-1335 USA. # This is a common command line parser and common functions to # be sourced by other SST scripts. trap 'exit 32' HUP PIPE trap 'exit 3' INT QUIT TERM OS="$(uname)" # Setting the paths for some utilities on CentOS export PATH="${PATH:+$PATH:}/usr/local/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin" if [ "$OS" != 'Darwin' ]; then export LD_LIBRARY_PATH="${LD_LIBRARY_PATH:+$LD_LIBRARY_PATH:}/usr/local/lib:/usr/lib:/lib:/opt/lib" fi commandex() { if [ -n "$BASH_VERSION" ]; then command -v "$1" || : elif [ -x "$1" ]; then echo "$1" else which "$1" || : fi } with_bash_42=0 with_printf=1 if [ -z "$BASH_VERSION" ]; then [ -z "$(commandex printf)" ] && with_printf=0 else [ "${BASH_VERSINFO[0]}" -eq 4 -a "${BASH_VERSINFO[1]}" -ge 2 -o \ "${BASH_VERSINFO[0]}" -gt 4 ] && with_bash_42=1 fi wsrep_log() { local t # echo everything to stderr so that it gets into common error log # deliberately made to look different from the rest of the log if [ "$OS" = 'Linux' ]; then t=$(date '+%Y%m%d %H:%M:%S.%3N') elif [ $with_bash_42 -ne 0 ]; then printf -v t '%(%Y%m%d %H:%M:%S)T.000' else t=$(date '+%Y%m%d %H:%M:%S.000') fi echo "WSREP_SST: $* ($t)" >&2 } wsrep_log_error() { wsrep_log "[ERROR] $*" } wsrep_log_warning() { wsrep_log "[WARNING] $*" } wsrep_log_info() { wsrep_log "[INFO] $*" } trim_string() { if [ -n "$BASH_VERSION" ]; then local pattern="[![:space:]${2:-}]" local x="${1#*$pattern}" local z=${#1} x=${#x} if [ $x -ne $z ]; then local y="${1%$pattern*}" y=${#y} x=$(( z-x-1 )) y=$(( y-x+1 )) echo "${1:$x:$y}" else echo '' fi else local pattern="[[:space:]${2:-}]" echo "$1" | sed -E "s/^$pattern+|$pattern+\$//g" fi } trim_dir() { if [ -n "$BASH_VERSION" ]; then local pattern="![:space:]${2:-}" local x="${1#*[$pattern]}" local z=${#1} x=${#x} if [ $x -ne $z ]; then local y="${1%[$pattern/]*}" y=${#y} x=$(( z-x-1 )) y=$(( y-x+1 )) x="${1:$x:$y}" [ -z "$x" ] && x='.' echo "$x" else echo '' fi else local pattern="[:space:]${2:-}" local x=$(echo "$1" | sed -E "s/^[$pattern]+|[$pattern/]+\$//g") if [ -n "$x" ]; then echo "$x" elif "${1#*/}" != "$1"; then echo '.' else echo '' fi fi } trim_right() { if [ -n "$BASH_VERSION" ]; then local pattern="[![:space:]${2:-}]" local z=${#1} local y="${1%$pattern*}" y=${#y} if [ $y -ne $z ]; then y=$(( y+1 )) echo "${1:0:$y}" else echo '' fi else local pattern="[[:space:]${2:-}]" echo "$1" | sed -E "s/$pattern+\$//g" fi } trim_left() { if [ -n "$BASH_VERSION" ]; then local pattern="[![:space:]${2:-}]" local x="${1#*$pattern}" local z=${#1} x=${#x} if [ $x -ne $z ]; then x=$(( z-x-1 )) echo "${1:$x:$z}" else echo '' fi else local pattern="[[:space:]${2:-}]" echo "$1" | sed -E "s/^$pattern+//g" fi } to_minuses() { local x="$1" local t="${1#*_}" local r="" while [ "$t" != "$x" ]; do r="$r${x%%_*}-" x="$t" t="${t#*_}" done echo "$r$x" } WSREP_SST_OPT_BYPASS=0 WSREP_SST_OPT_PROGRESS=0 WSREP_SST_OPT_BINLOG="" WSREP_SST_OPT_BINLOG_INDEX="" WSREP_SST_OPT_LOG_BASENAME="" WSREP_SST_OPT_DATA="" WSREP_SST_OPT_AUTH="${WSREP_SST_OPT_AUTH:-}" WSREP_SST_OPT_USER="${WSREP_SST_OPT_USER:-}" WSREP_SST_OPT_PSWD="${WSREP_SST_OPT_PSWD:-}" WSREP_SST_OPT_DEFAULT="" WSREP_SST_OPT_DEFAULTS="" WSREP_SST_OPT_EXTRA_DEFAULT="" WSREP_SST_OPT_EXTRA_DEFAULTS="" WSREP_SST_OPT_SUFFIX_DEFAULT="" WSREP_SST_OPT_SUFFIX_VALUE="" WSREP_SST_OPT_MYSQLD="" WSREP_SST_OPT_PORT="" WSREP_SST_OPT_ADDR="" WSREP_SST_OPT_ADDR_PORT="" WSREP_SST_OPT_HOST="" WSREP_SST_OPT_HOST_UNESCAPED="" ARIA_LOG_DIR="" INNODB_DATA_HOME_DIR=$(trim_dir "${INNODB_DATA_HOME_DIR:-}") INNODB_LOG_GROUP_HOME=$(trim_dir "${INNODB_LOG_GROUP_HOME:-}") INNODB_UNDO_DIR=$(trim_dir "${INNODB_UNDO_DIR:-}") INNODB_BUFFER_POOL="" INNODB_BUFFER_POOL_SIZE="" INNODB_FORCE_RECOVERY="" INNOEXTRA="" while [ $# -gt 0 ]; do case "$1" in '--address') WSREP_SST_OPT_ADDR=$(trim_string "$2") # # Break address string into host:port/path parts # case "$WSREP_SST_OPT_ADDR" in \[*) # IPv6 # Remove the starting and ending square brackets, if present: addr="${WSREP_SST_OPT_ADDR#\[}" addr=$(trim_right "${addr%%\]*}") # Some utilities and subsequent code require an address # without square brackets: readonly WSREP_SST_OPT_HOST_UNESCAPED="$addr" # Square brackets are needed in most cases: readonly WSREP_SST_OPT_HOST="[$addr]" # Mark this address as IPv6: readonly WSREP_SST_OPT_HOST_IPv6=1 # Let's remove the leading part that contains the host address: remain="${WSREP_SST_OPT_ADDR#*\]}" ;; *) addr=$(trim_right "${WSREP_SST_OPT_ADDR%%[:/]*}") readonly WSREP_SST_OPT_HOST="$addr" readonly WSREP_SST_OPT_HOST_UNESCAPED="$addr" readonly WSREP_SST_OPT_HOST_IPv6=0 # Let's remove the leading part that contains the host address: remain="${WSREP_SST_OPT_ADDR#*[:/]}" ;; esac # If there is nothing but the address, then the remainder is empty: [ "$remain" = "$WSREP_SST_OPT_ADDR" ] && remain="" # Let's remove the ":" character that separates the port number # from the hostname: remain="${remain#:}" # Extract the port number from the address - all characters # up to "/" (if present): WSREP_SST_OPT_ADDR_PORT="${remain%%/*}" # If the "/" character is present, then the path is not empty: if [ "$WSREP_SST_OPT_ADDR_PORT" != "$remain" ]; then # This operation removes everything up to the "/" character, # effectively removing the port number from the string: readonly WSREP_SST_OPT_PATH="${remain#*/}" else readonly WSREP_SST_OPT_PATH="" fi WSREP_SST_OPT_ADDR_PORT=$(trim_right "$WSREP_SST_OPT_ADDR_PORT") # Remove the module name part from the string, which ends with "/": remain="${WSREP_SST_OPT_PATH#*/}" # This operation removes the tail after the very first occurrence # of the "/" character, inclusively: readonly WSREP_SST_OPT_MODULE=$(trim_right "${WSREP_SST_OPT_PATH%%/*}") # If there is one more "/" in the string, then everything before # it will be the LSN, otherwise the LSN is empty: if [ "$remain" != "$WSREP_SST_OPT_PATH" ]; then # Extract the part that matches the LSN by removing all # characters starting from the very first "/": readonly WSREP_SST_OPT_LSN=$(trim_right "${remain%%/*}") # Exctract everything after the first occurrence of # the "/" character in the string: source="$remain" remain="${remain#*/}" # If the remainder does not match the original string, # then there is something else (the version number in # our case): if [ "$remain" != "$source" ]; then # Let's extract the version number by removing the tail # after the very first occurence of the "/" character # (inclusively): readonly WSREP_SST_OPT_SST_VER=$(trim_right "${remain%%/*}") else readonly WSREP_SST_OPT_SST_VER="" fi else readonly WSREP_SST_OPT_LSN="" readonly WSREP_SST_OPT_SST_VER="" fi shift ;; '--bypass') readonly WSREP_SST_OPT_BYPASS=1 ;; '--progress') readonly WSREP_SST_OPT_PROGRESS=$(( $2 )) shift ;; '--datadir') # Let's remove the trailing slash: readonly WSREP_SST_OPT_DATA=$(trim_dir "$2") shift ;; '--aria-log-dir-path') # Let's remove the trailing slash: readonly ARIA_LOG_DIR=$(trim_dir "$2") shift ;; '--innodb-data-home-dir') # Let's remove the trailing slash: readonly INNODB_DATA_HOME_DIR=$(trim_dir "$2") shift ;; '--innodb-log-group-home-dir') # Let's remove the trailing slash: readonly INNODB_LOG_GROUP_HOME=$(trim_dir "$2") shift ;; '--innodb-undo-directory') # Let's remove the trailing slash: readonly INNODB_UNDO_DIR=$(trim_dir "$2") shift ;; '--innodb-buffer-pool-filename') readonly INNODB_BUFFER_POOL=$(trim_string "$2") shift ;; '--innodb-buffer-pool-size') readonly INNODB_BUFFER_POOL_SIZE=$(trim_string "$2") shift ;; '--defaults-file') file=$(trim_string "$2") readonly WSREP_SST_OPT_DEFAULT="$1=$file" readonly WSREP_SST_OPT_DEFAULTS="$1='$file'" shift ;; '--defaults-extra-file') file=$(trim_string "$2") readonly WSREP_SST_OPT_EXTRA_DEFAULT="$1=$file" readonly WSREP_SST_OPT_EXTRA_DEFAULTS="$1='$file'" shift ;; '--defaults-group-suffix') suffix=$(trim_string "$2") readonly WSREP_SST_OPT_SUFFIX_DEFAULT="$1=$suffix" readonly WSREP_SST_OPT_SUFFIX_VALUE="$suffix" shift ;; '--host') addr=$(trim_string "$2") case "$addr" in \[*) # IPv6 # Remove the starting and ending square brackets, if present: addr="${addr#\[}" addr=$(trim_right "${addr%%\]*}") # Some utilities and subsequent code require an address # without square brackets: readonly WSREP_SST_OPT_HOST_UNESCAPED="$addr" # Square brackets are needed in most cases: readonly WSREP_SST_OPT_HOST="[$addr]" # Mark this address as IPv6: readonly WSREP_SST_OPT_HOST_IPv6=1 ;; *) readonly WSREP_SST_OPT_HOST="$addr" readonly WSREP_SST_OPT_HOST_UNESCAPED="$addr" readonly WSREP_SST_OPT_HOST_IPv6=0 ;; esac WSREP_SST_OPT_ADDR="$addr" shift ;; '--local-port') readonly WSREP_SST_OPT_LPORT=$(( $2 )) shift ;; '--parent') readonly WSREP_SST_OPT_PARENT=$(( $2 )) shift ;; '--password') WSREP_SST_OPT_PSWD="$2" shift ;; '--port') readonly WSREP_SST_OPT_PORT=$(( $2 )) shift ;; '--role') readonly WSREP_SST_OPT_ROLE=$(trim_string "$2") shift ;; '--socket') readonly WSREP_SST_OPT_SOCKET=$(trim_string "$2") shift ;; '--user') WSREP_SST_OPT_USER="$2" shift ;; '--gtid') readonly WSREP_SST_OPT_GTID=$(trim_string "$2") shift ;; '--binlog'|'--log-bin') readonly WSREP_SST_OPT_BINLOG=$(trim_string "$2") shift ;; '--binlog-index'|'--log-bin-index') WSREP_SST_OPT_BINLOG_INDEX=$(trim_string "$2") shift ;; '--log-basename') readonly WSREP_SST_OPT_LOG_BASENAME=$(trim_string "$2") shift ;; '--gtid-domain-id') readonly WSREP_SST_OPT_GTID_DOMAIN_ID=$(trim_string "$2") shift ;; '--mysqld-args') original_cmd="" shift cmd_tail=0 while [ $# -gt 0 ]; do lname="${1#--}" # "--" is interpreted as the end of the list of options: if [ -z "$lname" ]; then shift if [ $# -gt 0 ]; then # copy "--" to the output string: original_cmd="$original_cmd --" # All other arguments must be copied unchanged: while [ $# -gt 0 ]; do original_cmd="$original_cmd '$1'" shift done fi break fi # Make sure the argument does not start with "--", otherwise it # is a long option, which is processed after this "if": if [ "$lname" = "$1" ]; then # Check if the argument is the short option or the short # options list, starting with "-": options="${1#-}" if [ "$options" != "$1" -a -n "$options" ]; then slist="" while [ -n "$options" ]; do # Let's separate the first character as the current # option name: if [ -n "$BASH_VERSION" ]; then option="${options:0:1}" elif [ $with_printf -ne 0 ]; then option=$(printf '%.1s' "$options") else # If it's not bash and without printf, # then we need to use slow external utilities: option=$(echo "$options" | cut -c1) fi # And the subsequent characters consider option value: value="" if [ ${#options} -gt 0 ]; then value="${options#?}" fi # Check for options without argument: if [ "$option" != '?' -a \ "$option" != 'a' -a \ "$option" != 's' -a \ "$option" != 'v' ] then # If the option value is absent, then check # the following argument: if [ -z "$value" -a $# -gt 1 ]; then # if the next argument does not start with # the "-" character, then next argument is # the current option value: if [ "${2#-}" = "$2" ]; then shift value="$1" elif [ "$2" = '--' ]; then shift if [ $# -gt 1 ]; then cmd_tail=1 shift value="$1" fi fi fi if [ "$option" = 'h' ]; then if [ -z "$WSREP_SST_OPT_DATA" ]; then MYSQLD_OPT_DATADIR=$(trim_dir "$value") fi elif [ "$option" != 'u' -a \ "$option" != 'P' ] then if [ $cmd_tail -ne 0 ]; then option="$option --" fi if [ -z "$value" ]; then slist="$slist$option" elif [ -z "$slist" ]; then slist="$option '$value'" else slist="$slist -$option '$value'" fi break fi if [ $cmd_tail -ne 0 ]; then if [ -n "$slist" ]; then slist="$slist --" else slist='-' fi fi break else slist="$slist$option" fi options="$value" done if [ -n "$slist" ]; then original_cmd="$original_cmd -$slist" fi elif [ -z "$options" ]; then # We found an minus sign without any characters after it: original_cmd="$original_cmd -" else # We found a value that does not start with a minus - # it is a positional argument or the value of previous # option. Copy it to output string (as is): original_cmd="$original_cmd '$1'" fi shift if [ $cmd_tail -ne 0 ]; then # All other arguments must be copied unchanged: while [ $# -gt 0 ]; do original_cmd="$original_cmd '$1'" shift done break fi continue fi # Now we are sure that we are working with an option # that has a "long" name, so remove all characters after # the first equal sign: option="${1%%=*}" # If the option name contains underscores, then replace # them to minuses: if [ "${option#*_}" != "$option" ]; then option=$(to_minuses "$option") fi # The "--loose-" prefix should not affect the recognition # of the option name: if [ "${option#--loose-}" != "$option" ]; then option="--${option#--loose-}" fi # Some options just need to be removed from the list: if [ "$option" != '--defaults-file' -a \ "$option" != '--defaults-extra-file' -a \ "$option" != '--defaults-group-suffix' -a \ "$option" != '--user' -a \ "$option" != '--port' -a \ "$option" != '--socket' ]; then value="${1#*=}" if [ "$value" = "$1" ]; then value="" fi # Let's fill in the variables containing important paths # that might not have been passed through explicit parameters # (+ removing the trailing slash in these paths). Many of these # options are processed internally within scripts or passed # explicitly to other programs, so we need to remove them # from mysqld's argument list: skip_mysqld_arg=0 case "$option" in '--aria-log-dir-path') if [ -z "$ARIA_LOG_DIR" ]; then MYSQLD_OPT_ARIA_LOG_DIR=$(trim_dir "$value") fi skip_mysqld_arg=1 ;; '--innodb-data-home-dir') if [ -z "$INNODB_DATA_HOME_DIR" ]; then MYSQLD_OPT_INNODB_DATA_HOME_DIR=$(trim_dir "$value") fi skip_mysqld_arg=1 ;; '--innodb-log-group-home-dir') if [ -z "$INNODB_LOG_GROUP_HOME" ]; then MYSQLD_OPT_INNODB_LOG_GROUP_HOME=$(trim_dir "$value") fi skip_mysqld_arg=1 ;; '--innodb-undo-directory') if [ -z "$INNODB_UNDO_DIR" ]; then MYSQLD_OPT_INNODB_UNDO_DIR=$(trim_dir "$value") fi skip_mysqld_arg=1 ;; '--innodb-buffer-pool-filename') if [ -z "$INNODB_BUFFER_POOL" ]; then MYSQLD_OPT_INNODB_BUFFER_POOL=$(trim_string "$value") fi skip_mysqld_arg=1 ;; '--innodb-buffer-pool-size') if [ -z "$INNODB_BUFFER_POOL_SIZE" ]; then MYSQLD_OPT_INNODB_BUFFER_POOL_SIZE=$(trim_string "$value") fi skip_mysqld_arg=1 ;; '--innodb-force-recovery') if [ -n "$value" -a "$value" != "0" ]; then INNODB_FORCE_RECOVERY=$(trim_string "$value") fi skip_mysqld_arg=1 ;; '--log-bin') if [ -z "$WSREP_SST_OPT_BINLOG" ]; then MYSQLD_OPT_LOG_BIN=$(trim_string "$value") fi skip_mysqld_arg=1 ;; '--log-bin-index') if [ -z "$WSREP_SST_OPT_BINLOG_INDEX" ]; then MYSQLD_OPT_LOG_BIN_INDEX=$(trim_string "$value") fi skip_mysqld_arg=1 ;; '--log-basename') if [ -z "$WSREP_SST_OPT_LOG_BASENAME" ]; then MYSQLD_OPT_LOG_BASENAME=$(trim_string "$value") fi skip_mysqld_arg=1 ;; '--datadir') if [ -z "$WSREP_SST_OPT_DATA" ]; then MYSQLD_OPT_DATADIR=$(trim_dir "$value") fi skip_mysqld_arg=1 ;; esac if [ $skip_mysqld_arg -eq 0 ]; then original_cmd="$original_cmd '$1'" fi fi shift done WSREP_SST_OPT_MYSQLD="${original_cmd# *}" break ;; *) # Must be command usage # exit 1 ;; esac shift done WSREP_TRANSFER_TYPE='SST' [ $WSREP_SST_OPT_BYPASS -ne 0 ] && readonly WSREP_TRANSFER_TYPE='IST' # Let's take the name of the current script as a base, # removing the directory, extension and "wsrep_sst_" prefix: WSREP_METHOD="${0##*/}" WSREP_METHOD="${WSREP_METHOD%.*}" readonly WSREP_METHOD="${WSREP_METHOD#wsrep_sst_}" if [ -n "${WSREP_SST_OPT_ROLE+x}" ]; then if [ "$WSREP_SST_OPT_ROLE" != 'donor' -a \ "$WSREP_SST_OPT_ROLE" != 'joiner' ] then wsrep_log_error "Unrecognized role: '$WSREP_SST_OPT_ROLE'" exit 22 # EINVAL fi else readonly WSREP_SST_OPT_ROLE='donor' fi readonly WSREP_SST_OPT_PROGRESS # The same argument can be present on the command line several # times, in this case we must take its last value: if [ -n "${MYSQLD_OPT_ARIA_LOG_DIR:-}" -a \ -z "$ARIA_LOG_DIR" ]; then readonly ARIA_LOG_DIR="$MYSQLD_OPT_ARIA_LOG_DIR" fi if [ -n "${MYSQLD_OPT_INNODB_DATA_HOME_DIR:-}" -a \ -z "$INNODB_DATA_HOME_DIR" ]; then readonly INNODB_DATA_HOME_DIR="$MYSQLD_OPT_INNODB_DATA_HOME_DIR" fi if [ -n "${MYSQLD_OPT_INNODB_LOG_GROUP_HOME:-}" -a \ -z "$INNODB_LOG_GROUP_HOME" ]; then readonly INNODB_LOG_GROUP_HOME="$MYSQLD_OPT_INNODB_LOG_GROUP_HOME" fi if [ -n "${MYSQLD_OPT_INNODB_UNDO_DIR:-}" -a \ -z "$INNODB_UNDO_DIR" ]; then readonly INNODB_UNDO_DIR="$MYSQLD_OPT_INNODB_UNDO_DIR" fi if [ -n "${MYSQLD_OPT_INNODB_BUFFER_POOL:-}" -a \ -z "$INNODB_BUFFER_POOL" ]; then readonly INNODB_BUFFER_POOL="$MYSQLD_OPT_INNODB_BUFFER_POOL" fi if [ -n "${MYSQLD_OPT_INNODB_BUFFER_POOL_SIZE:-}" -a \ -z "$INNODB_BUFFER_POOL_SIZE" ]; then readonly INNODB_BUFFER_POOL_SIZE="$MYSQLD_OPT_INNODB_BUFFER_POOL_SIZE" fi if [ -n "${MYSQLD_OPT_LOG_BIN:-}" -a \ -z "$WSREP_SST_OPT_BINLOG" ]; then readonly WSREP_SST_OPT_BINLOG="$MYSQLD_OPT_LOG_BIN" fi if [ -n "${MYSQLD_OPT_LOG_BIN_INDEX:-}" -a \ -z "$WSREP_SST_OPT_BINLOG_INDEX" ]; then WSREP_SST_OPT_BINLOG_INDEX="$MYSQLD_OPT_LOG_BIN_INDEX" fi if [ -n "${MYSQLD_OPT_DATADIR:-}" -a \ -z "$WSREP_SST_OPT_DATA" ]; then readonly WSREP_SST_OPT_DATA="$MYSQLD_OPT_DATADIR" fi if [ -n "${MYSQLD_OPT_LOG_BASENAME:-}" -a \ -z "$WSREP_SST_OPT_LOG_BASENAME" ]; then readonly WSREP_SST_OPT_LOG_BASENAME="$MYSQLD_OPT_LOG_BASENAME" fi # If the --log-bin option is present without a value, then # set WSREP_SST_OPT_BINLOG value using other arguments: if [ -z "$WSREP_SST_OPT_BINLOG" -a -n "${MYSQLD_OPT_LOG_BIN+x}" ]; then if [ -n "$WSREP_SST_OPT_LOG_BASENAME" ]; then # If the WSREP_SST_OPT_BINLOG variable is not set, but # --log-basename is present among the arguments to mysqld, # then set WSREP_SST_OPT_BINLOG equal to the base name # with the "-bin" suffix: readonly WSREP_SST_OPT_BINLOG="$WSREP_SST_OPT_LOG_BASENAME-bin" else # Take the default name: readonly WSREP_SST_OPT_BINLOG='mysql-bin' fi fi # Reconstructing the command line arguments that control the innodb # and binlog options: if [ -n "$WSREP_SST_OPT_LOG_BASENAME" ]; then if [ -n "$WSREP_SST_OPT_MYSQLD" ]; then WSREP_SST_OPT_MYSQLD="--log-basename='$WSREP_SST_OPT_LOG_BASENAME' $WSREP_SST_OPT_MYSQLD" else WSREP_SST_OPT_MYSQLD="--log-basename='$WSREP_SST_OPT_LOG_BASENAME'" fi fi if [ -n "$ARIA_LOG_DIR" ]; then INNOEXTRA="$INNOEXTRA --aria-log-dir-path='$ARIA_LOG_DIR'" fi if [ -n "$INNODB_DATA_HOME_DIR" ]; then INNOEXTRA="$INNOEXTRA --innodb-data-home-dir='$INNODB_DATA_HOME_DIR'" fi if [ -n "$INNODB_LOG_GROUP_HOME" ]; then INNOEXTRA="$INNOEXTRA --innodb-log-group-home-dir='$INNODB_LOG_GROUP_HOME'" fi if [ -n "$INNODB_UNDO_DIR" ]; then INNOEXTRA="$INNOEXTRA --innodb-undo-directory='$INNODB_UNDO_DIR'" fi if [ -n "$INNODB_BUFFER_POOL" ]; then INNOEXTRA="$INNOEXTRA --innodb-buffer-pool-filename='$INNODB_BUFFER_POOL'" fi if [ -n "$INNODB_BUFFER_POOL_SIZE" ]; then INNOEXTRA="$INNOEXTRA --innodb-buffer-pool-size='$INNODB_BUFFER_POOL_SIZE'" fi if [ -n "$WSREP_SST_OPT_BINLOG" ]; then INNOEXTRA="$INNOEXTRA --log-bin='$WSREP_SST_OPT_BINLOG'" if [ -n "$WSREP_SST_OPT_BINLOG_INDEX" ]; then if [ -n "$WSREP_SST_OPT_MYSQLD" ]; then WSREP_SST_OPT_MYSQLD="--log-bin-index='$WSREP_SST_OPT_BINLOG_INDEX' $WSREP_SST_OPT_MYSQLD" else WSREP_SST_OPT_MYSQLD="--log-bin-index='$WSREP_SST_OPT_BINLOG_INDEX'" fi fi fi readonly INNODB_FORCE_RECOVERY readonly WSREP_SST_OPT_MYSQLD get_binlog() { # if no command line argument and WSREP_SST_OPT_BINLOG is not set, # try to get it from my.cnf: if [ -z "$WSREP_SST_OPT_BINLOG" ]; then WSREP_SST_OPT_BINLOG=$(parse_cnf '--mysqld' 'log-bin') fi # if no command line argument and WSREP_SST_OPT_BINLOG_INDEX is not set, # try to get it from my.cnf: if [ -z "$WSREP_SST_OPT_BINLOG_INDEX" ]; then WSREP_SST_OPT_BINLOG_INDEX=$(parse_cnf '--mysqld' 'log-bin-index') fi # if no command line argument and WSREP_SST_OPT_LOG_BASENAME is not set, # then try to get it from my.cnf: if [ -z "$WSREP_SST_OPT_LOG_BASENAME" ]; then WSREP_SST_OPT_LOG_BASENAME=$(parse_cnf '--mysqld' 'log-basename') fi if [ -z "$WSREP_SST_OPT_BINLOG" ]; then # If the log-bin option is specified without a parameter, # then we need to build the name of the index file according # to the rules described in the server documentation: if [ $(in_config '--mysqld' 'log-bin') -ne 0 ]; then if [ -n "$WSREP_SST_OPT_LOG_BASENAME" ]; then # If the WSREP_SST_OPT_BINLOG variable is not set, but # --log-basename is present among the arguments of mysqld, # then set WSREP_SST_OPT_BINLOG equal to the base name # with the "-bin" suffix: readonly WSREP_SST_OPT_BINLOG="$WSREP_SST_OPT_LOG_BASENAME-bin" else # Take the default name: readonly WSREP_SST_OPT_BINLOG='mysql-bin' fi fi fi if [ -n "$WSREP_SST_OPT_BINLOG" ]; then # If the name of the index file is not specified, then we will build # it according to the specifications for the server: if [ -z "$WSREP_SST_OPT_BINLOG_INDEX" ]; then if [ -n "$WSREP_SST_OPT_LOG_BASENAME" ]; then # If the WSREP_SST_OPT_BINLOG_INDEX variable is not set, but # --log-basename is present among the arguments of mysqld, # then set WSREP_SST_OPT_BINLOG_INDEX equal to the base name # with the "-bin" suffix: readonly WSREP_SST_OPT_BINLOG_INDEX="$WSREP_SST_OPT_LOG_BASENAME-bin.index" else # Use the default name (note that base of this name # is already defined above): readonly WSREP_SST_OPT_BINLOG_INDEX="$WSREP_SST_OPT_BINLOG.index" fi else # Remove all directories from the index file path: local filename="${WSREP_SST_OPT_BINLOG_INDEX##*/}" # Check if the index file name contains the extension: if [ "${filename%.*}" = "$filename" ]; then # Let's add the default extension (".index"): readonly WSREP_SST_OPT_BINLOG_INDEX="$WSREP_SST_OPT_BINLOG_INDEX.index" else readonly WSREP_SST_OPT_BINLOG_INDEX fi fi fi } # Check the presence of the port value and, if necessary, transfer # the port number from the address to the WSREP_SST_OPT_PORT variable # or vice versa, and also, if necessary, substitute the missing port # value into the address value: if [ -n "$WSREP_SST_OPT_ADDR_PORT" ]; then if [ -n "$WSREP_SST_OPT_PORT" ]; then if [ "$WSREP_SST_OPT_PORT" != "$WSREP_SST_OPT_ADDR_PORT" ]; then echo "WSREP_SST: [ERROR] port in --port=$WSREP_SST_OPT_PORT" \ "differs from port in --address=$WSREP_SST_OPT_ADDR" >&2 exit 2 fi else # If the address contains a port number, assign it to # the corresponding variable: readonly WSREP_SST_OPT_PORT="$WSREP_SST_OPT_ADDR_PORT" fi else # If the port is missing, take the default port: if [ -z "$WSREP_SST_OPT_PORT" ]; then readonly WSREP_SST_OPT_PORT=4444 fi WSREP_SST_OPT_ADDR_PORT="$WSREP_SST_OPT_PORT" fi # Let's construct a new value for the address with the port: sst_path="${WSREP_SST_OPT_PATH:+/}$WSREP_SST_OPT_PATH" WSREP_SST_OPT_ADDR="$WSREP_SST_OPT_HOST:$WSREP_SST_OPT_PORT$sst_path" readonly WSREP_SST_OPT_ADDR readonly WSREP_SST_OPT_ADDR_PORT # try to use my_print_defaults, mysql and mysqldump that come # with the sources (for MTR suite): script_binary=$(dirname "$0") SCRIPTS_DIR=$(cd "$script_binary"; pwd) EXTRA_DIR="$SCRIPTS_DIR/../extra" if [ -x "$SCRIPTS_DIR/my_print_defaults" ]; then MY_PRINT_DEFAULTS="$SCRIPTS_DIR/my_print_defaults" elif [ -x "$EXTRA_DIR/my_print_defaults" ]; then MY_PRINT_DEFAULTS="$EXTRA_DIR/my_print_defaults" else MY_PRINT_DEFAULTS=$(commandex 'my_print_defaults') if [ -z "$MY_PRINT_DEFAULTS" ]; then wsrep_log_error "my_print_defaults not found in path" exit 2 fi fi readonly MY_PRINT_DEFAULTS wsrep_defaults="$WSREP_SST_OPT_DEFAULTS" wsrep_defaults="$wsrep_defaults${WSREP_SST_OPT_EXTRA_DEFAULTS:+ }$WSREP_SST_OPT_EXTRA_DEFAULTS" wsrep_defaults="$wsrep_defaults${WSREP_SST_OPT_SUFFIX_DEFAULT:+ }$WSREP_SST_OPT_SUFFIX_DEFAULT" readonly WSREP_SST_OPT_CONF="${wsrep_defaults:+ }$wsrep_defaults" wsrep_defaults="$WSREP_SST_OPT_DEFAULT" wsrep_defaults="$wsrep_defaults${WSREP_SST_OPT_EXTRA_DEFAULT:+ }$WSREP_SST_OPT_EXTRA_DEFAULT" wsrep_defaults="$wsrep_defaults${WSREP_SST_OPT_SUFFIX_DEFAULT:+ }$WSREP_SST_OPT_SUFFIX_DEFAULT" readonly WSREP_SST_OPT_CONF_UNQUOTED="${wsrep_defaults:+ }$wsrep_defaults" # # User can specify mariabackup specific settings that will be used during sst # process like encryption, etc. Parse such configuration option. # # 1st parameter: group (config file section like sst) or # my_print_defaults argument (like --mysqld) # 2nd parameter: var : name of the variable in the section, e.g. server-id # 3rd parameter: default value for the parameter # parse_cnf() { local groups="$1" local var="$2" local reval="" # normalize the variable names specified in the .cnf file # (user can use '_' or '-', for example, log-bin or log_bin), # then search for the last instance of the desired variable # and finally get the value of that variable (if the variable # was specified several times - we use only its last instance): local pattern='BEGIN {OFS=FS="="} {sub(/^--loose/,"-",$0); gsub(/_/,"-",$1); if ($1=="--'"$var"'") lastval=substr($0,length($1)+2)} END {print lastval}' while [ -n "$groups" ]; do # Remove the largest suffix starting with the '|' character: local group="${groups%%\|*}" # Remove the remainder (the group name) from the rest # of the groups list (as if it were a prefix): if [ "$group" != "$groups" ]; then groups="${groups#*\|}" else groups="" fi # If the group name is the same as the "mysqld" without "--" prefix, # then try to use it together with the group suffix: if [ "$group" = 'mysqld' -a -n "$WSREP_SST_OPT_SUFFIX_VALUE" ]; then reval=$("$MY_PRINT_DEFAULTS" \ ${WSREP_SST_OPT_DEFAULT:+"$WSREP_SST_OPT_DEFAULT"} \ ${WSREP_SST_OPT_EXTRA_DEFAULT:+"$WSREP_SST_OPT_EXTRA_DEFAULT"} \ ${WSREP_SST_OPT_SUFFIX_DEFAULT:+"$WSREP_SST_OPT_SUFFIX_DEFAULT"} \ "mysqld$WSREP_SST_OPT_SUFFIX_VALUE" | awk "$pattern") if [ -n "$reval" ]; then break fi fi # Let's try to use the group name as it is: reval=$("$MY_PRINT_DEFAULTS" \ ${WSREP_SST_OPT_DEFAULT:+"$WSREP_SST_OPT_DEFAULT"} \ ${WSREP_SST_OPT_EXTRA_DEFAULT:+"$WSREP_SST_OPT_EXTRA_DEFAULT"} \ ${WSREP_SST_OPT_SUFFIX_DEFAULT:+"$WSREP_SST_OPT_SUFFIX_DEFAULT"} \ "$group" | awk "$pattern") if [ -n "$reval" ]; then break fi done # Use default if we haven't found a value: [ -z "$reval" ] && reval="${3:-}" # Truncate spaces: [ -n "$reval" ] && reval=$(trim_string "$reval") echo "$reval" } # # This function simply checks for the presence of the parameter # in the config file, but does not return its value. It returns "1" # (true) even if the parameter is present in the configuration file # without a value: # in_config() { local groups="$1" local var="$2" local found=0 # normalize the variable names specified in the .cnf file # (user can use '_' or '-', for example, log-bin or log_bin), # then search for the last instance(s) of the desired variable: local pattern='BEGIN {OFS=FS="="; found=0} {sub(/^--loose/,"-",$0); gsub(/_/,"-",$1); if ($1=="--'"$var"'") found=1} END {print found}' while [ -n "$groups" ]; do # Remove the largest suffix starting with the '|' character: local group="${groups%%\|*}" # Remove the remainder (the group name) from the rest # of the groups list (as if it were a prefix): if [ "$group" != "$groups" ]; then groups="${groups#*\|}" else groups="" fi # If the group name is the same as the "mysqld" without "--" prefix, # then try to use it together with the group suffix: if [ "$group" = 'mysqld' -a -n "$WSREP_SST_OPT_SUFFIX_VALUE" ]; then found=$("$MY_PRINT_DEFAULTS" \ ${WSREP_SST_OPT_DEFAULT:+"$WSREP_SST_OPT_DEFAULT"} \ ${WSREP_SST_OPT_EXTRA_DEFAULT:+"$WSREP_SST_OPT_EXTRA_DEFAULT"} \ ${WSREP_SST_OPT_SUFFIX_DEFAULT:+"$WSREP_SST_OPT_SUFFIX_DEFAULT"} \ "mysqld$WSREP_SST_OPT_SUFFIX_VALUE" | awk "$pattern") if [ $found -ne 0 ]; then break fi fi # Let's try to use the group name as it is: found=$($MY_PRINT_DEFAULTS \ ${WSREP_SST_OPT_DEFAULT:+"$WSREP_SST_OPT_DEFAULT"} \ ${WSREP_SST_OPT_EXTRA_DEFAULT:+"$WSREP_SST_OPT_EXTRA_DEFAULT"} \ ${WSREP_SST_OPT_SUFFIX_DEFAULT:+"$WSREP_SST_OPT_SUFFIX_DEFAULT"} \ "$group" | awk "$pattern") if [ $found -ne 0 ]; then break fi done echo $found } # Get rid of incorrect values resulting from substitution # in programs external to the script: if [ "$WSREP_SST_OPT_USER" = '(null)' ]; then WSREP_SST_OPT_USER="" fi if [ "$WSREP_SST_OPT_PSWD" = '(null)' ]; then WSREP_SST_OPT_PSWD="" fi if [ "$WSREP_SST_OPT_AUTH" = '(null)' ]; then WSREP_SST_OPT_AUTH="" fi # Let's read the value of the authentication string from the # configuration file so that it does not go to the command line # and does not appear in the ps output: if [ -z "$WSREP_SST_OPT_AUTH" ]; then WSREP_SST_OPT_AUTH=$(parse_cnf 'sst' 'wsrep-sst-auth') fi # Splitting WSREP_SST_OPT_AUTH as "user:password" pair: if [ -n "$WSREP_SST_OPT_AUTH" ]; then # Extract username as shortest prefix up to first ':' character: WSREP_SST_OPT_AUTH_USER="${WSREP_SST_OPT_AUTH%%:*}" if [ -z "$WSREP_SST_OPT_USER" ]; then # if the username is not in the command line arguments, # set the username and password using WSREP_SST_OPT_AUTH # from the environment: WSREP_SST_OPT_USER="$WSREP_SST_OPT_AUTH_USER" WSREP_SST_OPT_PSWD="${WSREP_SST_OPT_AUTH#*:}" elif [ "$WSREP_SST_OPT_USER" = "$WSREP_SST_OPT_AUTH_USER" ]; then # If the username in the command line arguments and in # the environment variable are the same, set the password # if it was not specified in the command line: if [ -z "$WSREP_SST_OPT_PSWD" ]; then WSREP_SST_OPT_PSWD="${WSREP_SST_OPT_AUTH#*:}" fi else # The username is passed through the command line and does # not match the username in the environment variable - ignore # the environment and rebuild the authentication parameters: WSREP_SST_OPT_AUTH="$WSREP_SST_OPT_USER:$WSREP_SST_OPT_PSWD" fi fi WSREP_SST_OPT_REMOTE_AUTH="${WSREP_SST_OPT_REMOTE_AUTH:-}" WSREP_SST_OPT_REMOTE_USER= WSREP_SST_OPT_REMOTE_PSWD= if [ -n "$WSREP_SST_OPT_REMOTE_AUTH" ]; then # Split auth string at the last ':' WSREP_SST_OPT_REMOTE_USER="${WSREP_SST_OPT_REMOTE_AUTH%%:*}" WSREP_SST_OPT_REMOTE_PSWD="${WSREP_SST_OPT_REMOTE_AUTH#*:}" fi readonly WSREP_SST_OPT_USER readonly WSREP_SST_OPT_PSWD readonly WSREP_SST_OPT_AUTH readonly WSREP_SST_OPT_REMOTE_USER readonly WSREP_SST_OPT_REMOTE_PSWD readonly WSREP_SST_OPT_REMOTE_AUTH if [ -n "$WSREP_SST_OPT_DATA" ]; then SST_PROGRESS_FILE="$WSREP_SST_OPT_DATA/sst_in_progress" else SST_PROGRESS_FILE="" fi wsrep_cleanup_progress_file() { if [ -n "$SST_PROGRESS_FILE" -a -f "$SST_PROGRESS_FILE" ]; then rm -f "$SST_PROGRESS_FILE" 2>/dev/null || : fi } wsrep_check_program() { local prog="$1" local cmd=$(commandex "$prog") if [ -z "$cmd" ]; then wsrep_log_error "'$prog' not found in path" return 2 # no such file or directory fi } wsrep_check_programs() { local ret=0 while [ $# -gt 0 ]; do wsrep_check_program "$1" || ret=$? shift done return $ret } wsrep_check_datadir() { if [ -z "$WSREP_SST_OPT_DATA" ]; then wsrep_log_error \ "The '--datadir' parameter must be passed to the SST script" exit 2 fi } get_openssl() { # If the OPENSSL_BINARY variable is already defined, just return: if [ -n "${OPENSSL_BINARY+x}" ]; then return 0 fi # Let's look for openssl: OPENSSL_BINARY=$(commandex 'openssl') if [ -z "$OPENSSL_BINARY" ]; then OPENSSL_BINARY='/usr/bin/openssl' if [ ! -x "$OPENSSL_BINARY" ]; then OPENSSL_BINARY="" fi fi readonly OPENSSL_BINARY } # # Generate a string equivalent to 16 random bytes # wsrep_gen_secret() { get_openssl if [ -n "$OPENSSL_BINARY" ]; then "$OPENSSL_BINARY" rand -hex 16 elif [ -n "$BASH_VERSION" ]; then printf '%04x%04x%04x%04x%04x%04x%04x%04x' \ $RANDOM $RANDOM $RANDOM $RANDOM \ $RANDOM $RANDOM $RANDOM $RANDOM elif [ $with_printf -ne 0 -a -n "$(commandex cksum)" ]; then printf '%08x%08x%08x%08x' \ $(head -8 /dev/urandom | cksum | cut -d ' ' -f1) \ $(head -8 /dev/urandom | cksum | cut -d ' ' -f1) \ $(head -8 /dev/urandom | cksum | cut -d ' ' -f1) \ $(head -8 /dev/urandom | cksum | cut -d ' ' -f1) else wsrep_log_error "Unable to generate 16-byte secret" exit 22 fi } # # Checking if the address passed to us is local. # If the second parameter is nonzero, then this function # does not check for matches with local domain names: # is_local_ip() { # Rapid recognition of the most common cases: [ "$1" = '127.0.0.1' -o \ "$1" = '127.0.0.2' -o \ "$1" = 'localhost' -o \ "$1" = '::1' ] && return 0 # If the address starts with "127." this is probably a local # address, but we need to clarify what follows this prefix: if [ "${1#127.}" != "$1" ]; then # All 127.0.0.0/8 addresses are local: if echo "$1" | grep -q -E '^127\.[0-9]+\.[0-9]+\.[0-9]+$'; then return 0 fi fi # If the second parameter is nonzero, then we will skip # the domain name check: if [ "${2:-0}" -eq 0 ]; then # We consider all the names of a given host to be local addresses: [ "$1" = "$(hostname -s 2>/dev/null)" -o \ "$1" = "$(hostname -f 2>/dev/null)" -o \ "$1" = "$(hostname -d 2>/dev/null)" ] && return 0 fi # If the address contains anything other than digits # and separators, it is not a local address: [ "${1#*[!0-9.]}" != "$1" ] && \ [ "${1#*[!0-9A-Fa-f:\[\]]}" != "$1" ] && return 1 # Now let's check if the given address is assigned to # one of the network cards: local ip_util=$(commandex 'ip') if [ -n "$ip_util" ]; then # ip address show ouput format is " inet[6] <address>/<mask>": "$ip_util" address show \ | grep -o -E '^[[:space:]]*inet.?[[:space:]]+[^[:space:]]+/' \ | grep -qw -F -- "$1/" && return 0 else local ifconfig_util=$(commandex 'ifconfig') if [ -n "$ifconfig_util" ]; then # ifconfig output format is " inet[6] <address> ...": "$ifconfig_util" \ | grep -o -E '^[[:space:]]*inet.?[[:space:]]+[^[:space:]]+' \ | grep -qw -F -- "$1" && return 0 fi fi return 1 } check_sockets_utils() { # The presence of any of these utilities is enough for us: lsof_available=0 sockstat_available=0 ss_available=0 socket_utility="$(commandex ss)" if [ -n "$socket_utility" ]; then socket_uname='ss' ss_available=1 ss_opts='-nlp' # Let's check that ss has an option to skip headers: if $socket_utility -h 2>&1 | grep -qw -F -- '-H'; then ss_available=2 ss_opts="${ss_opts}H" fi else socket_utility="$(commandex sockstat)" if [ -n "$socket_utility" ]; then socket_uname='sockstat' sockstat_available=1 sockstat_opts='-p' if [ "$OS" = 'FreeBSD' ]; then # sockstat in FreeBSD is different from other systems, # let's denote it with a different value: sockstat_available=2 sockstat_opts='-46lq -P tcp -p' fi else socket_utility="$(commandex lsof)" if [ -n "$socket_utility" ]; then socket_uname='lsof' lsof_available=1 lsof_opts='-Pnl' # Let's check that lsof has an option to bypass blocking: if $socket_utility -h 2>&1 | grep -qw -F -- '-b'; then lsof_available=2 lsof_opts="$lsof_opts -b -w" else lsof_opts="$lsof_opts -S 10" fi else wsrep_log_error "Neither lsof, nor sockstat, nor ss tool" \ "were found in the path. Make sure you have" \ "at least one of them installed." exit 2 # ENOENT fi fi fi wsrep_log_info "'$socket_uname' is selected as a socket" \ "information utility." } # # Check if the port is in the "listen" state. # The first parameter is the PID of the process that should # listen on the port - if it is not known, you can specify # an empty string or zero. # The second parameter is the port number. # The third parameter is a list of the names of utilities # (via "|") that can listen on this port during the state # transfer. # check_port() { local pid="${1:-0}" local port="$2" local utils="$3" [ $pid -le 0 ] && pid='[0-9]+' local rc=2 # ENOENT if [ $ss_available -ne 0 ]; then $socket_utility $ss_opts -t "( sport = :$port )" 2>/dev/null | \ grep -q -E "[[:space:]]users:[[:space:]]?\\(.*\\(\"($utils)[^[:space:]]*\"[^)]*,pid=$pid(,[^)]*)?\\)" && rc=0 elif [ $sockstat_available -ne 0 ]; then if [ $sockstat_available -gt 1 ]; then # The sockstat command on FreeBSD does not return # the connection state without special option, but # it supports filtering by connection state: local out out=$($socket_utility $sockstat_opts "$port" 2>/dev/null) || rc=16 # EBUSY # On FreeBSD, the sockstat utility may exit without # any output due to locking issues in certain versions; # let's return a special exit code in such cases: if [ $rc -eq 16 -o -z "$out" ]; then return 16 # EBUSY fi echo "$out" | \ grep -q -E "^[^[:space:]]+[[:space:]]+($utils)[^[:space:]]*[[:space:]]+$pid([[:space:]]|\$)" && rc=0 else $socket_utility $sockstat_opts "$port" 2>/dev/null | \ grep -q -E "^[^[:space:]]+[[:space:]]+($utils)[^[:space:]]*[[:space:]]+$pid([[:space:]].+)?[[:space:]]LISTEN([[:space:]]|\$)" && rc=0 fi elif [ $lsof_available -ne 0 ]; then $socket_utility $lsof_opts -i ":$port" 2>/dev/null | \ grep -q -E "^($utils)[^[:space:]]*[[:space:]]+$pid([[:space:]].+)?[[:space:]]\\(LISTEN\\)([[:space:]]|\$)" && rc=0 else wsrep_log_error "Unknown sockets utility" exit 2 # ENOENT fi return $rc } # # If the ssl_dhparams variable is already set, uses that as a source # of dh parameters for OpenSSL. Otherwise, looks for dhparams.pem in # the datadir, and creates it there if it can't find the file. # check_for_dhparams() { ssl_dhparams="$DATA/dhparams.pem" get_openssl if [ -n "$OPENSSL_BINARY" ]; then wsrep_log_info \ "Could not find dhparams file, creating $ssl_dhparams" local bug=0 local errmsg errmsg=$("$OPENSSL_BINARY" \ dhparam -out "$ssl_dhparams" -dsaparam 2048 2>&1) || bug=1 if [ $bug -ne 0 ]; then wsrep_log_info "run: \"$OPENSSL_BINARY\" dhparam"\ "-out \"$ssl_dhparams\" -dsaparam 2048" wsrep_log_info "output: $errmsg" wsrep_log_error "******** ERROR *****************************************" wsrep_log_error "* Could not create the dhparams.pem file with OpenSSL. *" wsrep_log_error "********************************************************" ssl_dhparams="" fi else # Rollback: if openssl is not installed, then use # the default parameters: ssl_dhparams="" fi } # # Verifies that the CA file verifies the certificate. # Doing this here lets us generate better error messages. # # 1st param: path to the CA file. # 2nd param: path to the certificate. # verify_ca_matches_cert() { local cert="$1" local ca="$2" local cap="$3" local readable=1; [ ! -r "$cert" ] && readable=0 [ -n "$ca" -a ! -r "$ca" ] && readable=0 [ -n "$cap" -a ! -r "$cap" ] && readable=0 if [ $readable -eq 0 ]; then wsrep_log_error \ "Both PEM file and CA file (or path) must be readable" exit 22 fi # If the openssl utility is not installed, then # we will not do this certificate check: get_openssl if [ -z "$OPENSSL_BINARY" ]; then wsrep_log_info "openssl utility not found" return fi local not_match=0 local errmsg errmsg=$("$OPENSSL_BINARY" verify -verbose \ ${ca:+ -CAfile} ${ca:+ "$ca"} \ ${cap:+ -CApath} ${cap:+ "$cap"} \ "$cert" 2>&1) || not_match=1 if [ $not_match -eq 1 ]; then wsrep_log_info "run: \"$OPENSSL_BINARY\" verify -verbose${ca:+ -CAfile \"$ca\"}${cap:+ -CApath \"$cap\"} \"$cert\"" wsrep_log_info "output: $errmsg" wsrep_log_error "******** FATAL ERROR ********************************************" wsrep_log_error "* The certifcate and CA (certificate authority) do not match. *" wsrep_log_error "* It does not appear that the certificate was issued by the CA. *" wsrep_log_error "* Please check your certificate and CA files. *" wsrep_log_error "*****************************************************************" exit 22 fi } # # Verifies that the certificate matches the private key. # Doing this will save us having to wait for a timeout that would # otherwise occur. # # 1st param: path to the certificate. # 2nd param: path to the private key. # verify_cert_matches_key() { local cert="$1" local key="$2" if [ ! -r "$key" -o ! -r "$cert" ]; then wsrep_log_error "Both the certificate file and the key file" \ "must be readable" exit 22 fi # If the openssl utility is not installed, then # we will not do this certificate check: get_openssl if [ -z "$OPENSSL_BINARY" ]; then wsrep_log_info "openssl utility not found" return fi # Generate the public key from the cert and the key. # They should match (otherwise we can't create an SSL connection). local pk1=$("$OPENSSL_BINARY" x509 -in "$cert" -pubkey -noout 2>/dev/null || :) local pk2=$("$OPENSSL_BINARY" pkey -in "$key" -pubout 2>/dev/null || :) if [ "$pk1" != "$pk2" ]; then wsrep_log_error "******************* FATAL ERROR *****************" wsrep_log_error "* The certificate and private key do not match. *" wsrep_log_error "* Please check your certificate and key files. *" wsrep_log_error "*************************************************" exit 22 fi } # # Compares two version strings. # The first parameter is the version to be checked; # The second parameter is the minimum version required; # Returns 1 (failure) if $1 >= $2, 0 (success) otherwise. # check_for_version() { local y1="${1#*.}" [ "$y1" = "$1" ] && y1="" local z1="${y1#*.}" [ "$z1" = "$y1" ] && z1="" local w1="${z1#*.}" [ "$w1" = "$z1" ] && w1="" local x1="${1%%.*}" y1="${y1%%.*}" z1="${z1%%.*}" w1="${w1%%.*}" [ -z "$y1" ] && y1=0 [ -z "$z1" ] && z1=0 [ -z "$w1" ] && w1=0 local y2="${2#*.}" [ "$y2" = "$2" ] && y2="" local z2="${y2#*.}" [ "$z2" = "$y2" ] && z2="" local w2="${z2#*.}" [ "$w2" = "$z2" ] && w2="" local x2="${2%%.*}" y2="${y2%%.*}" z2="${z2%%.*}" w2="${w2%%.*}" [ -z "$y2" ] && y2=0 [ -z "$z2" ] && z2=0 [ -z "$w2" ] && w2=0 [ $x1 -lt $x2 ] && return 1 [ $x1 -gt $x2 ] && return 0 [ $y1 -lt $y2 ] && return 1 [ $y1 -gt $y2 ] && return 0 [ $z1 -lt $z2 ] && return 1 [ $z1 -gt $z2 ] && return 0 [ $w1 -lt $w2 ] && return 1 return 0 } # # Check whether process is still running. # The first parameter contains the name of the PID file. # The second parameter is the flag of the need to delete # the PID file. # If the second parameter is not zero and not empty, # then if the process terminates, the corresponding # PID file will be deleted. # This function also sets the CHECK_PID variable to zero # if the process has already exited, or writes the PID # of the process there if it is still running. # check_pid() { local pid_file="$1" if [ -r "$pid_file" ]; then local pid=$(cat "$pid_file" 2>/dev/null || :) if [ -n "$pid" ]; then if [ $pid -gt 0 ]; then if ps -p $pid >/dev/null 2>&1; then CHECK_PID=$pid return 0 fi fi fi local remove=${2:-0} if [ $remove -ne 0 ]; then rm -f "$pid_file" || : fi fi local config="${3:-}" if [ -n "$config" -a -f "$config" ]; then rm -f "$config" || : fi CHECK_PID=0 return 1 } # # Checking that the process with the specified PID is still # running and killing it in this case by sending SIGTERM # (using the "kill" operation). # The first parameter contains PID of the process. # The second and third parameters (both optional) are the names # of the PID and the configuration files, which should be removed # after the process ends. # If the first parameter (PID of the process) is zero, then # the function immediately deletes the PID and the configuration # files (if specified), without any additional checks. # cleanup_pid() { local pid=$1 local pid_file="${2:-}" local config="${3:-}" if [ $pid -gt 0 ]; then if ps -p $pid >/dev/null 2>&1; then if kill $pid >/dev/null 2>&1; then sleep 0.5 local round=0 local force=0 while ps -p $pid >/dev/null 2>&1; do sleep 1 round=$(( round+1 )) if [ $round -eq 16 ]; then if [ $force -eq 0 ]; then round=8 force=1 kill -9 $pid >/dev/null 2>&1 || : sleep 0.5 else return 1 fi fi done elif ps -p $pid >/dev/null 2>&1; then wsrep_log_warning "Unable to kill PID=$pid${pid_file:+ ($pid_file)}" return 1 fi fi fi [ -n "$pid_file" -a -f "$pid_file" ] && rm -f "$pid_file" || : [ -n "$config" -a -f "$config" ] && rm -f "$config" || : return 0 } nproc="" get_proc() { if [ -z "$nproc" ]; then set +e if [ "$OS" = 'Linux' ]; then nproc=$(grep -cw -E '^processor' /proc/cpuinfo 2>/dev/null || :) elif [ "$OS" = 'Darwin' -o "$OS" = 'FreeBSD' ]; then nproc=$(sysctl -n hw.ncpu) fi set -e if [ -z "$nproc" ] || [ $nproc -eq 0 ]; then nproc=1 fi fi } check_server_ssl_config() { # backward-compatible behavior: tcert=$(parse_cnf 'sst' 'tca') tcap=$(parse_cnf 'sst' 'tcapath') tpem=$(parse_cnf 'sst' 'tcert') tkey=$(parse_cnf 'sst' 'tkey') # reading new ssl configuration options: local tcert2=$(parse_cnf "$encgroups" 'ssl-ca') local tcap2=$(parse_cnf "$encgroups" 'ssl-capath') local tpem2=$(parse_cnf "$encgroups" 'ssl-cert') local tkey2=$(parse_cnf "$encgroups" 'ssl-key') # if there are no old options, then we take new ones: if [ -z "$tcert" -a -z "$tcap" -a -z "$tpem" -a -z "$tkey" ]; then tcert="$tcert2" tcap="$tcap2" tpem="$tpem2" tkey="$tkey2" # checking for presence of the new-style SSL configuration: elif [ -n "$tcert2" -o -n "$tcap2" -o -n "$tpem2" -o -n "$tkey2" ]; then if [ "$tcert" != "$tcert2" -o \ "$tcap" != "$tcap2" -o \ "$tpem" != "$tpem2" -o \ "$tkey" != "$tkey2" ] then wsrep_log_info \ "new ssl configuration options (ssl-ca[path], ssl-cert" \ "and ssl-key) are ignored by SST due to presence" \ "of the tca[path], tcert and/or tkey in the [sst] section" fi fi if [ -n "$tcert" ]; then if [ "${tcert%/}" != "$tcert" -o -d "$tcert" ]; then tcap="$tcert" tcert="" fi fi } # Get Common Name (CN) from the certificate: openssl_getCN() { get_openssl if [ -z "$OPENSSL_BINARY" ]; then wsrep_log_error \ 'openssl not found but it is required for authentication' exit 42 fi local bug=0 local CN=$("$OPENSSL_BINARY" x509 -noout -subject -in "$1" 2>&1) || bug=1 if [ $bug -ne 0 ]; then wsrep_log_info "run: \"$OPENSSL_BINARY\" x509 -noout -subject -in \"$1\"" wsrep_log_info "output: $CN" wsrep_log_error "******** FATAL ERROR **********************************************" wsrep_log_error "* Unable to parse the certificate file to obtain the common name. *" wsrep_log_error "*******************************************************************" exit 22 fi CN=$(trim_string "$CN") if [ -n "$CN" ]; then # If the string begins with the "subject" prefix # then we need to remove it: local saved="$CN" local remain="${CN#subject}" if [ "$remain" != "$saved" ]; then remain=$(trim_left "$remain") # Now let's check for the presence of "=" character # after the "subject": saved="$remain" remain="${remain#=}" if [ "$remain" != "$saved" ]; then remain=$(trim_left "$remain") else remain="" bug=1 fi fi while [ -n "$remain" ]; do local value="" # Let's extract the option name - all characters # up to the first '=' or ',' character (if present): local option="${remain%%[=,]*}" if [ "$option" != "$remain" ]; then option=$(trim_right "$option") # These variables will be needed to determine # which separator comes first: local x="${remain#*=}" local y="${remain#*,}" local z=${#remain} x=${#x}; [ $x -eq $z ] && x=0 y=${#y}; [ $y -eq $z ] && y=0 # The remaining string is everything that follows # the separator character: remain=$(trim_left "${remain#*[=,]}") # Let's check what we are dealing with - an equal # sign or a comma? if [ $x -gt $y ]; then # If the remainder begins with a double quote, # then there is a string containing commas and # we need to parse it: saved="$remain" remain="${remain#\"}" if [ "$remain" != "$saved" ]; then while :; do # We need to find the closing quote: local prefix="$remain" remain="${remain#*\"}" # Let's check if there is a closing quote? if [ "$remain" = "$prefix" ]; then bug=1 break fi # Everything up to the closing quote is # the next part of the value: value="$value${prefix%%\"*}" # But if the last character of the value # is a backslash, then it is a quoted quotation # mark and we need to add it to the value: if [ "${value%\\}" != "$value" ]; then value="$value\"" else break fi done [ $bug -ne 0 ] && break # Now we have to remove "," if it is present # in the string after the value: saved=$(trim_left "$remain") remain="${saved#,}" if [ "$remain" != "$saved" ]; then remain=$(trim_left "$remain") elif [ -n "$remain" ]; then bug=1 break fi else # We are dealing with a simple unquoted string value, # therefore we need to take everything up to the end # of the string, or up to the next comma character: value="${remain%%,*}" if [ "$value" != "$remain" ]; then remain=$(trim_left "${remain#*,}") else remain="" fi value=$(trim_right "$value") fi if [ "$option" = 'CN' -a -n "$value" ]; then echo "$value" return fi fi else remain="" fi done fi if [ $bug -ne 0 ]; then wsrep_log_error "******** FATAL ERROR **********************************************" wsrep_log_error "* Unable to parse the certificate options: '$CN'" wsrep_log_error "*******************************************************************" exit 22 fi echo '' } simple_cleanup() { # Since this is invoked just after exit NNN local estatus=$? if [ $estatus -ne 0 ]; then wsrep_log_error "Cleanup after exit with status: $estatus" fi if [ -n "$SST_PID" ]; then [ "$(pwd)" != "$OLD_PWD" ] && cd "$OLD_PWD" [ -f "$SST_PID" ] && rm -f "$SST_PID" || : fi exit $estatus } create_data() { OLD_PWD="$(pwd)" DATA_DIR="$OLD_PWD" if [ -n "$DATA" -a "$DATA" != '.' ]; then [ ! -d "$DATA" ] && mkdir -p "$DATA" cd "$DATA" DATA_DIR="$(pwd)" cd "$OLD_PWD" fi } create_dirs() { local simplify=${1:-0} # if no command line argument and INNODB_DATA_HOME_DIR environment # variable is not set, try to get it from the my.cnf: if [ -z "$INNODB_DATA_HOME_DIR" ]; then INNODB_DATA_HOME_DIR=$(parse_cnf '--mysqld' 'innodb-data-home-dir') INNODB_DATA_HOME_DIR=$(trim_dir "$INNODB_DATA_HOME_DIR") fi if [ -n "$INNODB_DATA_HOME_DIR" -a "$INNODB_DATA_HOME_DIR" != '.' -a \ "$INNODB_DATA_HOME_DIR" != "$DATA_DIR" ] then # handle both relative and absolute paths: cd "$DATA" [ ! -d "$INNODB_DATA_HOME_DIR" ] && mkdir -p "$INNODB_DATA_HOME_DIR" cd "$INNODB_DATA_HOME_DIR" ib_home_dir="$(pwd)" cd "$OLD_PWD" [ $simplify -ne 0 -a "$ib_home_dir" = "$DATA_DIR" ] && ib_home_dir="" fi # if no command line argument and INNODB_LOG_GROUP_HOME is not set, # then try to get it from the my.cnf: if [ -z "$INNODB_LOG_GROUP_HOME" ]; then INNODB_LOG_GROUP_HOME=$(parse_cnf '--mysqld' 'innodb-log-group-home-dir') INNODB_LOG_GROUP_HOME=$(trim_dir "$INNODB_LOG_GROUP_HOME") fi if [ -n "$INNODB_LOG_GROUP_HOME" -a "$INNODB_LOG_GROUP_HOME" != '.' -a \ "$INNODB_LOG_GROUP_HOME" != "$DATA_DIR" ] then # handle both relative and absolute paths: cd "$DATA" [ ! -d "$INNODB_LOG_GROUP_HOME" ] && mkdir -p "$INNODB_LOG_GROUP_HOME" cd "$INNODB_LOG_GROUP_HOME" ib_log_dir="$(pwd)" cd "$OLD_PWD" [ $simplify -ne 0 -a "$ib_log_dir" = "$DATA_DIR" ] && ib_log_dir="" fi # if no command line argument and INNODB_UNDO_DIR is not set, # then try to get it from the my.cnf: if [ -z "$INNODB_UNDO_DIR" ]; then INNODB_UNDO_DIR=$(parse_cnf '--mysqld' 'innodb-undo-directory') INNODB_UNDO_DIR=$(trim_dir "$INNODB_UNDO_DIR") fi if [ -n "$INNODB_UNDO_DIR" -a "$INNODB_UNDO_DIR" != '.' -a \ "$INNODB_UNDO_DIR" != "$DATA_DIR" ] then # handle both relative and absolute paths: cd "$DATA" [ ! -d "$INNODB_UNDO_DIR" ] && mkdir -p "$INNODB_UNDO_DIR" cd "$INNODB_UNDO_DIR" ib_undo_dir="$(pwd)" cd "$OLD_PWD" [ $simplify -ne 0 -a "$ib_undo_dir" = "$DATA_DIR" ] && ib_undo_dir="" fi # if no command line argument then try to get it from the my.cnf: if [ -z "$ARIA_LOG_DIR" ]; then ARIA_LOG_DIR=$(parse_cnf '--mysqld' 'aria-log-dir-path') ARIA_LOG_DIR=$(trim_dir "$ARIA_LOG_DIR") fi if [ -n "$ARIA_LOG_DIR" -a "$ARIA_LOG_DIR" != '.' -a \ "$ARIA_LOG_DIR" != "$DATA_DIR" ] then # handle both relative and absolute paths: cd "$DATA" [ ! -d "$ARIA_LOG_DIR" ] && mkdir -p "$ARIA_LOG_DIR" cd "$ARIA_LOG_DIR" ar_log_dir="$(pwd)" cd "$OLD_PWD" [ $simplify -ne 0 -a "$ar_log_dir" = "$DATA_DIR" ] && ar_log_dir="" fi return 0 } wait_previous_sst() { # give some time for previous SST to complete: check_round=0 while check_pid "$SST_PID" 1; do wsrep_log_info "Previous SST is not completed, waiting for it to exit" check_round=$(( check_round+1 )) if [ $check_round -eq 30 ]; then wsrep_log_error "previous SST script still running..." exit 114 # EALREADY fi sleep 1 done trap simple_cleanup EXIT echo $$ > "$SST_PID" } DATA="$WSREP_SST_OPT_DATA" wsrep_check_datadir create_data SST_PID="$DATA/wsrep_sst.pid" if [ -n "${MTR_SST_JOINER_DELAY:-}" ]; then MTR_SST_JOINER_DELAY=$(trim_string "$MTR_SST_JOINER_DELAY") fi simulate_long_sst() { # Delay for MTR tests if needed to simulate long SST/IST: if [ ${MTR_SST_JOINER_DELAY:-0} -gt 0 ]; then wsrep_log_info "Sleeping $MTR_SST_JOINER_DELAY seconds for MTR test" sleep $MTR_SST_JOINER_DELAY fi } wsrep_log_info "$WSREP_METHOD $WSREP_TRANSFER_TYPE started on $WSREP_SST_OPT_ROLE"
Upload File
Create Folder