vyznam procfs a fdescfs
Miroslav Lachman
000.fbsd at quip.cz
Fri Apr 21 18:20:45 CEST 2017
Mam na zacatek takovy trivialni dotaz: k cemu slouzi procfs a fdescfs
napriklad pro Bash a OpenJDK? Oboje maji v pkg-message napsano, ze se ma
primountovat fdescfs a u OpenJDK je navic i procfs.
Nikde na serverech jsem nikdy nemountoval ani procfs ani fdescfs a jak
java, tak bash se tam pouziva.
V manualu k procfs se dokonce pise:
It is normally mounted on /proc, and is required for the complete
operation of programs such as ps(1) and w(1).
O co teda prichazim, kdyz /proc nemam a ps a w pouzivam?
Co si tak z davne minulosti okolo FreeBSD 4.x pamatuju, tak prave v
procfs bylo nekolik zavaznych bezpecnostnich chyb.
Myslim, ze na Linuxu je /proc defaultne primountovany a bez nej by tam
asi spousta veci nefungovala, ale u FreeBSD mi nikdy neprislo, ze bych
mel /proc mountovat.
A ted ta slozitejsi otazka. Cele tohle jsem zacal resit proto, ze jsem
si zacal pohravat se sysutils/zrep (napsano v ksh93) a ten prave
vyzaduje /proc.
https://github.com/bolthole/zrep/blob/master/zrep_vars#L261
Je tam tahle funkce, ktere asi uplne nerozumim
#Note: it is an ERROR to call this if you already have lock
#It is binary, not recursive ownership.
zrep_get_global_lock(){
typeset retry_count=$Z_LOCK_RETRY
typeset lockpid
[[ -d /proc/$$ ]] || zrep_errquit "/proc fs must be functional to use zrep"
ln -s /proc/$Z_GLOBAL_PID $Z_GLOBAL_LOCKFILE && return 0
while (( retry_count > 0 )); do
sleep 1
ln -s /proc/$Z_GLOBAL_PID $Z_GLOBAL_LOCKFILE && return 0
retry_count=$((retry_count-1))
lockpid=`zrep_global_lock_pid`
if ! -d /proc/$lockpid ; then
_errprint ERROR: stale global lock file
_errprint ERROR: shut down ALL zrep instances, then manually remove
_errprint $Z_GLOBAL_LOCKFILE
fi
done
print Failed to acquire global lock
return 1
}
Jelikoz jsem v zrep uz delal nejake vlastni upravy, aby to fungovalo se
sudo, tak bych docela rad prepsal tuhle funkci tak, aby nepotrebovala
/proc, ale aby zustala zachovana funkcnost / spolehlivost toho zamku.
V historii na GitHubu jsem nasel, ze se ve starsim kodu pouzival lockf
https://github.com/bolthole/zrep/commit/2e1f06362a692e68e72d2fb104625f46513c8c58
ale taky ze ho kvuli nejakemu bugu odstranili
https://github.com/bolthole/zrep/commit/bae9a5fb6f2a14a1765d5675879d7171ad805c7f
Poradi nekdo?
Mirek
More information about the Users-l
mailing list