You are not logged in.
Okay so I wanted to make a PKGBUILD for the Family Search Indexing program--the actual program is written in Java, but FamilySearch.org made a install script for us Linux folks, which I thought was awfully nice of them; but I'm not sure how to create a PKGBUILD for such a program since the usual
build() {
cd "${srcdir}/${pkgname}-${pkgver}"
make
}
isn't going to work since this is a Unix Shell script that needs to run and not regular source code. In addition, by default the script installs the Indexing program to your $HOME directory. I thought about just doing some like this
build() {
cd ${srcdir}/${pkgname}-${pkgver}"
sh <programname.sh>
}
but I'm not sure if that is too unorthodox or if there already is method for building Unix Shell based programs or something along those lines. Any suggestions? (I've searched google, the wiki, the forum, and the AUR--though I can never seem to find packages that deal with shell scripts, even though I know that there are some out there, when I search the AUR--extensively, so I'd really appreciate some pointers.)
Offline
Firstly, Arch packages can't touch your $HOME - a definite no-no.
Next, this may be of use to you.
Most important, though, would be to read through the install script in detail, making sure you understand what it's putting where, and whether you can pass alternative install locations to it. Running it in its default state, as you have suggested above, obviously isn't going to work.
Offline
Firstly, Arch packages can't touch your $HOME - a definite no-no.
Next, this may be of use to you.
Most important, though, would be to read through the install script in detail, making sure you understand what it's putting where, and whether you can pass alternative install locations to it. Running it in its default state, as you have suggested above, obviously isn't going to work.
Why can't they, though? Is it bad form, or just a bad idea? Is there an article that I could read about it? I'll google it, I guess.
And what about shell scripts in general? Like what if I wrote a really totally awesome script and wanted to share it with the whole Arch Linux community? (Not saying that I do have a script like that or that I could produce one, just a general 'what if' kind of thing)
Last edited by lspci (2012-09-09 17:48:05)
Offline
Sakura:-
Mobo: MSI MAG X570S TORPEDO MAX // Processor: AMD Ryzen 9 5950X @4.9GHz // GFX: AMD Radeon RX 5700 XT // RAM: 32GB (4x 8GB) Corsair DDR4 (@ 3000MHz) // Storage: 1x 3TB HDD, 6x 1TB SSD, 2x 120GB SSD, 1x 275GB M2 SSD
Making lemonade from lemons since 2015.
Offline
If you decided your awesome script deserved to be packaged, just write a PKGBUILD that installs it in /usr/bin.
Offline
Couldn't you just change line 15 of the script to change the db_home variable to something more suitable that $HOME? Perhaps /opt/local/whatever-the-appname-is/ would be good, or /usr/share/appname/
"UNIX is simple and coherent..." - Dennis Ritchie, "GNU's Not UNIX" - Richard Stallman
Offline
Couldn't you just change line 15 of the script to change the db_home variable to something more suitable that $HOME? Perhaps /opt/local/whatever-the-appname-is/ would be good, or /usr/share/appname/
That's what I plan on doing. Except when I tried that it gave me some kind of error saying that some file had been corrupted. But I think that may have to do with Java and not with the actual script.
Offline
when I tried that it gave me some kind of error saying that some file had been corrupted. But I think that may have to do with Java and not with the actual script.
You'll have to make sure the change leaves the script at the exact same length (bytes, not lines). Remove some blank lines, or add a blank/comment line to adjust as necessary.
Alternately, check the length of the file (in bytes) before your edit, then after your edit and adjust the byte offset listed on line 482.
Or - as yet another alternative - temporarily reset the "$HOME" environment variable from the pkgbuild, then run the script as is.
Last edited by Trilby (2012-09-10 11:48:02)
"UNIX is simple and coherent..." - Dennis Ritchie, "GNU's Not UNIX" - Richard Stallman
Offline
lspci wrote:when I tried that it gave me some kind of error saying that some file had been corrupted. But I think that may have to do with Java and not with the actual script.
You'll have to make sure the change leaves the script at the exact same length (bytes, not lines). Remove some blank lines, or add a blank/comment line to adjust as necessary.
Alternately, check the length of the file (in bytes) before your edit, then after your edit and adjust the byte offset listed on line 482.
Or - as yet another alternative - temporarily reset the "$HOME" environment variable from the pkgbuild, then run the script as is.
Okay, so here's a small script that should move all of the stuff created in the $HOME directory by the setup script from $HOME to /opt/familysearch/indexing/
Take a look at it and let me know if it looks good enough or if I ought to change anything; I have a feeling that I'll need to write an uninstall script as well, but I'm not really sure.
$ cat correct-install.sh
if [[ $UID -eq 0 ]] ; then
printf "\e[1;31mSorry:\e[0m Should not be run as root, all necessary root-like actions will be handled by sudo.\n";
exit;
else
sudo install -dm775 /home/$USER/.FamilySearchIndexing /opt/familysearch/indexing/;
rm -R /home/$USER/.FamilySearchIndexing;
cd /opt/familysearch/indexing/;
cd .FamilySearchIndexing;
cd indexing.familysearch.org;
cp -R * /opt/familysearch/indexing/;
rm -R /opt/familysearch/indexing/.FamilySearchIndexing;
printf "\n\e[1;32mDone!\e[0m\n";
fi
Offline
Ehmm... OK, but that's only of use if everything gets installed in $HOME in the first place. Have you given up on packaging it correctly?
Offline
Ehmm... OK, but that's only of use if everything gets installed in $HOME in the first place. Have you given up on packaging it correctly?
The shell script provided by new.familysearch.org installs everything to the $HOME directory, so this moves all of that to the /opt directory. Do you mean following the Java packaging guidelines, or other guidelines?
PKGBUILD
# Maintainer: lspci <agm2819[a t] g m a i l [ d o t ]c o m>
pkgname=familysearch-indexing
pkgver=3.14.0
pkgrel=1
pkgdesc="FamilySearch's indexing program used to extract data from digitized vital records for genealogical research."
arch=('i686' 'x86_64')
url="https://familysearch.org/volunteer/indexing"
license=('')
groups=()
depends=('java-environment>=6')
makedepends=('sh')
optdepends=()
provides=()
conflicts=()
replaces=()
backup=()
options=()
install=familysearch.install
#changelog=
source=("https://sites.google.com/site/aarchived/s/")
familysearch.install
post_install() {
printf "\e[1;31mNote:\e[0mTo finish the installation process please run '/opt/familysearch/correct-installation.sh\n"
}
post_upgrade() {
printf "\e[1;31mNote:\e[0mTo finish the installation process please run '/opt/familysearch/correct-installation.sh\n"
}
Offline
So basically, you're ignoring the whole "packages should never touch $HOME" thing, installing it in $HOME, then telling the user to rip it out again, and stick it in /opt using your script....
Well, whatever makes you happy I'm sure I don't need to say this, but you won't do anything silly like submit this to the AUR.. right?
Finally, that's only half a PKGBUILD there - you won't get far without at least a package() function.
Offline
I guess my three options were just ignored in favor of doing something more involved and less appropriate. Sometimes I wonder why I bother.
"UNIX is simple and coherent..." - Dennis Ritchie, "GNU's Not UNIX" - Richard Stallman
Offline
For the PKGBUILD to work correctly it would have to "install" to $pkgdir, not $HOME. Your PKGBUILD will result in an empty package as the script will install the files outside of the build directory. Please see man PKGBUILD and the various wiki articles.
aur S & M :: forum rules :: Community Ethos
Resources for Women, POC, LGBT*, and allies
Offline
I guess my three options were just ignored in favor of doing something more involved and less appropriate. Sometimes I wonder why I bother.
Sorry, I'm super new to PKGBUILDs; I'll take another look at your suggestions Trilby.
For the PKGBUILD to work correctly it would have to "install" to $pkgdir, not $HOME. Your PKGBUILD will result in an empty package as the script will install the files outside of the build directory. Please see man PKGBUILD and the various wiki articles.
Okay, uhh.. once again with the new to this thing, and I'll take a look at that.
So basically, you're ignoring the whole "packages should never touch $HOME" thing, installing it in $HOME, then telling the user to rip it out again, and stick it in /opt using your script....
Well, whatever makes you happy I'm sure I don't need to say this, but you won't do anything silly like submit this to the AUR.. right?
Finally, that's only half a PKGBUILD there - you won't get far without at least a package() function.
Uh... k. I'll try to get it to work... I guess, I dunno. Brain functions aren't present at the moment so I'll take a look at this post again later on.
Offline