Arch KDE packages not compiled using -fpic ?
this week-end i gave prelink a shot. then i realized that actually most (if not all) kde apps could not be prelinked.
it looks like they're not compiled with -fpic option, and prelink cannot "link against non-pic libraries".
it's not that i absolutely want to prelink my whole system, it's just that i thought this -fpic option was a good thing so i'm surprised it's not used in arch kde packages.
any plans to enable -fpic for kde in the near future ?
brazzmonkey wrote:a few months ago, i had a gentoo box compiled with USE="pic" and didn't encounter any problems. but this use flag is not used by every ebuild.
i didn't know -fpic could slow things... and never noticed it.
I don't notice the slowdown on my Athlon64, but on my old (socket A) Sempron 2500+ and my even older (socket A) Duron 1.2GHz, you can really feel it. Probably because the Athlon64 has enough grunt to cover the slowdown though
Similar Messages
-
I am trying to INSERT into a table that is called LMR_TENANTS. When I try to INSERT via Oracle APEX I get the following error:
>
ORA-04063: package body "LILLEYMAN.CG$LMR_TENANTS" has errors ORA-06508: PL/SQL: could not find program unit being called: "LILLEYMAN.CG$LMR_TENANTS" ORA-06512: at "LILLEYMAN.CG$BIS_LMR_TENANTS", line 1 ORA-04088: error during execution of trigger 'LILLEYMAN.CG$BIS_LMR_TENANTS'
I assume this is because the package it is referring to is not compiled properly.
If I got to the actual package it is referring to, I see it has the following errors:
>
Line Position Text
19 8 PLS-00201: identifier 'LMR_TENANTS' must be declared
19 8 PL/SQL: Declaration ignored
23 16 PLS-00320: the declaration of the type of this expression is incomplete or malformed
22 1 PL/SQL: Declaration ignored
51 16 PLS-00320: the declaration of the type of this expression is incomplete or malformed
50 1 PL/SQL: Declaration ignored
56 32 PLS-00201: identifier 'LMR_TENANTS' must be declared
56 1 PL/SQL: Declaration ignored
Here is a link to a pastebin of the package, since it is rather large. This is something that has been generated by Oracle APEX.
I am unable to understand why I am getting this error at all.
http://pastebin.com/m58df134a
Any ideas as to what the problem may be? What I should try to do to fix it?
Edited by: apexdev88 on 10-Aug-2009 03:33I figured out that apparrently LMR_TENANTS was not owned by the schema.
Now I am getting the following error in relation to the package body:
22 20 PLS-00201: identifier 'CG$ERRORS.MSGGETTEXT' must be declared
22 5 PL/SQL: Statement ignored
27 20 PLS-00201: identifier 'CG$ERRORS.RAISE_FAILURE' must be declared
27 20 PL/SQL: Statement ignored
40 20 PLS-00201: identifier 'CG$ERRORS.MSGGETTEXT' must be declared
40 5 PL/SQL: Statement ignored
45 5 PLS-00201: identifier 'CG$ERRORS.RAISE_FAILURE' must be declared
45 5 PL/SQL: Statement ignored
74 7 PLS-00201: identifier 'CG$ERRORS.PUSH' must be declared
74 7 PL/SQL: Statement ignored
76 7 PLS-00201: identifier 'CG$ERRORS.RAISE_FAILURE' must be declared
76 7 PL/SQL: Statement ignored
90 5 PLS-00201: identifier 'CG$ERRORS.PUSH' must be declared
90 5 PL/SQL: Statement ignored
92 5 PLS-00201: identifier 'CG$ERRORS.RAISE_FAILURE' must be declared
92 5 PL/SQL: Statement ignored
110 24 PLS-00201: identifier 'CG$ERRORS.MSGGETTEXT' must be declared
110 9 PL/SQL: Statement ignored
117 24 PLS-00201: identifier 'CG$ERRORS.MSGGETTEXT' must be declared
117 9 PL/SQL: Statement ignored
22 20 PLS-00201: identifier 'CG$ERRORS.MSGGETTEXT' must be declared
22 5 PL/SQL: Statement ignored
27 20 PLS-00201: identifier 'CG$ERRORS.RAISE_FAILURE' must be declared
27 20 PL/SQL: Statement ignored
40 20 PLS-00201: identifier 'CG$ERRORS.MSGGETTEXT' must be declared
40 5 PL/SQL: Statement ignored
45 5 PLS-00201: identifier 'CG$ERRORS.RAISE_FAILURE' must be declared
45 5 PL/SQL: Statement ignored
74 7 PLS-00201: identifier 'CG$ERRORS.PUSH' must be declared
74 7 PL/SQL: Statement ignored
76 7 PLS-00201: identifier 'CG$ERRORS.RAISE_FAILURE' must be declared
76 7 PL/SQL: Statement ignored
90 5 PLS-00201: identifier 'CG$ERRORS.PUSH' must be declared
90 5 PL/SQL: Statement ignored
92 5 PLS-00201: identifier 'CG$ERRORS.RAISE_FAILURE' must be declared
92 5 PL/SQL: Statement ignored
110 24 PLS-00201: identifier 'CG$ERRORS.MSGGETTEXT' must be declared
110 9 PL/SQL: Statement ignored
117 24 PLS-00201: identifier 'CG$ERRORS.MSGGETTEXT' must be declared
117 9 PL/SQL: Statement ignored -
Most packages not compiling properly
Hello Arch users!
For some time now, I have been experiencing a weird issue. When trying to compile packages (mostly AUR packages), I receive contradictory messages from the make command. Let me show you:
checking if gcc accepts -dumpversion option... yes
checking gcc version... 4.7.0
checking if g++ accepts -dumpversion option... yes
checking g++ version... 4.7.0
configure: Excellent, the C, C++ and Fortran compilers are all GCC 4.7.0
configure: GCC 4.0.0 is very buggy and can not build Sage.
configure: Please use a gcc of at least 4.0.1.
configure: error: Exiting due to the use of a version of GCC that is too buggy
ERROR: You do not have all of the prerequisites needed
to build Sage from source. See the errors above.
make[1]: *** [installed/prereq-0.9] Error 1
And I have GCC 4.7 installed. I use multilib. Tell me if you need anything else.Yes, I do have multilib-devel installed.
I noticed that another symptom has arised: Maple 13 keeps complaining that it does not have kernel connection. Related?
Most packages I try to build complain that either gcc, intltool or some dev package is out-of-date. This is really weird... -
Why can't constants of a package not be use in view definition?
Hi,
maybe the answer is obvious, but I don't understand why this is not possible.
We have a large numer of key tables which define an ID-number (PK, generated by sequence), a short and long description as well as a numeric ID (AK1, in most cases autogenerated by max+1), which is intended for usage in programs, when a certain row of a key must be selected in the business layer. We call this column the type-ID of the key. A type-ID cannot be changed once assigned. Rows cannot be deleted physical, only logical (i.e. set column ACTIVE to FALSE).
We have a large numer of PL/SQL packages that use those type ID's. For every business object we define a globally available package that contains all necessary type ID's defined as constants, e.g.
create or replace package GLOBTEST is
CONST1 constant KEY_TABLE.TYPE_ID%type := 1;
end;
In all other packes we can use these constants (e.g. GLOBTEST.CONST1) instead of those "magic numbers". Now we have the situation that we must define quite a few views that must use those type IDs. But here we can't use these constants, e.g.
create or replace view V_TEST as
select GLOBTEST.CONST1 as CONST1 from DUAL;
results in error. What would be the best way to avoid using "magic constants"? We already defined functions which do nothing more than returning the appropriate constant. However we have the feeling that this is not the best way.
TIA,
Stefan
Message was edited by:
stefanmStefan,
You could try creating OBJECT views. I believe you would be able to call the constants already defined in packages in these object views. In the object views you can create member functions in case you want to do some manipulation of these constants or other data.
Shakti
http://www.impact-sol.com
Developers of Guggi Oracle - Tool for DBAs and Developers -
I am trying to compile a package, it takes long time to compile how can I check the session that is blocking it ?
user650888 wrote:
I am trying to compile a package, it takes long time to compile how can I check the session that is blocking it ?It is probably you that is blocking it.
If procedure does DML, package can not be changed while uncommitted DML exists.
One way to clear the log jam is to terminate all sessions & then start a new session that compiles the code. -
Slackware TGZ to Arch Linux Package Converter
I have two programs that interest me (LilyPond and Battle for Wesnoth) that don't have Arch Linux packages and compiling them would involve hunting everywhere for obscure dependencies (LilyPond in particular) so I just downloaded the Slackware packages, inspected them and found that by unzipping them onto the root folder (as superuser) and running the install script (if there is one) I can get them to run with minimal fuss.
Has the idea of making a Slackware to Arch package converter been brought up before? Is there any problems with this? (Slackware is i386-optimised if I remember correctly, but I think it's still worth it since there is more Slackware packages than Arch Linux ones out there.)i3839 wrote:Flames?? Where? You sure you didn't misread something?
Probably.
Here's what I read, admitting that it doesn't seem quite as bad the second time around...:
Oh? All I was hearing is that Arch already has enough packages, and that the devs are overloaded and almost down.
"you don't know which way is up, you contradict yourself while continuing to ignore the problems and aren't fixing anything".
Also getting custom packages into Arch's official repository seems a bit hard currently, not to mention that it's totally unclear how to do that (drop it in incomming and wait a year? Lotto?).
"The system isn't working and you haven't done anything to try to fix it. I haven't read or noticed any of the threads illustrating that this topic has been argued to death and isn't going unnoticed"
Maintaining packages is the most work, and every distro maintains the same packages over and over again. Tell me why to not use good, working packages from another sane distro?
"The other distros are better."
(Personally, I don't care if anybody likes another distro better, but if so, use it instead, don't talk about it)
Changing GCC often gives the same problem as updating to new major libraries. Simply leave the old GCC libs or make a seperate package for them. Currently it's rather impossible in Arch to install new packages with an outdated system, if that's solved then it's also easy to use Slackware packages.
"The Arch philosophy of keeping packages stable but up to date is just plain wrong. I don't bother to pacman -Syu before I mention problems."
Of course if would be best if there was a nice, good binary package standard that works on all distros, so that the application makers can make and maintain the packages themselves, but that's utopia (paths are too often hardcoded for instance).
"hey, I do have some good ideas".
It isn't a matter of being able to do something or not, it's a matter of convenience. All programs should be relative easy to compile from source, but that doesn't mean that everyone should compile all programs themselves.
"There aren't enough Arch binaries to go around"
OR:
"ABS sucks"
OR:
"Hold my hand, I can't compile."
OR:
"I use Arch cause I don't like Gentoo". :-D
Yeah, some of that is a little (or quite, or even very) harsh, you can blame it on me rather than taking it to heart.
As for the slackware packages issue, I'm personally not writing a script to convert them; I've never used slackware in my life. The idea has merit, but I get tired of people discussing pros and cons and not doing anything. I think that's because I'm about as bad as anyone on that front, possibly worse.
Dusty -
Package body greater than 2160 bytes does not compile in Object Browser
Hi there,
I initially created a package in Apex 2.1.0.0.39 using the Object Browser and it compiled OK. The message in the box above the source code says "PL/SQL code successfully compiled (17:51:08)". I then added more code and eventually when I clicked the "Compile" button" the message to say successfull compilation or any error message was not displayed. The box above the source code remains blank. After much trial and error I found that by adding just one more letter to the end of a comment that it would not compile, but by removing the letter then it would compile most of the time. I downloaded the package and found that the size of the download .PLB file was 2160 bytes. Editing the PLB file using a text editor to increase the size and executing it in SQL*PLUS does work.
Is this a fundamental limit on the size of packages that can be compiled using the Object Browser, or is there an Apex configuration parameter that can be modified to allow larger packages? If this is a limit then why isn't an informational message displayed? Or is this in fact an installation issue or an issues with Apex Object Browser?
Further information:
Oracle Database 10g Express Edition Release 10.2.0.1.0 - Product
PL/SQL Release 10.2.0.1.0 - Production
CORE 10.2.0.1.0 Production
TNS for 32-bit Windows: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 - Production
I installed this version back at the beginning of the year for training purposes and have not made any conifiguration changes that I am aware of, or installed any further upgrades/software since.
All help gratefully received by this "definitely a nubie".
Regards.
John.John,
If you are using, as you said, Application Express version 2.1.0.0.39, be aware that this is a very old (and not a supported) version. If you have trouble with the latest version (currently 3.2), feel free to report them here.
Scott -
Why not? kdemod + arch kde, same for arch live +chakra
Sorry for bug you people, but now that the waters are calm, i wanna ask a simple cuestion, why 2 proyects for the same task, arch kde and kdemod, same for arch live and chakra.
as user of both i think if all join the efforts, arch could be even better and erase the problems spesific for kde or kdemod, i now... linux is choice, and diferent aproachs(now are very close i think). but, ARCH Linux is one of the finnest distros and unified it, could make ready for be a popular wide users target distro.
linux is choice, but community is common efforts for a greater resoults.drelyn86 wrote:Maybe the Chakra project should use Arch KDE rather than KDEmod. Then they could spend less time splitting packages, and more time fixing that god-awful Shaman application. I understand their liveCD is still in Alpha testing.
Agree! Altho arch should have used kdemod as its kde in the first place -
SQL*Developer 3EA1 - Not Compiling package Body
Don't know if this is best place to post this, if not tell me where.
In some packages i'm getting: Error: ORA-06550: linha 1, coluna 64:PLS-00172: literal de cadeia de caracteres demasiado extenso; Sorry about the portuguese error message but it's cpopy paste from compiler log.
The strange about this is that the package is compiling with no errors on Version 2.1.1.64 and also on others editors. In both packages i had this was after formatting the code.
So far is the only bug i got, keep on the good work.
António CunhaJust tried from pl/sql node. The package body does not compile from there either. The issue seems to be the size of the package. The package size is 35,000 characters and spaces. I can remove any combination of source lines to get it down to 32,000 characters and spaces and it will compile.
Edited by: dagtech on Oct 21, 2010 9:34 AM -
Simple Java class using SQLJ not compiling.
Hello all, I have a simple Java class that is using SQLJ. It will not compile though. I am not sure what I should set for classpath. Any ideas? This is what I have so far.
set PATH=C:\jdk1.2.2\bin;c:\oracle\ora81\jdbc\bin;
set CLASSPATH="C:\oracle\ora81\jdbc\lib\classes12.zip;C:\oracle\ora81\sqlj\lib\runtime12.zip;C:\oracle\ora81\sqlj\lib\translator.zip;C:\jdk1.2.2\lib\*.*"
then
javac SQLJTester.java
Here is my .java file ---
import java.io.*;
import java.sql.*;
import sqlj.runtime.*;
import sqlj.runtime.ref.*;
public class SQLJTester {
public static void update() throws Exception {
java.sql.Timestamp timeNow;
#sql {
BEGIN
:timeNow := sysdate;
END
public static void main (String[] args) {
try {
SQLJTester.update();
System.out.println ("Updated successfully");
catch (Exception e) {
System.out.println ("Caught an exception.");
Thanks ahead for your time,
JustinWhen sqlj files are compiled and translted to java file with them the file with extension .ser is also generated. browsers do not recognise this .ser files they only understand .class files which the download using <codebase> instead of class path. so thats why you r not able to use sqlj in servlet. try to customize the profile. Now can some one inform how to use sqlj from eclipse. does it support?. i need to downoad sqlj.exe for that. if anyone has idea from where i can download sqlj.exe pls inform me at [email protected]
-
How do I migrate from KDEMOD back to Arch's KDE package?
I've been a fan of KDEMOD for a long time, now that they are phasing it out, I'm kinda stuck in the limbo and would like to move to Arch's KDE package, is there a seamless way that you guys can recommend while keeping my KDE configurations?
Thanks!I would back up your ~/.kde4
cp -vR ~/.kde4 ~./kde4bak
In theory you should be able to comment out the kdemod repos in pacman.conf and then run
pacman -Syyuu
to refresh the databases and downgrade from kdemod.
You should then be able to install KDE from [extra] or [kde-unstable] if the latter is enabled
You might also want to get a list of installed KDEmod packages to know what KDE packages to get -
Revision: 8417
Author: [email protected]
Date: 2009-07-07 04:50:21 -0700 (Tue, 07 Jul 2009)
Log Message:
Remove themes from the package that are not compiling cleanly
bug: https://bugs.adobe.com/jira/browse/SDK-21144
qa: yes
doc:
checkintests: pass
Ticket Links:
http://bugs.adobe.com/jira/browse/SDK-21144
Modified Paths:
flex/sdk/trunk/build.xml -
I am a Gentoo user. In portage kde packages are splited out. For example:
I can install "ksnapshot" or "kpdf" without pulling whole kdegraphics package with a lot of other tools for graphics. In Arch Linux i have to install whole kdegraphics package to get for example kpdf. It also will install kooka, kuickshow, kolourpaint and lots of other programs that I don't need. So it would be nice if I could install separate KDE programs without complete sets.Thought I'd look into helping out, some day soon, by splitting out KDE packages -- or at least look into what amount of work it might be (before jumping in, blind). My first step was to write to Dan Armak, former Gentoo KDE maintanier. Since he sent such an informative reply, I wanted to post it here as a way to 1) preserve it (or back it up); and 2) to share.
Here's my inquiry:
Dan,
Am interested in splitting the current "monolithic" packages for the
distro Arch Linux. I saw your e-mail address on the Gentoo wiki and
wanted to ask: Do you have any, say, shell scripts that help you do
this for Gentoo? If so, would you be willing to share them? Could
you share any other tips on how to do this task?
Thanks,
Here's Dan's informative reply:
Hello,
First off, I quit Gentoo development a few months ago. danarmak@OBSCURED1
will stop receiving mail sometime soon, so please mail me at
danarmak@OBSCURED2 and fix the link in that wiki if you can.
About splitting packages: I don't have any scripts that'd help you (what we
have is ebuild-specific), but the info we've gathered while creating the
split KDE ebuilds will probably be useful.
When splitting the ebuilds, we first had to list the split packages mapped to
each monolithic package. Some of the toplevel dirs in the monolithic tarball
are upstream-deprecated, some split packages include more than one top-level
dir, etc.
Then we had to map out the inter-dependencies between split packages. This
include many build-time deps that are not actually runtime deps, because
upstream apparently isn't used to the idea of selectively compiling only one
app; distros which aren't source-based like Gentoo compile everything and
then just package in pieces.
And finally we had to check which of the deps (and reverse deps) the
monolithic kdepim package had belonged to which derived split ebuild.
I've never used Arch Linux; will you need to take per-split-package compile
time deps into account? If you do, this will probably be the most tricky
part. Some apps rely on libraries being built in-tree, and not just present
in $DESTDIR. So to build e.g. kmail, you need to take some 9 libraries from
kdepim, which are installed by other packages, and copy or symlink the
installed .so and .la files back into you build tree. Similar things happen
with other buildtime-generated stuff.
Luckily you can gather all this info from the Gentoo ebuilds (viewcvs:
http://sources.gentoo.org/viewcvs.py/gentoo-x86/).
eclass/kde-functions.eclass defines the KDE_DERIVATION_MAP variable. This maps
split packages to monolithic ones, so you can see what all there is. Then you
can look at the ebuilds for each split package.
The global variables starting with KM (for kde-meta-) in each ebuild are
instructions to the split ebuild build system. There's a brief explanation of
what they do in eclass/kde-meta.eclass (comment block starting with "Set the
following variables"). So looking at e.g. the kmail ebuild
(kde-base/kmail/kmail-3.5.4.ebuild) you'll see:
DEPEND=, RDEPEND=: normal build- and run-time dependencies.
KMCOPYLIB: as described above, these libs are copied from the live system to
the build tree.
KMEXTRACTONLY: these extra dirs are extracted (from the kdepim tarball) but
are not compiled. The kmail compilation accesses non-installed headers there
or whatever.
KMCOMPILEONLY: this dir is extracted and compiled, but not installed. Probably
builds e.g. a static library included by kmail.
KMEXTRA: stuff that's built and installed - basically pieces of kmail outside
the main kdepim/kmail directory.
HTH. Feel free to ask for more info. You can also ask the remaining Gentoo KDE
packagers at kde@OBSCURED3.
Dan Armak
Also want to add: No, I don't have a clue what I'm getting myself into. Never stopped me before. 8)
EDIT: Obscured e-mail addresses to thwart the spam-bots. -
Debtap - A script to convert .deb packages to Arch Linux packages
I wrote this script in my free time to help people who, for any reason, want to convert a .deb to an Arch Linux package. It works in a similar way with alien (which converts .deb packages to .rpm packages and vice versa), but, unlike alien, it is focused on accuracy of conversion, trying to translate Debian/Ubuntu packages names to the correct Arch Linux packages names and store them in the dependencies fields of the .PKGINFO metadata in the final package. In other words, it won't only create an Arch package with the data of the original .deb package, but also it will try to create a valid and as accurate as possible .PKGINFO metadata file in the converted package. It uses pkgfile and pacman utilities to achieve this accuracy. The final package can be installed like any local Arch Linux package. Debtap is now available on AUR!
FAQ
Q: What "debtap" stands for?
A: DEB To Arch (Linux) Package
Q: Isn't better to download an official package or write a PKGBUILD in case I need to compile a package or convert a .deb package to an Arch Linux package?
A: Sure it is, and I truely encourage you to do so. Debtap was written to create packages that either cannot be compiled (closed source packages) or cannot be built from AUR for various reasons (error during compiling or unavailable files), as a quick 'n' dirty solution and an extra option for creating Arch Linux packages for Arch Linux users.
Q: So debtap will help me only in case I need to convert specific .deb packages to Arch Linux packages?
A: No. In case you need to write a new PKGBUILD for a package that already exists in the Debian/Ubuntu distributions, by converting its .deb package to Arch package with debtap, thanks to the packages names translator function inside the script, it can help you determine which dependencies are needed for the package you write the PKGBUILD for and complete the necessary fields.
Q: What are the minimum requirements to run this script?
A: You need to have installed these dependencies: bash, binutils (provides ar utility for extracting .deb package), pkgfile, and fakeroot. You must run at least once (preferably recently) "debtap -u" to create/update pkgfile and debtap database (you do this with root privileges).
Q: Debtap needs a lot of time to convert a package. So, why this is happening?
A: Like I said, debtap is focused on accuracy. It won't just unpack a .deb package and then repackage its data to an Arch Linux package, ignoring metadata. Depending on the speed of your processor and the package itself, conversion can take from a few seconds to several minutes.
Q: During conversion I get several warning messages, why?
A: Debtap cannot be 100% accurate for several reasons, the main reason for this is the complexity of packages names. If you want to check the freshly generated .PKGINFO and .INSTALL (this is optional file) metadata files or even fix the untranslated packages names inside .PKGINFO, debtap offers you the option to edit these files before compressing the final package.
Q: How do I use debtap?
A: The syntax is quite simple actually: debtap [option] package_filename
For example: debtap world-of-goo-demo_1.0_i386.deb
Any recommendations or questions for debtap are welcomed!
Last edited by helix (2015-05-21 22:54:17)Hi helix. I've had trouble trying to use your script with ubuntu software from The Open University
debtap OpenUniversity-ubuntu-0.1.3.20130104.deb
==> Extracting package data...
==> Fixing possible directories structure differencies...
==> Generating .PKGINFO file...
debtap OpenUniversity-ubuntu-0.1.3.20130104.deb
==> Extracting package data...
==> Fixing possible directories structure differencies...
==> Generating .PKGINFO file...
:: Enter Packager name:
NewPepper2013
:: Enter package license (you can enter multiple licenses comma seperated):
closed
:: If you want to edit .PKGINFO file, press (1) For vi (2) For nano (3) For a cu stom editor or any other key to continue:
==> Generating .MTREE file...
==> Creating final package...
xz: unrecognized option '--1-any.pkg.tar'
xz: Try `xz --help' for more information.
mv: cannot stat â*.xzâ: No such file or directory
==> Removing leftover files...
==> Package successfully created!
The software is called NewPepper 2013 but i've not been able to find it online except on the ou website. -
Nfs4-utils-1.1.2 does not compile against heimdal-1.2.1
Hi,
ive changed (for testing purpose only of course) the gssapi_krb5.h from heimdal against: /opt/mit-krb5/include/gssapi/gssapi_krb5.h. nfs4-utils compile fine after this.
so one solution would be to change heimdal to provide kerberos and do the same with mit-krb5 from aur which would offer the user a choice and allow the usage of nfs4.
the heimdal mailing list seems to be dead anyway.
but for this solution to work some packages need to change their deps, for example on my system:
pacman -R heimdal
checking dependencies...
error: failed to prepare transaction (could not satisfy dependencies)
:: evolution-data-server: requires heimdal>=1.2
:: gnome-vfs: requires heimdal>=1.2
:: gtk2: requires heimdal>=1.2
:: imagemagick: requires heimdal>=1.2.1
:: libcups: requires heimdal>=1.2
:: neon: requires heimdal>=1.2.1
:: openssh: requires heimdal>=1.2-1
:: pam-krb5: requires heimdal>=1.2
:: smbclient: requires heimdal>=1.2-1
any other ideas?Hi metalfan,
i'm using a nfs4-utils ver. 1.1.4 build and modified by me and i'd like to share my solution to this problem in the hope that you can find it useful. About the impossibility to build nfs-utils (and the needed package 'librpcsecgss') against heimdal it's because the implemetation of gssapi in libgssglue conflicts with heimdal.
In gentoo Bryan Jacobs has produced a patch to nfs-utils/librpcsecgss that allow these packages to compile against heimdal without the gssapi intermediate library 'libgssglue' (in this way all that is needed for gssapi is provided by heimdal).
The nfs4-utils and librpcsecgss packages in AUR are orphans and I don't know how to load my librpcsecgss.tar.gz and nfs4-utils.tar.gz in order to share them so, following in this post, I attached all the code and any reference I have about this problem but if you want I can send to you my tar.gz arch packages.
Sorry for the long post...
bye
All you have to do is first build and install the package 'librpcsecgss' with dep on 'heimdal' instead of 'libgssglue' applying the patch that you can find in http://bugs.gentoo.org/show_bug.cgi?id=231395
patch: librpcsecgss-0.18-heimdal.patch
diff -NaurwB librpcsecgss-0.18.orig/configure.in librpcsecgss-0.18/configure.in
--- librpcsecgss-0.18.orig/configure.in 2008-04-09 00:05:40.000000000 +0200
+++ librpcsecgss-0.18/configure.in 2008-06-12 19:05:51.000000000 +0200
@@ -12,10 +12,15 @@
AC_PROG_RANLIB
# Checks for libraries.
-PKG_CHECK_MODULES([GSSGLUE], [libgssglue >= 0.1], [],
+PKG_CHECK_MODULES([GSSGLUE], [libgssglue >= 0.1],
+ [echo GSSGLUE found; GSSAPI_IMPLEMENTATION=libgssglue],
+ [PKG_CHECK_MODULES([GSSGLUE], [heimdal-gssapi],
+ [echo HEIMDAL found; GSSAPI_IMPLEMENTATION=heimdal-gssapi],
[AC_MSG_ERROR([Unable to locate information required to use libgssglue.
If you have pkgconfig installed, you might try setting environment
- variable PKG_CONFIG_PATH to /usr/local/lib/pkgconfig])])
+ variable PKG_CONFIG_PATH to /usr/local/lib/pkgconfig])])])
+
+AC_SUBST([GSSAPI_IMPLEMENTATION])
# Checks for header files.
AC_HEADER_STDC
diff -NaurwB librpcsecgss-0.18.orig/librpcsecgss.pc.in librpcsecgss-0.18/librpcsecgss.pc.in
--- librpcsecgss-0.18.orig/librpcsecgss.pc.in 2007-09-06 17:39:04.000000000 +0200
+++ librpcsecgss-0.18/librpcsecgss.pc.in 2008-06-12 19:06:40.000000000 +0200
@@ -5,7 +5,7 @@
Name: librpcsecgss
Description: Library that implements rpcsec_gss interface.
-Requires: libgssglue
+Requires: @GSSAPI_IMPLEMENTATION@
Version: @PACKAGE_VERSION@
Libs: -L@libdir@ -lrpcsecgss
Cflags: -I@includedir@/rpcsecgss
The PKGBUILD I used is:
# $Id: PKGBUILD,v 1.43 2007/09/23 07:37:00 tom Exp $
# Maintainer: Andrew Krawchyk <[email protected]>
# Contributor: Marco Lima <[email protected]>
pkgname=librpcsecgss
pkgver=0.18
pkgrel=2
pkgdesc="Library for RPCSECGSS support"
arch=('i686' 'x86_64')
url="http://www.citi.umich.edu/projects/nfsv4/linux/"
license=('GPL')
depends=('glibc' 'tcp_wrappers' 'libevent>=1.3d' 'heimdal>=1.2-1')
source=("http://www.citi.umich.edu/projects/nfsv4/linux/$pkgname/$pkgname-$pkgver.tar.gz"
"librpcsecgss-0.18-heimdal.patch")
md5sums=('f2c4a69c5a32f62b762a569b8d962156'
'0cfe088551d5776f5bc08c1741a34346')
build() {
cd "$srcdir/$pkgname-$pkgver"
# Patch from gentoo for heimdal compatibility Bug #231395
# http://bugs.gentoo.org/show_bug.cgi?id=231395
patch -Np1 -i ../librpcsecgss-0.18-heimdal.patch || return 1
rm -f config.guess config.sub ltmain.sh
autoreconf -i
GSSAPI_CFLAGS='-I/usr/include/gssapi' \
./configure \
--prefix=/usr \
--sysconfdir=/etc \
--mandir=/usr/share/man \
--infodir=/usr/share/info
make || return 1
make DESTDIR="$pkgdir/" install || return 1
Then you need to build the package 'nfs4-utils' with dep only on 'librpcsecgss' (remove 'libgssglue'... as said the gssapi is provided by heimdal); to build the package you need the patches that you can find in http://bugs.gentoo.org/show_bug.cgi?id=231396
patch: nfs-utils-1.1.2-kerberos-ac.patch
diff -NaurwB nfs-utils-1.1.2.orig/aclocal/kerberos5.m4 nfs-utils-1.1.2/aclocal/kerberos5.m4
--- nfs-utils-1.1.2.orig/aclocal/kerberos5.m4 2008-03-14 16:46:29.000000000 +0100
+++ nfs-utils-1.1.2/aclocal/kerberos5.m4 2008-06-12 17:13:51.000000000 +0200
@@ -1,112 +1,48 @@
-dnl Checks for Kerberos
-dnl NOTE: while we intend to do generic gss-api, currently we
-dnl have a requirement to get an initial Kerberos machine
-dnl credential. Thus, the requirement for Kerberos.
-dnl The Kerberos gssapi library will be dynamically loaded?
AC_DEFUN([AC_KERBEROS_V5],[
+ K5CONFIG="krb5-config"
AC_MSG_CHECKING(for Kerberos v5)
- AC_ARG_WITH(krb5,
- [AC_HELP_STRING([--with-krb5=DIR], [use Kerberos v5 installation in DIR])],
+ AC_ARG_WITH(krb5-config,
+ [AC_HELP_STRING([--with-krb5-config=PATH], [Full Path to krb5-config.])],
[ case "$withval" in
yes|no)
- krb5_with=""
+ K5CONFIG="krb5-config"
- krb5_with="$withval"
+ K5CONFIG="$withval"
esac ]
- for dir in $krb5_with /usr /usr/kerberos /usr/local /usr/local/krb5 \
- /usr/krb5 /usr/heimdal /usr/local/heimdal /usr/athena ; do
- dnl This ugly hack brought on by the split installation of
- dnl MIT Kerberos on Fedora Core 1
- K5CONFIG=""
- if test -f $dir/bin/krb5-config; then
- K5CONFIG=$dir/bin/krb5-config
- elif test -f "/usr/kerberos/bin/krb5-config"; then
- K5CONFIG="/usr/kerberos/bin/krb5-config"
- elif test -f "/usr/lib/mit/bin/krb5-config"; then
- K5CONFIG="/usr/lib/mit/bin/krb5-config"
- fi
if test "$K5CONFIG" != ""; then
KRBCFLAGS=`$K5CONFIG --cflags`
KRBLIBS=`$K5CONFIG --libs gssapi`
- K5VERS=`$K5CONFIG --version | head -n 1 | awk '{split($(4),v,"."); if (v@<:@"3"@:>@ == "") v@<:@"3"@:>@ = "0"; print v@<:@"1"@:>@v@<:@"2"@:>@v@<:@"3"@:>@ }'`
- AC_DEFINE_UNQUOTED(KRB5_VERSION, $K5VERS, [Define this as the Kerberos version number])
- if test -f $dir/include/gssapi/gssapi_krb5.h -a \
- \( -f $dir/lib/libgssapi_krb5.a -o \
- -f $dir/lib64/libgssapi_krb5.a -o \
- -f $dir/lib64/libgssapi_krb5.so -o \
- -f $dir/lib/libgssapi_krb5.so \) ; then
+ if $K5CONFIG --version | grep -q -e heimdal; then
+ K5VERS=`$K5CONFIG --version | head -n 1 | cut -f2 -d ' ' | tr -d '.'`
+ AC_DEFINE(HAVE_HEIMDAL, 1, [Define this if you have Heimdal Kerberos libraries])
+ gssapi_lib=gssapi
+ KRBIMPL="heimdal"
+ elif $K5CONFIG --version | grep -q -e mit; then
+ K5VERS=`$K5CONFIG --version | head -n 1 | cut -f4 -d ' ' | tr -d '.'`
AC_DEFINE(HAVE_KRB5, 1, [Define this if you have MIT Kerberos libraries])
- KRBDIR="$dir"
- dnl If we are using MIT K5 1.3.1 and before, we *MUST* use the
- dnl private function (gss_krb5_ccache_name) to get correct
- dnl behavior of changing the ccache used by gssapi.
- dnl Starting in 1.3.2, we *DO NOT* want to use
- dnl gss_krb5_ccache_name, instead we want to set KRB5CCNAME
- dnl to get gssapi to use a different ccache
if test $K5VERS -le 131; then
AC_DEFINE(USE_GSS_KRB5_CCACHE_NAME, 1, [Define this if the private function, gss_krb5_cache_name, must be used to tell the Kerberos library which credentials cache to use. Otherwise, this is done by setting the KRB5CCNAME environment variable])
fi
gssapi_lib=gssapi_krb5
- break
- dnl The following ugly hack brought on by the split installation
- dnl of Heimdal Kerberos on SuSe
- elif test \( -f $dir/include/heim_err.h -o\
- -f $dir/include/heimdal/heim_err.h \) -a \
- -f $dir/lib/libroken.a; then
- AC_DEFINE(HAVE_HEIMDAL, 1, [Define this if you have Heimdal Kerberos libraries])
- KRBDIR="$dir"
- gssapi_lib=gssapi
- break
- fi
- fi
- done
- dnl We didn't find a usable Kerberos environment
- if test "x$KRBDIR" = "x"; then
- if test "x$krb5_with" = "x"; then
- AC_MSG_ERROR(Kerberos v5 with GSS support not found: consider --disable-gss or --with-krb5=)
+ KRBIMPL="mit-krb5"
else
- AC_MSG_ERROR(Kerberos v5 with GSS support not found at $krb5_with)
- fi
+ AC_MSG_ERROR(Unknown Kerberos 5 Implementation. Is neither heimdal or mit-krb5.)
+ KRBIMPL="unknown"
fi
- AC_MSG_RESULT($KRBDIR)
- dnl Check if -rpath=$(KRBDIR)/lib is needed
- echo "The current KRBDIR is $KRBDIR"
- if test "$KRBDIR/lib" = "/lib" -o "$KRBDIR/lib" = "/usr/lib" \
- -o "$KRBDIR/lib" = "//lib" -o "$KRBDIR/lib" = "/usr//lib" ; then
- KRBLDFLAGS="";
- elif /sbin/ldconfig -p | grep > /dev/null "=> $KRBDIR/lib/"; then
- KRBLDFLAGS="";
- else
- KRBLDFLAGS="-Wl,-rpath=$KRBDIR/lib"
+ AC_DEFINE_UNQUOTED(KRB5_VERSION, $K5VERS, [Define this as the Kerberos version number])
fi
+ AC_MSG_RESULT($KRBIMPL)
- dnl Now check for functions within gssapi library
- AC_CHECK_LIB($gssapi_lib, gss_krb5_export_lucid_sec_context,
- AC_DEFINE(HAVE_LUCID_CONTEXT_SUPPORT, 1, [Define this if the Kerberos GSS library supports gss_krb5_export_lucid_sec_context]), ,$KRBLIBS)
- AC_CHECK_LIB($gssapi_lib, gss_krb5_set_allowable_enctypes,
- AC_DEFINE(HAVE_SET_ALLOWABLE_ENCTYPES, 1, [Define this if the Kerberos GSS library supports gss_krb5_set_allowable_enctypes]), ,$KRBLIBS)
- AC_CHECK_LIB($gssapi_lib, gss_krb5_ccache_name,
- AC_DEFINE(HAVE_GSS_KRB5_CCACHE_NAME, 1, [Define this if the Kerberos GSS library supports gss_krb5_ccache_name]), ,$KRBLIBS)
- dnl Check for newer error message facility
- AC_CHECK_LIB($gssapi_lib, krb5_get_error_message,
- AC_DEFINE(HAVE_KRB5_GET_ERROR_MESSAGE, 1, [Define this if the function krb5_get_error_message is available]), ,$KRBLIBS)
+ AC_CHECK_LIB($gssapi_lib, gss_krb5_export_lucid_sec_context, AC_DEFINE(HAVE_LUCID_CONTEXT_SUPPORT, 1, [Define this if the Kerberos GSS library supports gss_krb5_export_lucid_sec_context]), ,$KRBLIBS)
+ AC_CHECK_LIB($gssapi_lib, gss_krb5_set_allowable_enctypes, AC_DEFINE(HAVE_SET_ALLOWABLE_ENCTYPES, 1, [Define this if the Kerberos GSS library supports gss_krb5_set_allowable_enctypes]), ,$KRBLIBS)
+ AC_CHECK_LIB($gssapi_lib, gss_krb5_ccache_name, AC_DEFINE(HAVE_GSS_KRB5_CCACHE_NAME, 1, [Define this if the Kerberos GSS library supports gss_krb5_ccache_name]), ,$KRBLIBS)
+ AC_CHECK_LIB($gssapi_lib, krb5_get_error_message, AC_DEFINE(HAVE_KRB5_GET_ERROR_MESSAGE, 1, [Define this if the function krb5_get_error_message is available]), ,$KRBLIBS)
+ AC_CHECK_LIB($gssapi_lib, krb5_get_init_creds_opt_set_addressless, AC_DEFINE(HAVE_KRB5_GET_INIT_CREDS_OPT_SET_ADDRESSLESS, 1, [Define this if the function krb5_get_init_creds_opt_set_addressless is available]), ,$KRBLIBS)
- dnl Check for function to specify addressless tickets
- AC_CHECK_LIB($gssapi_lib, krb5_get_init_creds_opt_set_addressless,
- AC_DEFINE(HAVE_KRB5_GET_INIT_CREDS_OPT_SET_ADDRESSLESS, 1, [Define this if the function krb5_get_init_creds_opt_set_addressless is available]), ,$KRBLIBS)
- dnl If they specified a directory and it didn't work, give them a warning
- if test "x$krb5_with" != "x" -a "$krb5_with" != "$KRBDIR"; then
- AC_MSG_WARN(Using $KRBDIR instead of requested value of $krb5_with for Kerberos!)
- fi
- AC_SUBST([KRBDIR])
AC_SUBST([KRBLIBS])
AC_SUBST([KRBCFLAGS])
AC_SUBST([KRBLDFLAGS])
patch: nfs-utils-1.1.2-no_libgssapi.patch
Index: nfs-utils-1.1.0/utils/gssd/context_lucid.c
===================================================================
--- nfs-utils-1.1.0.orig/utils/gssd/context_lucid.c
+++ nfs-utils-1.1.0/utils/gssd/context_lucid.c
@@ -48,8 +48,10 @@
#include <krb5.h>
#include <gssapi/gssapi.h>
#ifndef OM_uint64
+#ifndef GSSAPI_GSSAPI_H_
typedef uint64_t OM_uint64;
#endif
+#endif
#include <gssapi/gssapi_krb5.h>
static int
@@ -171,10 +173,10 @@ serialize_krb5_ctx(gss_ctx_id_t ctx, gss
int retcode = 0;
printerr(2, "DEBUG: serialize_krb5_ctx: lucid version!\n");
- maj_stat = gss_export_lucid_sec_context(&min_stat, &ctx,
+ maj_stat = gss_krb5_export_lucid_sec_context(&min_stat, &ctx,
1, &return_ctx);
if (maj_stat != GSS_S_COMPLETE) {
- pgsserr("gss_export_lucid_sec_context",
+ pgsserr("gss_krb5_export_lucid_sec_context",
maj_stat, min_stat, &krb5oid);
goto out_err;
@@ -198,9 +200,9 @@ serialize_krb5_ctx(gss_ctx_id_t ctx, gss
else
retcode = prepare_krb5_rfc_cfx_buffer(lctx, buf);
- maj_stat = gss_free_lucid_sec_context(&min_stat, ctx, return_ctx);
+ maj_stat = gss_krb5_free_lucid_sec_context(&min_stat, ctx);
if (maj_stat != GSS_S_COMPLETE) {
- pgsserr("gss_export_lucid_sec_context",
+ pgsserr("gss_krb5_export_lucid_sec_context",
maj_stat, min_stat, &krb5oid);
printerr(0, "WARN: failed to free lucid sec context\n");
Index: nfs-utils-1.1.0/utils/gssd/krb5_util.c
===================================================================
--- nfs-utils-1.1.0.orig/utils/gssd/krb5_util.c
+++ nfs-utils-1.1.0/utils/gssd/krb5_util.c
@@ -294,10 +294,10 @@ limit_krb5_enctypes(struct rpc_gss_sec *
return -1;
- maj_stat = gss_set_allowable_enctypes(&min_stat, credh, &krb5oid,
+ maj_stat = gss_krb5_set_allowable_enctypes(&min_stat, credh,
num_enctypes, &enctypes);
if (maj_stat != GSS_S_COMPLETE) {
- pgsserr("gss_set_allowable_enctypes",
+ pgsserr("gss_krb5_set_allowable_enctypes",
maj_stat, min_stat, &krb5oid);
gss_release_cred(&min_stat, &credh);
return -1;
patch: nfs-utils-1.1.2-pkgconfig_ac.patch
--- configure.ac 2008-03-14 15:46:29.000000000 +0000
+++ configure.ac 2008-05-03 10:30:21.000000000 +0000
@@ -185,7 +185,7 @@
[AC_MSG_ERROR([Unable to locate information required to use librpcsecgss. If you have pkgconfig installed, you might try setting environment variable PKG_CONFIG_PATH to /usr/local/lib/pkgconfig])
- PKG_CHECK_MODULES(GSSGLUE, libgssglue >= 0.1)
+ PKG_CHECK_MODULES(GSSGLUE, libgssglue >= 0.1, , [PKG_CHECK_MODULES(GSSGLUE, heimdal-gssapi)])
fi
fi
@@ -228,9 +228,9 @@
dnl This is not done until here because we need to have KRBLIBS set
dnl ("librpcsecgss=1" is so that it doesn't get added to LIBS)
- AC_CHECK_LIB(rpcsecgss, authgss_create_default, [librpcsecgss=1], AC_MSG_ERROR([librpcsecgss needed for nfsv4 support]), -lgssglue -ldl)
+ AC_CHECK_LIB(rpcsecgss, authgss_create_default, [librpcsecgss=1], AC_MSG_ERROR([librpcsecgss needed for nfsv4 support]), $GSSGLUE_CFLAGS)
AC_CHECK_LIB(rpcsecgss, authgss_set_debug_level,
- AC_DEFINE(HAVE_AUTHGSS_SET_DEBUG_LEVEL, 1, [Define this if the rpcsec_gss library has the function authgss_set_debug_level]),, -lgssglue -ldl)
+ AC_DEFINE(HAVE_AUTHGSS_SET_DEBUG_LEVEL, 1, [Define this if the rpcsec_gss library has the function authgss_set_debug_level]),, $GSSGLUE_CFLAGS)
fi
patch: nfs-utils-1.1.4-heimdal_functions.patch
diff -Naur nfs-utils-1.1.4/utils/gssd/krb5_util.c nfs-utils-1.1.4-r1/utils/gssd/krb5_util.c
--- utils/gssd/krb5_util.c 2008-10-17 14:20:09.000000000 +0000
+++ utils/gssd/krb5_util.c 2008-11-22 13:52:42.000000000 +0000
@@ -927,9 +927,37 @@
krb5_error_code ret;
krb5_creds creds;
- krb5_cc_cursor cur;
int found = 0;
+#ifdef HAVE_HEIMDAL
+ krb5_creds pattern;
+ krb5_realm *client_realm;
+
+ krb5_cc_clear_mcred(&pattern);
+
+ client_realm = krb5_princ_realm (context, principal);
+
+ ret = krb5_make_principal (context, &pattern.server,
+ *client_realm, KRB5_TGS_NAME, *client_realm,
+ NULL);
+ if (ret)
+ krb5_err (context, 1, ret, "krb5_make_principal");
+ pattern.client = principal;
+
+ ret = krb5_cc_retrieve_cred (context, ccache, 0, &pattern, &creds);
+ krb5_free_principal (context, pattern.server);
+ if (ret) {
+ if (ret == KRB5_CC_END)
+ return 1;
+ krb5_err (context, 1, ret, "krb5_cc_retrieve_cred");
+ }
+
+ found = creds.times.endtime > time(NULL);
+
+ krb5_free_cred_contents (context, &creds);
+#else
+ krb5_cc_cursor cur;
+
ret = krb5_cc_start_seq_get(context, ccache, &cur);
if (ret)
return 0;
@@ -949,6 +977,7 @@
krb5_free_cred_contents(context, &creds);
krb5_cc_end_seq_get(context, ccache, &cur);
+#endif
return found;
@@ -995,6 +1024,9 @@
krb5_free_principal(context, principal);
err_princ:
+#ifdef HAVE_HEIMDAL
+#define KRB5_TC_OPENCLOSE 0x00000001
+#endif
krb5_cc_set_flags(context, ccache, KRB5_TC_OPENCLOSE);
krb5_cc_close(context, ccache);
err_cache:
The PKGBUILD I used is the follow. As you can see I changed the rc.d scripts to have only two scripts to do the job (client side and server side) to start the nfsd and related/needed daemons and take care to load and mount modules and filesystems needed but you can watch only at the use of the patch and reconfiguration before the configure/make step and use for the rest of the package the usual arch scripts.
# Maintainer: abelstr <[email protected]>
# Contributor: Marco Lima <[email protected]>
pkgname=nfs4-utils
_realname=nfs-utils
pkgver=1.1.4
pkgrel=3
pkgdesc="Support programs for Network File Systems"
arch=('i686' 'x86_64')
url="http://nfs.sourceforge.net"
license=('GPL')
depends=('glibc' 'tcp_wrappers' 'e2fsprogs' 'portmap' 'nfsidmap' 'librpcsecgss')
replaces=('nfs-utils')
provides=('nfs-utils')
backup=(etc/{exports,gssapi_mech.conf,idmapd.conf} etc/conf.d/{nfs-common.conf,nfs-server.conf})
install="$_realname.install"
options=('docs')
source=("http://garr.dl.sourceforge.net/sourceforge/nfs/$_realname-$pkgver.tar.bz2"
nfs-common
nfs-common.conf
nfs-server
nfs-server.conf
exports
start-statd.patch
idmapd.conf
gssapi_mech.conf
nfs-utils-1.1.2-kerberos-ac.patch
nfs-utils-1.1.2-no_libgssapi.patch
nfs-utils-1.1.2-pkgconfig_ac.patch
nfs-utils-1.1.4-heimdal_functions.patch)
md5sums=('3ed5b9cb73fd1c9b358c7bfa7a6ae150'
'3fa8ad66f434e8277e7a82c7c699ce46'
'a05e6e91307af37e7bd612b356bd0b6a'
'1852b84523c74e02831b60dcc5739f7a'
'1c6c755fcfef4e5e19ee7414d3020269'
'ff585faf410a62c4333a027c50b56bae'
'11f6c229108c223dc5fe849d11aecaf3'
'64eaa20ea49e324e5a72858f104a61eb'
'234b9cca75a33af98eda3f1683756879'
'f3be115d392d9f9bb0f056e8d4341a14'
'de30683636eda26421e58937a784b123'
'd07c449358eeb254850975add54bcff2'
'959a81d86da677d42e76b597656171a2')
build() {
cd "$srcdir/$_realname-$pkgver"
# Patches from gentoo for heimdal compatibility Bug 231396
# http://bugs.gentoo.org/show_bug.cgi?id=231396
patch -Np1 -i ../nfs-utils-1.1.2-kerberos-ac.patch || return 1
patch -Np0 -i ../nfs-utils-1.1.2-pkgconfig_ac.patch || return 1
patch -Np1 -i ../nfs-utils-1.1.2-no_libgssapi.patch || return 1
patch -Np0 -i ../nfs-utils-1.1.4-heimdal_functions.patch || return 1
rm -f config.guess config.sub ltmain.sh
autoreconf -i
export GSSAPI_CFLAGS='-I/usr/include/gssapi'
export GSSAPI_LIBS='-lgssapi -ldl'
patch -Np0 -i ../start-statd.patch || return 1
./configure \
--prefix=/usr \
--sysconfdir=/etc \
--with-statedir=/var/lib/nfs \
--mandir=/usr/share/man \
--infodir=/usr/share/info \
--enable-nfsv3 \
--enable-nfsv4 \
--enable-gss \
--with-tcp-wrappers || return 1
make || return 1
make DESTDIR="$pkgdir/" install || return 1
# NFS & NFSv4 init scripts
install -D -m 755 ../nfs-common "$pkgdir/"etc/rc.d/nfs-common
install -D -m 755 ../nfs-server "$pkgdir/"etc/rc.d/nfs-server
# Configuration
install -D -m 644 ../exports "$pkgdir/"etc/exports
install -D -m 644 ../idmapd.conf "$pkgdir/"etc/idmapd.conf
install -D -m 644 ../gssapi_mech.conf "$pkgdir/"etc/gssapi_mech.conf
install -D -m 644 ../nfs-common.conf "$pkgdir/"etc/conf.d/nfs-common.conf
install -D -m 644 ../nfs-server.conf "$pkgdir/"etc/conf.d/nfs-server.conf
# directories
mkdir "$pkgdir/"var/lib/nfs/rpc_pipefs
mkdir "$pkgdir/"var/lib/nfs/v4recovery
# copy docs
install -m 755 -d "$pkgdir/"usr/share/doc/$pkgname || return 1
install -m 644 -t "$pkgdir/"usr/share/doc/$pkgname AUTHORS ChangeLog INSTALL \
NEWS README || return 1
idmapd.conf
[General]
Verbosity = 0
Pipefs-Directory = /var/lib/nfs/rpc_pipefs
Domain = localdomain
[Mapping]
Nobody-User = nobody
Nobody-Group = nogroup
[Translation]
Method = nsswitch
gssapi_mech.conf
# Example /etc/gssapi_mech.conf file
# GSSAPI Mechanism Definitions
# This configuration file determines which GSS-API mechanisms
# the gssd code should use
# NOTE:
# The initiaiization function "mechglue_internal_krb5_init"
# is used for the MIT krb5 gssapi mechanism. This special
# function name indicates that an internal function should
# be used to determine the entry points for the MIT gssapi
# mechanism funtions.
# library initialization function
# ================================ ==========================
# The MIT K5 gssapi library, use special function for initialization.
#/usr/lib/libgssapi_krb5.so mechglue_internal_krb5_init
/usr/lib/libgssapi.so mechglue_internal_krb5_init
# The SPKM3 gssapi library function. Use the function spkm3_gss_initialize.
# /usr/local/gss_mechs/spkm/spkm3/libgssapi_spkm3.so spkm3_gss_initialize
exports
# /etc/exports
# List of directories exported to NFS clients. See exports(5).
# Use exportfs -arv to reread.
# Example for NFSv2 and NFSv3:
# /srv/home hostname1(rw,sync) hostname2(ro,sync)
# Example for NFSv4:
# /srv/nfs4 hostname1(rw,sync,fsid=0)
# /srv/nfs4/home hostname1(rw,sync,nohide)
# Using Kerberos and integrity checking:
# /srv/nfs4 gss/krb5i(rw,sync,fsid=0,crossmnt)
# /srv/nfs4/home gss/krb5i(rw,sync,nohide)
start-statd.patch
--- utils/statd/start-statd 2008-10-17 16:20:09.000000000 +0200
+++ utils/statd/start-statd.new 2008-12-06 11:43:12.000000000 +0100
@@ -1,9 +1,16 @@
#!/bin/sh
+
+# Original script provided by the NFS project
+# Modified for Arch Linux by Tom Killian
+
# nfsmount calls this script when mounting a filesystem with locking
# enabled, but when statd does not seem to be running (based on
# /var/run/rpc.statd.pid).
# It should run run statd with whatever flags are apropriate for this
# site.
-PATH=/sbin:/usr/sbin
-exec rpc.statd --no-notify
+
+# source application-specific settings
+[ -f /etc/conf.d/nfs-common.conf ] && . /etc/conf.d/nfs-common.conf
+
+exec /usr/sbin/rpc.statd $STATD_OPTS
nfs-utils.install
## arg 1: the new package version
post_install() {
cat << 'EOM'
==>
==> PLEASE NOTE:
==> Extended configuration options for NFS (clients & server) are available in
==> /etc/conf.d/nfs-common.conf and in /etc/conf.d/nfs-server.conf
==>
==> Please refer to http://wiki.archlinux.org/index.php/Nfs
==> for further information on NFS; for NFSv4, refer to
==> http://wiki.archlinux.org/index.php/NFSv4
==> Also, if you plan on using NFSv4, in /etc/conf.d/nfs-common.conf set:
==> 1) NEED_IDMAPD="yes" to start rpc.idmapd - on clients & server.
==> rpc.idmapd needs to be properly configured; edit at least the
==> daemon line in /etc/idmapd.conf.
==> 2) NEED_GSSD="yes" to start rpc.gssd (GSS authentication) - only on clients.
==> 3) Add "rpc_pipefs /var/lib/nfs/rpc_pipefs rpc_pipefs 0 0" to /etc/fstab.
==> If not mounted when the init script nfs-common starts it tries to mount the
==> filesystem automatically (if rpc.idmapd or rpc.gssd is needed);
==> see /etc/conf.d/nfs-common.conf for extended configuration options.
==> in /etc/conf.d/nfs-server.conf (only server) set:
==> 1) add "nfsd /proc/fs/nfsd nfsd -o rw,nodev,noexec,nosuid 0 0" to /etc/fstab.
==> If not mounted when the init script nfs-server starts it tries to mount the
==> filesystem automatically; see /etc/conf.d/nfs-server.conf for extended
==> configuration options.
==> 2) NEED_SVCGSSD="yes" to start rpc.svcgssd (GSS authentication) - on server
EOM
## arg 1: the new package version
## arg 2: the old package version
post_upgrade() {
post_install $1
nfs-server.conf
# Parameters to be passed to nfs-server init script.
# Options to pass to rpc.nfsd.
NFSD_OPTS=
# Number of servers to start up; the default is 8 servers.
NFSD_COUNT=
# Where to mount nfsd filesystem; the default is "/proc/fs/nfsd".
PROCNFSD_MOUNTPOINT=
# Options used to mount nfsd filesystem; the default is "rw,nodev,noexec,nosuid".
PROCNFSD_MOUNTOPTS=
# Options for rpc.mountd.
# If you have a port-based firewall, you might want to set up
# a fixed port here using the --port option. For more information,
# see rpc.mountd(8)
MOUNTD_OPTS="--no-nfs-version 1 --no-nfs-version 2"
# Do you want to start the svcgssd daemon? It is only required for Kerberos
# exports. Valid alternatives are "yes" and "no"; the default is "no".
NEED_SVCGSSD=
# Options to pass to rpc.svcgssd.
SVCGSSD_OPTS=
nfs-server
#!/bin/bash
daemon_name=nfs-server
NFSD_COUNT=
NFSD_OPTS=
NEED_SVCGSSD=
SVCGSSD_OPTS=
MOUNTD_OPTS=
PROCNFSD_MOUNTPOINT=
PROCNFSD_MOUNTOPTS=
# rpc.nfsd daemon & binary location
NFSD_PROCESS_NAME=nfsd
NFSD_DAEMON_NAME=rpc.nfsd
NFSD="/usr/sbin/rpc.nfsd"
# rpc.svcgssd daemon & binary location
SVCGSSD_DAEMON_NAME=rpc.svcgssd
SVCGSSD="/usr/sbin/rpc.svcgssd"
# rpc.idmapd daemon & binary location
IDMAPD_DAEMON_NAME=rpc.idmapd
IDMAPD="/usr/sbin/rpc.idmapd"
# rpc.mountd daemon & binary location
MOUNTD_DAEMON_NAME=rpc.mountd
MOUNTD="/usr/sbin/rpc.mountd"
# exortfs binary location
EXPORTFS="/usr/sbin/exportfs"
. /etc/rc.conf
. /etc/rc.d/functions
. /etc/conf.d/$daemon_name.conf
# Default number of nfsd servers
[ -z "$NFSD_COUNT" ] && NFSD_COUNT=8
# Default mountpoint and options for nfsd filesystem
[ -z "$PROCNFSD_MOUNTPOINT" ] && PROCNFSD_MOUNTPOINT="/proc/fs/nfsd"
[ -z "$PROCNFSD_MOUNTOPTS" ] && PROCNFSD_MOUNTOPTS="rw,nodev,noexec,nosuid"
case "$NEED_SVCGSSD" in
yes|no)
NEED_SVCGSSD=no
esac
do_modprobe() {
if [ -x /sbin/modprobe -a -f /proc/modules ]; then
modprobe -q "$1" || true
fi
do_mount() {
if ! grep -E "$1\$" /proc/filesystems &> /dev/null ; then
return 1
fi
if grep -vw "$1" /proc/mounts &> /dev/null ; then
if ! mountpoint -q "$2" ; then
mount -t "$1" "$1" "$2" -o "$3"
return
fi
fi
return 0
do_umount() {
if mountpoint -q "$1" ; then
umount "$1"
fi
return 0
get_pid() {
pidof -o %PPID "$1"
case "$1" in
start)
rc=0
stat_busy "Mounting nfsd filesystem"
do_modprobe nfsd
do_mount nfsd "$PROCNFSD_MOUNTPOINT" "$PROCNFSD_MOUNTOPTS"
rc=$(($rc+$?))
if [ $rc -gt 0 ]; then
stat_fail
exit $rc
else
stat_done
fi
stat_busy "Exporting all directories"
$EXPORTFS -r
rc=$(($rc+$?))
if [ $rc -gt 0 ]; then
stat_fail
exit $rc
else
stat_done
fi
stat_busy "Starting $NFSD_DAEMON_NAME daemon"
PID=$(get_pid $NFSD_PROCESS_NAME)
if [ -z "$PID" ]; then
[ -f /var/run/$NFSD_DAEMON_NAME.pid ] && rm -f /var/run/$NFSD_DAEMON_NAME.pid
# RUN
$NFSD $NFSD_OPTS $NFSD_COUNT
rc=$(($rc+$?))
if [ $rc -gt 0 ]; then
stat_fail
exit $rc
else
echo $(get_pid $NFSD_PROCESS_NAME) > /var/run/$NFSD_DAEMON_NAME.pid
stat_done
fi
else
stat_fail
exit 1
fi
if [ "$NEED_SVCGSSD" = yes ]; then
stat_busy "Starting $SVCGSSD_DAEMON_NAME daemon"
PID=$(get_pid $SVCGSSD)
if [ -z "$PID" ]; then
[ -f /var/run/$SVCGSSD_DAEMON_NAME.pid ] && rm -f /var/run/$SVCGSSD_DAEMON_NAME.pid
# RUN
$SVCGSSD $SVCGSSD_OPTS
rc=$(($rc+$?))
if [ $rc -gt 0 ]; then
stat_fail
exit $rc
else
echo $(get_pid $SVCGSSD) > /var/run/$SVCGSSD_DAEMON_NAME.pid
stat_done
fi
else
stat_fail
exit 1
fi
fi
PID=$(get_pid $IDMAPD)
[ ! -z "$PID" ] && kill -SIGHUP $IDMAPD_DAEMON_NAME &> /dev/null
stat_busy "Starting $MOUNTD_DAEMON_NAME daemon"
PID=$(get_pid $MOUNTD)
if [ -z "$PID" ]; then
[ -f /var/run/$MOUNTD_DAEMON_NAME.pid ] && rm -f /var/run/$MOUNTD_DAEMON_NAME.pid
# RUN
$MOUNTD $MOUNTD_OPTS
rc=$(($rc+$?))
if [ $rc -gt 0 ]; then
stat_fail
exit $rc
else
echo $(get_pid $MOUNTD) > /var/run/$MOUNTD_DAEMON_NAME.pid
stat_done
fi
else
stat_fail
exit 1
fi
add_daemon $daemon_name
stop)
rc=0
stat_busy "Stopping $MOUNTD_DAEMON_NAME daemon"
PID=$(get_pid $MOUNTD)
# KILL
[ ! -z "$PID" ] && kill $PID &> /dev/null
rc=$(($rc+$?))
if [ $rc -gt 0 ]; then
stat_fail
exit $rc
else
rm -f /var/run/$MOUNTD_DAEMON_NAME.pid &> /dev/null
stat_done
fi
if [ "$NEED_SVCGSSD" = yes ]; then
stat_busy "Stopping $SVCGSSD_DAEMON_NAME daemon"
PID=$(get_pid $SVCGSSD)
# KILL
[ ! -z "$PID" ] && kill $PID &> /dev/null
rc=$(($rc+$?))
if [ $rc -gt 0 ]; then
stat_fail
exit $rc
else
rm -f /var/run/$SVCGSSD_DAEMON_NAME.pid &> /dev/null
stat_done
fi
fi
stat_busy "Stopping $NFSD_DAEMON_NAME daemon"
PID=$(get_pid $NFSD_PROCESS_NAME)
# KILL (SIGINT)
[ ! -z "$PID" ] && kill -2 $PID &> /dev/null
rc=$(($rc+$?))
if [ $rc -gt 0 ]; then
stat_fail
exit $rc
else
sleep 1
PID=$(get_pid $NFSD_PROCESS_NAME)
# KILL (KILL) - just to be sure
[ ! -z "$PID" ] && kill -9 $PID &> /dev/null
rm -f /var/run/$NFSD_DAEMON_NAME.pid &> /dev/null
stat_done
fi
stat_busy "Unexporting all directories"
$EXPORTFS -au
rc=$(($rc+$?))
if [ $rc -gt 0 ]; then
stat_fail
exit $rc
else
stat_done
fi
# flush everything out of the kernels export table
if mountpoint -q "$PROCNFSD_MOUNTPOINT" ; then
$EXPORTFS -f
fi
rm_daemon $daemon_name
status)
stat_busy "$daemon_name running"
if ck_daemon $daemon_name; then
stat_fail
else
stat_done
fi
stat_busy "Daemon $NFSD_DAEMON_NAME running"
PID=$(get_pid $NFSD_PROCESS_NAME)
if [ -z "$PID" ]; then
stat_fail
else
stat_done
fi
stat_busy "Daemon $MOUNTD_DAEMON_NAME running"
PID=$(get_pid $MOUNTD)
if [ -z "$PID" ]; then
stat_fail
else
stat_done
fi
if [ "$NEED_SVCGSSD" = yes ]; then
stat_busy "Daemon $SVCGSSD_DAEMON_NAME running"
PID=$(get_pid $SVCGSSD)
if [ -z "$PID" ]; then
stat_fail
else
stat_done
fi
fi
echo
reload)
rc=0
stat_busy "Re-exporting all directories"
$EXPORTFS -r
rc=$(($rc+$?))
if [ $rc -gt 0 ]; then
stat_fail
exit $rc
else
stat_done
fi
restart)
$0 stop
sleep 3
$0 start
echo "usage: $0 {start|stop|status|reload|restart}"
esac
exit 0
nfs-common.conf
# Parameters to be passed to nfs-common (nfs clients & server) init script.
# If you do not set values for the NEED_ options, they will be attempted
# autodetected; this should be sufficient for most people. Valid alternatives
# for the NEED_ options are "yes" and "no".
# Do you want to start the statd daemon? It is not needed for NFSv4.
NEED_STATD=
# Options to pass to rpc.statd.
# N.B. statd normally runs on both client and server, and run-time
# options should be specified accordingly. Specifically, the Arch
# NFS init scripts require the --no-notify flag on the server,
# but not on the client e.g.
# STATD_OPTS="--no-notify -p 32765 -o 32766" -> server
# STATD_OPTS="-p 32765 -o 32766" -> client
STATD_OPTS=
# Do you want to start the idmapd daemon? It is only needed for NFSv4.
NEED_IDMAPD=
# Options to pass to rpc.idmapd.
IDMAPD_OPTS=
# Do you want to start the gssd daemon? It is required for Kerberos mounts.
NEED_GSSD=
# Options to pass to rpc.gssd.
GSSD_OPTS=
# Where to mount rpc_pipefs filesystem; the default is "/var/lib/nfs/rpc_pipefs".
PIPEFS_MOUNTPOINT=
# Options used to mount rpc_pipefs filesystem; the default is "defaults".
PIPEFS_MOUNTOPTS=
nfs-common
#!/bin/bash
daemon_name=nfs-common
NEED_STATD=
STATD_OPTS=
NEED_IDMAPD=
IDMAPD_OPTS=
NEED_GSSD=
GSSD_OPTS=
PIPEFS_MOUNTPOINT=
PIPEFS_MOUNTOPTS=
# rpc.statd daemon & binary location
STATD_DAEMON_NAME=rpc.statd
STATD="/usr/sbin/rpc.statd"
# rpc.idmapd daemon & binary location
IDMAPD_DAEMON_NAME=rpc.idmapd
IDMAPD="/usr/sbin/rpc.idmapd"
# rpc.gssd daemon & binary location
GSSD_DAEMON_NAME=rpc.gssd
GSSD="/usr/sbin/rpc.gssd"
. /etc/rc.conf
. /etc/rc.d/functions
. /etc/conf.d/$daemon_name.conf
# Default mountpoint and options for rpc_pipefs filesystem
[ -z "$PIPEFS_MOUNTPOINT" ] && PIPEFS_MOUNTPOINT="/var/lib/nfs/rpc_pipefs"
[ -z "$PIPEFS_MOUNTOPTS" ] && PIPEFS_MOUNTOPTS="defaults"
# Parse the fstab file, and determine whether we need idmapd and gssd. (The
# /etc/defaults settings, if any, will override our autodetection.) This code
# is partially adapted from the mountnfs.sh script in the sysvinit package.
AUTO_NEED_IDMAPD=no
AUTO_NEED_GSSD=no
if [ -f /etc/fstab ]; then
exec 9<&0 </etc/fstab
while read DEV MTPT FSTYPE OPTS REST; do
if [ "$FSTYPE" = "nfs4" ]; then
AUTO_NEED_IDMAPD=yes
fi
case "$OPTS" in
sec=krb5|*,sec=krb5|sec=krb5,*|*,sec=krb5i,*|sec=krb5i|*,sec=krb5i|sec=krb5i,*|*,sec=krb5i,*|sec=krb5p|*,sec=krb5p|sec=krb5p,*|*,sec=krb5p,*)
AUTO_NEED_GSSD=yes
esac
done
exec 0<&9 9<&-
fi
# We also need idmapd if we run an NFSv4 server. It's fairly difficult
# to autodetect whether there are NFSv4 exports or not, and idmapd is not a
# particularily heavy daemon, so we auto-enable it if we find an /etc/exports
# file. This does not mean that there are NFSv4 or other mounts active (or
# even that nfs-kernel-server is installed), but it matches what the "start"
# condition in nfs-kernel-server's init script does, which has a value in
# itself.
if [ -f /etc/exports ] && grep -q '^[[:space:]]*[^#]*/' /etc/exports; then
AUTO_NEED_IDMAPD=yes
fi
case "$NEED_STATD" in
yes|no)
NEED_STATD=yes
esac
case "$NEED_IDMAPD" in
yes|no)
NEED_IDMAPD=$AUTO_NEED_IDMAPD
esac
case "$NEED_GSSD" in
yes|no)
NEED_GSSD=$AUTO_NEED_GSSD
esac
do_modprobe() {
if [ -x /sbin/modprobe -a -f /proc/modules ]; then
modprobe -q "$1" || true
fi
do_mount() {
if ! grep -E "$1\$" /proc/filesystems &> /dev/null ; then
return 1
fi
if grep -vw "$1" /proc/mounts &> /dev/null ; then
if ! mountpoint -q "$2" ; then
mount -t "$1" "$1" "$2" -o "$3"
return
fi
fi
return 0
do_umount() {
if mountpoint -q "$1" ; then
umount "$1"
fi
return 0
get_pid() {
pidof -o %PPID "$1"
case "$1" in
start)
rc=0
if [ "$NEED_STATD" = yes ]; then
stat_busy "Starting $STATD_DAEMON_NAME daemon"
PID=$(get_pid $STATD)
if [ -z "$PID" ]; then
[ -f /var/run/$STATD_DAEMON_NAME.pid ] && rm -f /var/run/$STATD_DAEMON_NAME.pid
# RUN
$STATD $STATD_OPTS
rc=$(($rc+$?))
if [ $rc -gt 0 ]; then
stat_fail
exit $rc
else
echo $(get_pid $STATD) > /var/run/$STATD_DAEMON_NAME.pid
stat_done
fi
else
stat_fail
exit 1
fi
fi
if [ "$NEED_IDMAPD" = yes ] || [ "$NEED_GSSD" = yes ]; then
do_modprobe sunrpc
do_modprobe nfs
do_mount rpc_pipefs "$PIPEFS_MOUNTPOINT" "$PIPEFS_MOUNTOPTS"
rc=$(($rc+$?))
if [ $rc -gt 0 ]; then
stat_fail
exit $rc
fi
if [ "$NEED_IDMAPD" = yes ]; then
stat_busy "Starting $IDMAPD_DAEMON_NAME daemon"
PID=$(get_pid $IDMAPD)
if [ -z "$PID" ]; then
[ -f /var/run/$IDMAPD_DAEMON_NAME.pid ] && rm -f /var/run/$IDMAPD_DAEMON_NAME.pid
# RUN
$IDMAPD $IDMAPD_OPTS
rc=$(($rc+$?))
if [ $rc -gt 0 ]; then
stat_fail
exit $rc
else
echo $(get_pid $IDMAPD) > /var/run/$IDMAPD_DAEMON_NAME.pid
stat_done
fi
else
stat_fail
exit 1
fi
fi
if [ "$NEED_GSSD" = yes ]; then
do_modprobe rpcsec_gss_krb5
stat_busy "Starting $GSSD_DAEMON_NAME daemon"
PID=$(get_pid $GSSD)
if [ -z "$PID" ]; then
[ -f /var/run/$GSSD_DAEMON_NAME.pid ] && rm -f /var/run/$GSSD_DAEMON_NAME.pid
# RUN
$GSSD $GSSD_OPTS
rc=$(($rc+$?))
if [ $rc -gt 0 ]; then
stat_fail
exit $rc
else
echo $(get_pid $GSSD) > /var/run/$GSSD_DAEMON_NAME.pid
stat_done
fi
else
stat_fail
exit 1
fi
fi
fi
add_daemon $daemon_name
stop)
rc=0
if [ "$NEED_IDMAPD" = yes ] || [ "$NEED_GSSD" = yes ]; then
if [ "$NEED_GSSD" = yes ]; then
stat_busy "Stopping $GSSD_DAEMON_NAME daemon"
PID=$(get_pid $GSSD)
# KILL
[ ! -z "$PID" ] && kill $PID &> /dev/null
rc=$(($rc+$?))
if [ $rc -gt 0 ]; then
stat_fail
exit $rc
else
rm -f /var/run/$GSSD_DAEMON_NAME.pid &> /dev/null
stat_done
fi
fi
if [ "$NEED_IDMAPD" = yes ]; then
stat_busy "Stopping $IDMAPD_DAEMON_NAME daemon"
PID=$(get_pid $IDMAPD)
# KILL
[ ! -z "$PID" ] && kill $PID &> /dev/null
rc=$(($rc+$?))
if [ $rc -gt 0 ]; then
stat_fail
exit $rc
else
rm -f /var/run/$IDMAPD_DAEMON_NAME.pid &> /dev/null
stat_done
fi
fi
do_umount "$PIPEFS_MOUNTPOINT" 2>/dev/null || true
fi
if [ "$NEED_STATD" = yes ]; then
stat_busy "Stopping $STATD_DAEMON_NAME daemon"
PID=$(get_pid $STATD)
# KILL
[ ! -z "$PID" ] && kill $PID &> /dev/null
rc=$(($rc+$?))
if [ $rc -gt 0 ]; then
stat_fail
exit $rc
else
rm -f /var/run/$STATD_DAEMON_NAME.pid &> /dev/null
stat_done
fi
fi
rm_daemon $daemon_name
status)
stat_busy "$daemon_name running"
if ck_daemon $daemon_name; then
stat_fail
else
stat_done
fi
if [ "$NEED_STATD" = yes ]; then
stat_busy "Daemon $STATD_DAEMON_NAME running"
PID=$(get_pid $STATD)
if [ -z "$PID" ]; then
stat_fail
else
stat_done
fi
fi
if [ "$NEED_GSSD" = yes ]; then
stat_busy "Daemon $GSSD_DAEMON_NAME running"
PID=$(get_pid $GSSD)
if [ -z "$PID" ]; then
stat_fail
else
stat_done
fi
fi
if [ "$NEED_IDMAPD" = yes ]; then
stat_busy "Daemon $IDMAPD_DAEMON_NAME running"
PID=$(get_pid $IDMAPD)
if [ -z "$PID" ]; then
stat_fail
else
stat_done
fi
fi
echo
restart)
$0 stop
sleep 3
$0 start
echo "usage: $0 {start|stop|status|restart}"
esac
exit 0
Maybe you are looking for
-
idvd ejects the disk during the "multiplexing and burning" / "writing lead-in" portion. When I check, there's nothing on the disk.
-
I am currently using windows 8.1 and also have a norton antiviurs software installed.
-
What is the meaning of the status value in resulted table via power shell command?
Hello, I have queries about result given by powershell command: Get-WmiObject -Class Win32_Processor results Status code as OK - What does it mean ? what are other status code options ? Get-WmiObject -Class Win32_ComputerSystem results Status code a
-
Every time I open Safari 5 in Windows 7 Professional I have to Zoom in twice to get a suitable display size on my google.com homepage. Even adjusting the two font sizes in Preferences/Appearance has no apparent effect. Also, what's the simplest way t
-
Hi Could someone tell me what is the difference between TAXINJ and TAXINN? What should I use and what are the configuration steps? Thanks