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