Portál AbcLinuxu, 10. května 2025 09:49

Dotaz: Distcc - Archlinux

Beda0 avatar 26.3.2014 09:16 Beda0 | skóre: 29
Distcc - Archlinux
Přečteno: 886×
Odpovědět | Admin
Zdravím, na Archlinuxu se pokouším podle tohodle návodu zprovoznit cross-compilaci pro Raspberry pi

Problém je s PATH a přístupovými právy.

v /etc/conf.d/distccd mám:
PATH=/home/beda/x-tools6h/arm-unknown-linux-gnueabihf/bin/:$PATH
DISTCC_ARGS="--user nobody --allow ip-raspberry --log-level debug --log-file /tmp/distccd.log"
A výstup makepkg je:
gcc main.c -c
distcc[5508] ERROR: compile main.c on moje-ip failed with exit code 110
distcc[5508] (dcc_build_somewhere) Warning: remote compilation of 'main.c' failed, retrying locally
V logu potom je:
(dcc_execvp) ERROR: failed to exec gcc: Permission denied
Pokud PATH=... z configu smažu, najde to gcc, ale kompilace logicky selže, protože to je jiná architektura. Zkoušel jsem přesunout x-tools do /tmp - pořád to samé. Zkoušel jsem i DISTCC_ARGS="--user beda ... - taky nepomohlo.
$ ls -l
lrwxrwxrwx  1 beda   users       37 26. bře 08.57 addr2line -> arm-unknown-linux-gnueabihf-addr2line
lrwxrwxrwx  1 beda   users       30 26. bře 08.57 ar -> arm-unknown-linux-gnueabihf-ar
-rwxrwxrwx  1 beda   users   696096 24. bře 12.56 arm-unknown-linux-gnueabihf-addr2line
-rwxrwxrwx  1 beda   users   724232 24. bře 12.56 arm-unknown-linux-gnueabihf-ar
-rwxrwxrwx  1 beda   users  1278920 24. bře 12.56 arm-unknown-linux-gnueabihf-as
-rwxrwxrwx  1 beda   users   739360 24. bře 12.56 arm-unknown-linux-gnueabihf-c++
-rwxrwxrwx  1 beda   users   697152 24. bře 12.56 arm-unknown-linux-gnueabihf-c++filt
-rwxrwxrwx  1 beda   users   735328 24. bře 12.56 arm-unknown-linux-gnueabihf-cpp
-rwxrwxrwx  1 beda   users     3254 24. bře 12.02 arm-unknown-linux-gnueabihf-ct-ng.config
-rwxrwxrwx  1 beda   users    27888 24. bře 12.56 arm-unknown-linux-gnueabihf-elfedit
-rwxrwxrwx  1 beda   users   739360 24. bře 12.56 arm-unknown-linux-gnueabihf-g++
-rwxrwxrwx  1 beda   users   735264 24. bře 12.56 arm-unknown-linux-gnueabihf-gcc
-rwxrwxrwx  1 beda   users    25104 24. bře 12.56 arm-unknown-linux-gnueabihf-gcc-ar
-rwxrwxrwx  1 beda   users    25072 24. bře 12.56 arm-unknown-linux-gnueabihf-gcc-nm
-rwxrwxrwx  1 beda   users    25072 24. bře 12.56 arm-unknown-linux-gnueabihf-gcc-ranlib
-rwxrwxrwx  1 beda   users   735264 24. bře 12.56 arm-unknown-linux-gnueabihf-gcc-4.8.2
-rwxrwxrwx  1 beda   users   314744 24. bře 12.56 arm-unknown-linux-gnueabihf-gcov
-rwxrwxrwx  1 beda   users   739360 24. bře 12.56 arm-unknown-linux-gnueabihf-gfortran
-rwxrwxrwx  1 beda   users   760928 24. bře 12.56 arm-unknown-linux-gnueabihf-gprof
-rwxrwxrwx  1 beda   users  1173992 24. bře 12.56 arm-unknown-linux-gnueabihf-ld
-rwxrwxrwx  1 beda   users  1173992 24. bře 12.56 arm-unknown-linux-gnueabihf-ld.bfd
-rwxrwxrwx  1 beda   users    10517 24. bře 12.56 arm-unknown-linux-gnueabihf-ldd
-rwxrwxrwx  1 beda   users   706912 24. bře 12.56 arm-unknown-linux-gnueabihf-nm
-rwxrwxrwx  1 beda   users   881568 24. bře 12.56 arm-unknown-linux-gnueabihf-objcopy
-rwxrwxrwx  1 beda   users  1112384 24. bře 12.56 arm-unknown-linux-gnueabihf-objdump
-rwxrwxrwx  1 beda   users    10431 24. bře 12.56 arm-unknown-linux-gnueabihf-populate
-rwxrwxrwx  1 beda   users   724232 24. bře 12.56 arm-unknown-linux-gnueabihf-ranlib
-rwxrwxrwx  1 beda   users   410992 24. bře 12.56 arm-unknown-linux-gnueabihf-readelf
-rwxrwxrwx  1 beda   users   697472 24. bře 12.56 arm-unknown-linux-gnueabihf-size
-rwxrwxrwx  1 beda   users   697440 24. bře 12.56 arm-unknown-linux-gnueabihf-strings
-rwxrwxrwx  1 beda   users   881600 24. bře 12.56 arm-unknown-linux-gnueabihf-strip
lrwxrwxrwx  1 beda   users       37 26. bře 08.57 armv6l-unknown-linux-gnueabihf-addr2line -> arm-unknown-linux-gnueabihf-addr2line
lrwxrwxrwx  1 beda   users       30 26. bře 08.57 armv6l-unknown-linux-gnueabihf-ar -> arm-unknown-linux-gnueabihf-ar
lrwxrwxrwx  1 beda   users       30 26. bře 08.57 armv6l-unknown-linux-gnueabihf-as -> arm-unknown-linux-gnueabihf-as
lrwxrwxrwx  1 beda   users       31 26. bře 08.57 armv6l-unknown-linux-gnueabihf-c++ -> arm-unknown-linux-gnueabihf-c++
lrwxrwxrwx  1 beda   users       35 26. bře 08.57 armv6l-unknown-linux-gnueabihf-c++filt -> arm-unknown-linux-gnueabihf-c++filt
lrwxrwxrwx  1 beda   users       31 26. bře 08.57 armv6l-unknown-linux-gnueabihf-cpp -> arm-unknown-linux-gnueabihf-cpp
lrwxrwxrwx  1 beda   users       40 26. bře 08.57 armv6l-unknown-linux-gnueabihf-ct-ng.config -> arm-unknown-linux-gnueabihf-ct-ng.config
lrwxrwxrwx  1 beda   users       35 26. bře 08.57 armv6l-unknown-linux-gnueabihf-elfedit -> arm-unknown-linux-gnueabihf-elfedit
lrwxrwxrwx  1 beda   users       31 26. bře 08.57 armv6l-unknown-linux-gnueabihf-g++ -> arm-unknown-linux-gnueabihf-g++
lrwxrwxrwx  1 beda   users       31 26. bře 08.57 armv6l-unknown-linux-gnueabihf-gcc -> arm-unknown-linux-gnueabihf-gcc
lrwxrwxrwx  1 beda   users       34 26. bře 08.57 armv6l-unknown-linux-gnueabihf-gcc-ar -> arm-unknown-linux-gnueabihf-gcc-ar
lrwxrwxrwx  1 beda   users       34 26. bře 08.57 armv6l-unknown-linux-gnueabihf-gcc-nm -> arm-unknown-linux-gnueabihf-gcc-nm
lrwxrwxrwx  1 beda   users       38 26. bře 08.57 armv6l-unknown-linux-gnueabihf-gcc-ranlib -> arm-unknown-linux-gnueabihf-gcc-ranlib
lrwxrwxrwx  1 beda   users       37 26. bře 08.57 armv6l-unknown-linux-gnueabihf-gcc-4.8.2 -> arm-unknown-linux-gnueabihf-gcc-4.8.2
lrwxrwxrwx  1 beda   users       32 26. bře 08.57 armv6l-unknown-linux-gnueabihf-gcov -> arm-unknown-linux-gnueabihf-gcov
lrwxrwxrwx  1 beda   users       36 26. bře 08.57 armv6l-unknown-linux-gnueabihf-gfortran -> arm-unknown-linux-gnueabihf-gfortran
lrwxrwxrwx  1 beda   users       33 26. bře 08.57 armv6l-unknown-linux-gnueabihf-gprof -> arm-unknown-linux-gnueabihf-gprof
lrwxrwxrwx  1 beda   users       30 26. bře 08.57 armv6l-unknown-linux-gnueabihf-ld -> arm-unknown-linux-gnueabihf-ld
lrwxrwxrwx  1 beda   users       34 26. bře 08.57 armv6l-unknown-linux-gnueabihf-ld.bfd -> arm-unknown-linux-gnueabihf-ld.bfd
lrwxrwxrwx  1 beda   users       31 26. bře 08.57 armv6l-unknown-linux-gnueabihf-ldd -> arm-unknown-linux-gnueabihf-ldd
lrwxrwxrwx  1 beda   users       30 26. bře 08.57 armv6l-unknown-linux-gnueabihf-nm -> arm-unknown-linux-gnueabihf-nm
lrwxrwxrwx  1 beda   users       35 26. bře 08.57 armv6l-unknown-linux-gnueabihf-objcopy -> arm-unknown-linux-gnueabihf-objcopy
lrwxrwxrwx  1 beda   users       35 26. bře 08.57 armv6l-unknown-linux-gnueabihf-objdump -> arm-unknown-linux-gnueabihf-objdump
lrwxrwxrwx  1 beda   users       36 26. bře 08.57 armv6l-unknown-linux-gnueabihf-populate -> arm-unknown-linux-gnueabihf-populate
lrwxrwxrwx  1 beda   users       34 26. bře 08.57 armv6l-unknown-linux-gnueabihf-ranlib -> arm-unknown-linux-gnueabihf-ranlib
lrwxrwxrwx  1 beda   users       35 26. bře 08.57 armv6l-unknown-linux-gnueabihf-readelf -> arm-unknown-linux-gnueabihf-readelf
lrwxrwxrwx  1 beda   users       32 26. bře 08.57 armv6l-unknown-linux-gnueabihf-size -> arm-unknown-linux-gnueabihf-size
lrwxrwxrwx  1 beda   users       35 26. bře 08.57 armv6l-unknown-linux-gnueabihf-strings -> arm-unknown-linux-gnueabihf-strings
lrwxrwxrwx  1 beda   users       33 26. bře 08.57 armv6l-unknown-linux-gnueabihf-strip -> arm-unknown-linux-gnueabihf-strip
lrwxrwxrwx  1 beda   users       30 26. bře 08.57 as -> arm-unknown-linux-gnueabihf-as
lrwxrwxrwx  1 beda   users       31 26. bře 08.57 c++ -> arm-unknown-linux-gnueabihf-c++
lrwxrwxrwx  1 beda   users       35 26. bře 08.57 c++filt -> arm-unknown-linux-gnueabihf-c++filt
lrwxrwxrwx  1 beda   users       31 26. bře 08.57 cpp -> arm-unknown-linux-gnueabihf-cpp
lrwxrwxrwx  1 beda   users       40 26. bře 08.57 ct-ng.config -> arm-unknown-linux-gnueabihf-ct-ng.config
lrwxrwxrwx  1 beda   users       35 26. bře 08.57 elfedit -> arm-unknown-linux-gnueabihf-elfedit
lrwxrwxrwx  1 beda   users       31 26. bře 08.57 g++ -> arm-unknown-linux-gnueabihf-g++
lrwxrwxrwx  1 beda   users       31 26. bře 08.57 gcc -> arm-unknown-linux-gnueabihf-gcc
lrwxrwxrwx  1 beda   users       34 26. bře 08.57 gcc-ar -> arm-unknown-linux-gnueabihf-gcc-ar
lrwxrwxrwx  1 beda   users       34 26. bře 08.57 gcc-nm -> arm-unknown-linux-gnueabihf-gcc-nm
lrwxrwxrwx  1 beda   users       38 26. bře 08.57 gcc-ranlib -> arm-unknown-linux-gnueabihf-gcc-ranlib
lrwxrwxrwx  1 beda   users       37 26. bře 08.57 gcc-4.8.2 -> arm-unknown-linux-gnueabihf-gcc-4.8.2
lrwxrwxrwx  1 beda   users       32 26. bře 08.57 gcov -> arm-unknown-linux-gnueabihf-gcov
lrwxrwxrwx  1 beda   users       36 26. bře 08.57 gfortran -> arm-unknown-linux-gnueabihf-gfortran
lrwxrwxrwx  1 beda   users       33 26. bře 08.57 gprof -> arm-unknown-linux-gnueabihf-gprof
lrwxrwxrwx  1 beda   users       30 26. bře 08.57 ld -> arm-unknown-linux-gnueabihf-ld
lrwxrwxrwx  1 beda   users       34 26. bře 08.57 ld.bfd -> arm-unknown-linux-gnueabihf-ld.bfd
lrwxrwxrwx  1 beda   users       31 26. bře 08.57 ldd -> arm-unknown-linux-gnueabihf-ldd
lrwxrwxrwx  1 beda   users       30 26. bře 08.57 nm -> arm-unknown-linux-gnueabihf-nm
lrwxrwxrwx  1 beda   users       35 26. bře 08.57 objcopy -> arm-unknown-linux-gnueabihf-objcopy
lrwxrwxrwx  1 beda   users       35 26. bře 08.57 objdump -> arm-unknown-linux-gnueabihf-objdump
lrwxrwxrwx  1 beda   users       36 26. bře 08.57 populate -> arm-unknown-linux-gnueabihf-populate
lrwxrwxrwx  1 beda   users       34 26. bře 08.57 ranlib -> arm-unknown-linux-gnueabihf-ranlib
lrwxrwxrwx  1 beda   users       35 26. bře 08.57 readelf -> arm-unknown-linux-gnueabihf-readelf
lrwxrwxrwx  1 beda   users       32 26. bře 08.57 size -> arm-unknown-linux-gnueabihf-size
lrwxrwxrwx  1 beda   users       35 26. bře 08.57 strings -> arm-unknown-linux-gnueabihf-strings
lrwxrwxrwx  1 beda   users       33 26. bře 08.57 strip -> arm-unknown-linux-gnueabihf-strip

Máte někdo nápad, co dělám špatně? Díky.

Řešení dotazu:


Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

26.3.2014 16:10 Lyco | skóre: 14 | blog: Lyco
Rozbalit Rozbalit vše Re: Distcc - Archlinux
Odpovědět | | Sbalit | Link | Blokovat | Admin
Vždyť ti to tam píše:
failed to exec gcc: Permission denied
Vzhledem k tomu, že chceš GCC spouštět jako nobody:
DISTCC_ARGS="--user nobody ...
ale máš ho v ~ uživtele beda:
PATH=/home/beda/x-tools6h
tak je jasné že to nebude fungovat. Buď nainstaluj gcc jinam (/opt bývá dobré místo) a povol spouštění kýmkoli (chown root ; chmod 555), nebo to souštěj jako beda.
Příspěvek se rázem stává až o 37,5 % pravdivější, je-li pod ním napsáno reálné jméno.
Beda0 avatar 26.3.2014 20:20 Beda0 | skóre: 29
Rozbalit Rozbalit vše Re: Distcc - Archlinux
Došlo mi, že se do toho /home/beda nedostane, tak sem to všechno zkopíroval do /tmp a ls -l tvrdí rwxrwxrwx u všecho ale prej pořád nemam práva pro gcc. Ale dyť maj všechny rwxrwxrwx (chmod a+x) - myslel sem, že to znamená, že je může spustit kdokoliv - nebo ne? Jak píšu - zkoušel jsem dát i "--user beda" - se stejným výsledkem - nemam práva.

Co mam udělat víc, než zkopírovat /home/beda/x-tools6h/arm-unknown-linux-gnueabihf/bin do /tmp a dát chmod a+x /tmp/*?
27.3.2014 13:47 Lyco | skóre: 14 | blog: Lyco
Rozbalit Rozbalit vše Re: Distcc - Archlinux
Hm, tak tady už nevím. chmod a+x by měl fungovat. Restartoval jsi distcc démona? Zkusil bych na tvém místě se přepnout na uživatele který to spouští a zkompilovat něco ručně. Pokud i to bude fungovat, tak bych asi pustil strace na distcc démona a sledoval na jaké soubory sahá. (K běžícímu programu se strace připojí pomocí -p PID, a asi budeš chtít i parametr -f abys viděl co dělají forknuté procesy).
Příspěvek se rázem stává až o 37,5 % pravdivější, je-li pod ním napsáno reálné jméno.
Beda0 avatar 27.3.2014 15:56 Beda0 | skóre: 29
Rozbalit Rozbalit vše Re: Distcc - Archlinux
Démona restartuju po každý změně konfigu. Když dám:
beda ~ $ export PATH=/home/beda/x-tools6h/arm-unknown-linux-gnueabihf/bin/:$PATH
beda ~ $ gcc --version
gcc (crosstool-NG 1.19.0) 4.8.2
...
což je správně a práva na spuštění gcc mam. Nějak moc nechápu, jak ten démon spouští tu kompilaci - pod jakým uživatelem nebo jak se vlastně dostane do stavu, že nemá práva spustit něco, co může spouštět kdokoliv (trochu se mi zdá, že ignoruje --user cokoliv nebo to používám špatně). Díky za radu s tim strace, zítra zkusím.

Beda0 avatar 28.3.2014 09:51 Beda0 | skóre: 29
Rozbalit Rozbalit vše Re: Distcc - Archlinux
Nevim, co jsem tentokrát udělal jinak, ale už jsem se posunul dál - k další chybové hlášce - cc child 5041 terminated with status 0x100

Tuším, že bude problém v chybějících přepínačích gcc - zkouším zkompilovat hello world gcc -c main.c a samo si to doplní -o main.o, chybí mi tam něco?

Celý zápis z logu:
distccd[4989] (main) chdir to /tmp
distccd[4989] (dcc_setup_daemon_path) daemon's PATH is /test:$PATH
distccd[4989] (dcc_listen_by_addr) listening on 0.0.0.0:3632
distccd[4989] (dcc_defer_accept) TCP_DEFER_ACCEPT turned on
distccd[4989] (dcc_standalone_server) 8 CPUs online on this server
distccd[4989] (dcc_standalone_server) allowing up to 10 active jobs
distccd[4989] (dcc_standalone_server) not detaching
distccd[4989] (dcc_new_pgrp) already a process group leader
distccd[4989] (dcc_log_daemon_started) preforking daemon started (3.1 x86_64-unknown-linux-gnu, built Jul 15 2013 14:55:43)
distccd[4989] (dcc_create_kids) up to 1 children
distccd[4989] (dcc_create_kids) up to 2 children
distccd[4989] (dcc_create_kids) up to 3 children
distccd[4989] (dcc_create_kids) up to 4 children
distccd[4989] (dcc_create_kids) up to 5 children
distccd[4989] (dcc_create_kids) up to 6 children
distccd[4989] (dcc_create_kids) up to 7 children
distccd[4989] (dcc_create_kids) up to 8 children
distccd[4989] (dcc_create_kids) up to 9 children
distccd[4989] (dcc_create_kids) up to 10 children
distccd[4990] (dcc_check_client) connection from MOJEVEREJNAIP:48419
distccd[4990] (dcc_check_address) match client 0x214ce693, value 0x214ce693, mask 0xffffffff
distccd[4990] (dcc_r_token_int) got DIST00000001
distccd[4990] (dcc_r_token_int) got ARGC00000005
distccd[4990] (dcc_r_argv) reading 5 arguments from job submission
distccd[4990] (dcc_r_token_int) got ARGV00000003
distccd[4990] (dcc_r_token_string) got 'gcc'
distccd[4990] (dcc_r_argv) argv[0] = "gcc"
distccd[4990] (dcc_r_token_int) got ARGV00000006
distccd[4990] (dcc_r_token_string) got 'main.c'
distccd[4990] (dcc_r_argv) argv[1] = "main.c"
distccd[4990] (dcc_r_token_int) got ARGV00000002
distccd[4990] (dcc_r_token_string) got '-c'
distccd[4990] (dcc_r_argv) argv[2] = "-c"
distccd[4990] (dcc_r_token_int) got ARGV00000002
distccd[4990] (dcc_r_token_string) got '-o'
distccd[4990] (dcc_r_argv) argv[3] = "-o"
distccd[4990] (dcc_r_token_int) got ARGV00000006
distccd[4990] (dcc_r_token_string) got 'main.o'
distccd[4990] (dcc_r_argv) argv[4] = "main.o"
distccd[4990] (dcc_r_argv) got arguments: gcc main.c -c -o main.o
distccd[4990] (dcc_scan_args) scanning arguments: gcc main.c -c -o main.o
distccd[4990] (dcc_scan_args) found input file "main.c"
distccd[4990] (dcc_scan_args) found object/output file "main.o"
distccd[4990] compile from main.c to main.o
distccd[4990] (dcc_run_job) output file main.o
distccd[4990] (dcc_input_tmpnam) input file main.c
distccd[4990] (dcc_r_token_int) got DOTI00004403
distccd[4990] (dcc_r_file) received 17411 bytes to file /tmp/distccd_d48b30de.i
distccd[4990] (dcc_r_file_timed) 17411 bytes received in 0.002169s, rate 7839kB/s
distccd[4990] (dcc_set_input) changed input from "main.c" to "/tmp/distccd_d48b30de.i"
distccd[4990] (dcc_set_input) command after: gcc /tmp/distccd_d48b30de.i -c -o main.o
distccd[4990] (dcc_set_output) changed output from "main.o" to "/tmp/distccd_d4e930de.o"
distccd[4990] (dcc_set_output) command after: gcc /tmp/distccd_d48b30de.i -c -o /tmp/distccd_d4e930de.o
distccd[4990] (dcc_check_compiler_masq) /test/gcc is a safe symlink to arm-unknown-linux-gnueabihf-gcc
distccd[4990] (dcc_spawn_child) forking to execute: gcc /tmp/distccd_d48b30de.i -c -o /tmp/distccd_d4e930de.o
distccd[4990] (dcc_spawn_child) child started as pid5041
distccd[5041] (dcc_new_pgrp) entered process group
distccd[5041] (dcc_increment_safeguard) setting safeguard: _DISTCC_SAFEGUARD=1
distccd[4990] (dcc_collect_child) cc child 5041 terminated with status 0x100
distccd[4990] (dcc_collect_child) cc times: user 0.000000s, system 0.000000s, 0 minflt, 0 majflt
distccd[4990] (dcc_x_token_int) send DONE00000001
distccd[4990] (dcc_x_token_int) send STAT00000100
distccd[4990] (dcc_x_file) send 67 byte file /tmp/distcc_d2b230de.stderr with token SERR and compression 69
distccd[4990] (dcc_x_token_int) send SERR00000043
distccd[4990] (dcc_x_file) send 0 byte file /tmp/distcc_d34530de.stdout with token SOUT and compression 69
distccd[4990] (dcc_x_token_int) send SOUT00000000
distccd[4990] (dcc_x_token_int) send DOTO00000000
distccd[4990] gcc main.c on localhost failed
distccd[4990] job complete
distccd[4990] (dcc_cleanup_tempfiles_inner) deleted 5 temporary files
distccd[4990] (dcc_job_summary) client: MOJEVEREJNAIP:48419 COMPILE_ERROR exit:1 sig:0 core:0 ret:0 time:5ms gcc main.c
Řešení 1× (Beda0 (tazatel))
Beda0 avatar 11.6.2014 15:37 Beda0 | skóre: 29
Rozbalit Rozbalit vše Re: Distcc - Archlinux
Odpovědět | | Sbalit | Link | Blokovat | Admin
Pro všechny, co by hledali řešení: Na druhý pokus se mi to podařilo rozjet, ale né k mé spokojenosti.

Nainstaloval jsem vše dle výše zmíněného návodu (některé balíčky jsem musel hledat ručně + u glibc upravovat configure, aby se to vůbec zkompilovalo). Nainstaloval jsem to do /home/user/x-tools6h, nastavil rekurzivně práva na 777 a pro /home/user ostatním aspoň pro čtení (což se mi vůbec nelíbí, ale sem jediný uživatel, tak to zas tolik nevadí) a funguje to.

Při pokusu x-tools přesunout kamkoliv jinam to prostě nefunguje (měním práva i PATH v /etc/conf.d/distccd, musí se ještě někde jinde? a restartuju deamona)

parametru --user v témže konfigu je ignorován pokud není deamon spouštěn rootem, což v případě systemd není.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.