Keygen 4 Ways to Text - wikiHow Life
How to Not Get Caught Looking at Porn: 11 Steps (with. Now it is very easy to do work with it. The one click operations makes it very good and fast. Numbers; Shapes; Consonants; Vowels; CURRICULUM; US Common Core; UK Primary; Canada Elementary; Australian F10; South African Primary. APA Style 6th Edition Blog: Numbers and metrication get more info.
Activity code conducting Health Services Research
Makeup artist, 30, shares her top 10 unique beauty tips Daily Mail Trump's defender: Pence's campaign role grows at key moment Associated Press. Another way to randomize your PIN is to add numbers to a number that you know well. By looking at your personality traits which are most unusual we are able to describe how others view and interact with you. We have the largest library of content with over 20, 000 movies and television shows, the best streaming technology, and a personalization engine to recommend the best content for you.
250 UNIQUE RAPID or QUICK FIRE QUESTIONS - JOIN ME ON MY
All of these actions only require one or two taps of the screen to completely transform your snaps, making it easy for even the novice to use.
How to Read 12 Digit UPC Barcodes: 12 Steps (with Pictures)
Ultimate Soccer Quiz. Pick the category to which the first part of the clue belongs, but not the second. Human leukocyte antigens (HLA) are specialized proteins present on the surface of all cells in the body except red blood cells. Much older than any modern civilization.
TabTight - VPN Free Cloud File Manager
But generally, the best way is to use keywords with 2-4 words. Windows 10 Tip: How to set up Windows Hello on your PC. Migrating Eagle Racks up Huge Cell Phone Bill for Researchers. The only way to adjust pitch is to vary this clock.
Serial number concordance of Specific Human Papillomavirus Types in Sex
Once issued, your Ten Key Certification can be verified by others online (click here for an example). Using the raised bump on the 5 key as a guide, see if you can correctly place your fingers on the + keys without looking at the keyboard. Welcome to Learn 10 [HOST], the best place to practice your ten key typing skills. Numbers Numbers 1 - 10 Numbers 11 - 20 Numbers 20, 30, 40, 50.
|1||5 Ways to Create Secret Codes and Ciphers||62%|
|2||30 Empathy Statements & Phrases that Show Customers You Care||63%|
|3||The Official Planning Guide for COVID-19 Weddings||86%|
|4||PC Games, Wikis, Cheats, Walkthroughs, News, Reviews ...||32%|
|5||10+ Flash Card Templates - DOC, PDF, PSD, EPS||15%|
43 Sexting Emoji - Definitions Of Emoji For Sexy Conversations
The Riso-Hudson Enneagram Type Indicator Free RHETI Sampler find more info. How to Write a Paragraph: 10 Steps (with Pictures). Chapter 3. Assessing Community Needs and Resources. Twitter has been one of our key communication, information and marketing channels since the beginning of sisterMAG.
The political power couples who rule Westminster
Anyone can develop their average 10 key. The Sims 3 Cheat Codes and Secrets for PC and Mac https://av-dis.ru/download/?file=1050. History, Production Stats & Facts, Engine Specs, VIN Numbers, Colors & Options, Performance & Much More, we cover it all. Hide PIN entry: When you enter your PIN at an ATM or cash register, cover the keypad with your free hand so that nobody can see what you're typing in. Thieves can install hidden cameras on ATMs and other devices (like gas pumps) for recording PINs.
Patch brainly.in - For students. By students
Make Your Own game - Game Maker more hints. Study all the descriptions in each group of four; Select the one description that you consider most like you Study the remaining three choices in the same group. Tubi is the leading free, premium, on demand video streaming app. 10 key typing test numbers only couples.
[Analysis] A PvP Guide on What To Actually CATCH for Catch Cup
Howdy, travelers. Today I am trying something very different: trying to project what Catch Cup may end up looking like. Obviously fully covering such a diverse format is basically an impossible task, and to be perfectly honest, I had no intention even trying when the format was announced. But I'm in a rare lull between Silph Arena and GBL formats, and my writing hands don't like being idle for too long, so here we are!
This is not going to be like any of my regular articles. There is just SO much out there that you may encounter that posting a bunch of simulations and throwing numbers at you would be mostly a waste of time. So instead, I am going to guesstimate as best I can some of the things that players have likely encountered since the start of this GBL season and may use to cobble together Catch Cup teams. And hopefully inform you of some things to watch out for most as you wade through all those varied spawns and hatches and such. And as always, I will try to highlight the "thrifty" options so you can compete without having to break the bank; the vast majority of this article will be things with the cheapest possible second move unlocks (or don't need a second move at all!).
Some caveats up front:
- I have tried very hard to weed out things that should be impossible to acquire since the start of GBL Season 5. This includes most all Legendaries/Mythicals and things which seem to spawn only during certain events (like Cofagrius and Delibird and such). Some things which are extremely rare spawns/hatches I may leave in, but obviously not everything below is a common spawn!
- I am going to try to emphasize things that ARE commonly acquired during this period of time. Things like Seedot and Oddish and Hoothoot and Zigzagoon and many others are all over the place, and this week you have the event going on with its special spawns.
- I am also going to leave out anything with Legacy/Community Day moves (that can only be Elite TMed) since the start of the season. Not to say you won't see any, or that YOU won't be using any, but I am going to assume the vast majority of players are not burning Elites on a one-week format.
- I plan to skip many well-established top tier Great League options (though not all). Yes, there are people out there that will invest in a brand new Azumarill or Stunfisk or the like, but at this point you don't really need me telling you they're good, do you?
10,000 Dust/25 Candy (to unlock second move)IVYSAUR
Vine Whip | Power Whip & Sludge Bomb
Here is your Frenzy Plant Venusaur replacement. Power Whip is obviously no Frenzy Plant, but it's still a fine move, and Ivysaur carries Venusaur's other potent moves as well. It's not QUITE as good as Venusaur, but it's close and performs the same role without having to dip into the Elite TM reserves. Bulbasaur was all over the place during the Animation Week event that ran into the first few days of GBL Season 5, so check and see if you have a good one.
Fire Spin | Dragon Claw & Overheat
I've written this about Zard several times before, but as a refresher: Overheat can perform right on the same level as Legacy Blast Burn, if not even better in spots. You DO have to play it a little differently, as Overheat comes with a significant self debuff to Attack and you don't want to just be throwing Overheats out there willy nilly. But it most certainly can still work.
Counter | Blaze Kick & Brave Bird/Overheat/Focus Blast
Obviously Blaze typically runs with Blast Burn (or Stone Edge in the era of Elite TMs), but it has a large suite of other moves that work well too. I mean, the three I have listed there (Brave Bird, Overheat, Focus Blast) all have very different coverage that can fit your team needs and put the opponent on their heels. Torchic is easily acquired during Sunny weather or as a GBL reward.
Razor Leaf | Body Slam & Energy Ball
Turtwig is a very common spawn, and all you need is one with a level in the high 20s to make yourself a super cheap and potent Razor Leafer. Body Slam is what really sets Grotle apart as a nice option.
Bullet Seed | Leaf Blade & Earthquake
A rarity among starters in that it's actually better without its Community Day move. Sceptile works best with Leaf Blade rather than Frenzy Plant, and beyond its blazing speed, its claim to fame is Earthquake, which ALSO comes much faster than you (or the opponent!) may expect.
Poison Jab | X-Scisssor & Sludge Bomb
While it's true that the Bee is best with Legacy Drill Run, it can still sting Grasses, Darks, Fairies, and Fighters just fine with currently available moves. Weedles are everywhere, and as tempting as it may be to ignore them, don't. A good Beedrill could end up a key part of your team.
Charm | Ice Beam and/or Play Rough
Hopefully you found some good ones during the Jigglypuff spotlight hour, because Wiggly remains the best Charmer in Great League. If that's your style of play, Wiggly is one you can build a team around. The same is true to a lesser degree with CLEFABLE and especially TOGEKISS acquired through the current research breakthrough encounter; they are certainly viable too, and you may see a lot of Togekiss in particular as some are just getting a Great League sized on for the first time now, but they're just not as good as Wiggly in Great League, frankly. And Togekiss is more expensive to build too!
Mud Shot | Surf & Earthquake/Sludge Bomb
No Hydro Cannon, no problem? Yes, Surf is a strictly inferior move, dealing 65 damage for 40 energy as compared to Cannon's 80 damage for the same cost. But that does NOT mean it's a bad move, because it very much isn't. Swampert still has play even without Cannon, and whether you plan to use one or not, you CAN surely expect to run into them, so plan accordingly.
Mud Shot | Mud Bomb & Blizzard
With this Mud Boy, there ARE no Legacy concerns. Whiscash will likely be even more common than Swampy, as it's half of one of the best-known cores in Great League PvP alongside Skarmory (more on that steely bird later). A right-sized Whiscash is leveled in the mid-to-upper 20s, and Barboach tend to be everywhere, so for once you can actually celebrate that fact by perhaps acquiring a key piece of your own Catch
Bubble | Icy Wind & Hydro Pump/Bubble Beam
No Empoleon with Hydro Cannon either, but if you enjoyed Seel in Little Cup, Prinplup plays similarly as a pure Water that deals good fast move damage and dishes out Icy Wind like Oprah dishes out prizes to her studio audience. It's better than you think.
RAICHU & ALOLAN RAICHU
Volt Switch | Thunder Punch & Wild Charge/Grass Knot
Pikachu (ones you can evolve, anyway) is not a terribly common spawn, but it's out there. Alolan Chu, however, is in raids and easy to acquire. Both are slightly underrated in open Great League, and both could have a lot of play in Catch Cup. Got a raid pass to burn? Go get a surfer dude Raichu!
Dragon Breath | Sky Attack & Dragon Pulse
The candy can be problematic, but finding a good Swablu to evolve usually is not. It's a very common spawn in Partly Cloudy and Windy weather, so depending on where you are, the area could be crawling with them. Altaria probably needs no introduction... it's well established in Great League already. So this is just a friendly reminder that--candy aside--it can extremely cheap to build a brand new one, perhaps one even better than the one you've been using to this point!
Wing Attack | Poison Fang & Shadow Ball
Zubat spawns are boosted during this week's event, so it should be easy to build a Golbat from the ground up. But should you? Well, it's a great killer of Grasses and Fighters and Fairies in particular, and a nice versatile threat with moves that can keep opponents on their toes. If you find a good one this week, take it for a test drive.
Wing Attack | Sky Attack & Psychic
Mr. Owl is a flying TANK. It feels squishier with a lot of Electrics, Ices, or Rocks around, but since those are usually less common spawns in general, Noctowl may have some room to really soar in this sort of format. Hoothoot is boosted right now, so finding a good one shouldn't be difficult if you're interested.
Shadow Claw | Grass Knot & Thunder
One of the best counters to the common Whiscash/Skarmory core and a nice versatile mon in general with far more bulk than its skinny frame would suggest. Linoone is cheap, flexible, and Zigzagoon is one of the most common spawns out there.
Snarl | Body Slam & Gunk Shot
Not much to say on this one, but Galarian Zigzagoon is still a GBL reward, no? And it's in 7k eggs right now too, so building the KISS fan version of Linoone is also easy to do if you're so inclined.
Counter | Night Slash & Gunk Shot
This is an even cheaper way to build up a G-Zigzagoon, as Obstagoon wants to be around Level 21 in Great League anyway, so you can build one from scratch from a hatch/GBL reward with barely any investment at all.
Smack Down | ...doesn't actually matter
I know Aron is common, but this is a PSA: don't. Aggron is just not good in PvP. You'll probably see a couple, but it just doesn't really work. It's a trap!
Smack Down/Fury Cutter | X-Scissor & Rock Slide
Has holes (keep far away from Fighters, Grounds, and others) but Crustle can put in serious work, as shown throughout Halloween Cup. Dwebble isn't a boosted spawn now but it is still pretty common in Partly Cloudy weather. It's a thought.
50,000 Dust/50 CandyWell I highlighted all the REALLY cheap builds already, but I'll list a few of particular note for this category and then to 75k and 100ks.
Powder Snow | Ice Punch & Bulldoze/Blizzard
A-Slash is currently tearing it up for some teams in Kanto Cup, and Alolan Sandshrew is one of the current event's boosted spawns. There has never been a better time to build one, as you can get use out of it in back-to-back GBL Cups if you want to, and it should continue to have relevance in future formats as well. Powder Snow into Ice Punch is just nasty, and while A-Shrew will never be called "tanky", it has a typing combination with a LOT of relevant resistances.
Powder Snow/Charm | Psyshock & Ice Beam/Blizzard
Not quite as good as A-Slash, but in raids right now, and can operate as a classic Ice or as a Charmer with a unique resistance set. Voted most likely to catch your opponent completely offguard... at least for a few moments.
Razor Leaf/Charm | Grass Knot & Moonblast/Hurricane
Yup, Cottonee is boosted during this event too, which is good because any Cottonee you built for Little Cup are likely about two levels too big to evolve to a sub-1500 Whimsie. Like A-Tails, it can take the opponent a few precious moments to figure out how to respond to it as they figured out what fast move it's running, as it has a much different profile when using Razor Leaf than when it's being used as a Charmer instead. It's not the greatest thing out there in either role, but it gets the job done and DOES have that element of (at least initial) surprise going for it.
OTHER RAZOR LEAFERS
Razor Leaf | Sludge Bomb & Leaf Blade/Moonblast
NO surprises here, but that doesn't mean it's easy to stop. With VICTREEBEL and VILEPLUME/GLOOM and others, you know exactly what you're going to get... [pain](). Their pre-evolutions are both out there and I THINK still in GO Rocket stops? Honestly it's hard to keep track anymore....
Bullet Seed | Stone Edge & Grass Knot
The Grass that can take down Flyers and Fires and Ices with a well-placed Stone Edge. Or should I call it the Rock that can blow away Waters? Either way, Lileep is a current event spawn, so you know what to do. Dilly dily!
Thunder Shock/Spark | Magnet Bomb & Discharge / Mirror Shot & Wild Charge
They play differently, but both fill a similar role as Electrics that tangle better than most with Dragons, Fairies, Grasses, and others thanks to the Steel subtyping. Magnemite is a boosted spawn during the current event.
75,000 Dust/75 CandyMoving right along, I am going to continue to focus on event spawns and current reward encounters....
Air Slash | Sky Attack
That's right, just one move. Because let's be honest... nobody wants to build a brand new Skarmory NOW, right after we all likely had a double moved one for Flying Cup. Who's excited to sink another 75,000+ dust into a new one just for this week? Thankfully, I don't think you have to. Just take a GBL reward one, level it up a few times, and just run it with Sky Attack. You lose very little by not double moving it... it was still one of the best Pokemon in PvP for well over a year before Brave Bird really became a thing. Even single moved, this is one of the very best things you can run out there in Great League play, and as I said, it's a relatively common GBL reward encounter. Go get one!
Lick | Body Slam & Superpower
Unfortunately, you DO need to second move here. I mean, you CAN get by with just Body Slam, I suppose, but Lax is really hampered without the threat of another move. Snorlax is not boosted now, but it was in the initial days of Season 5 with the second half of the Animation Week event. If you found a decent one then, it's one of the best things to deploy in Catch Cup. Short of a dedicated Fighting type, Lax can grapple with almost anything you'll encounter even in a wide open format like Catch Cup.
100,000 Dust/100 Candy
EDIT: The announcement for Catch Cup specifically said no Mythicals, which is likely to prevent players delaying their Mew or Jirachi research until now from getting unfair advantage more than it is to exclude Melmetal, but it seems a safe bet that Mel will be caught up in that and not allowed to be used. Sorry for the confusion (and my own memory!) and thanks to the players that reminded me.
I could go on and on about other things you can build up during this time: Fighters (Machamp from GO Rocket stops, Scrafty from GBL reward Scraggys, etc.), and relatively common spawns that are potent in Great League like Abomasnow (Snover), Dragonair and Dragonite (Dratini, which was boosted significantly during the Animation Week event), Scyther and Scizor (Scyther was also out in force during Animation Week), and of course, shiny Electivires and Magmortars and Slowbros that people want to show off (though they aren't all that great in GL). But I wanted to get this out there NOW, with as much time as possible before Catch Cup arrives, to help inform you on what to hunt for during this period of unusual spawns and rewards and raids, and what to hold on to from the tail end of Animation Week before you go clear them out of your bag! Sorry if this seems off the cuff, and it's certainly not a true deep dive "analysis" article like I usually try to get out there, but hopefully this proves just as helpful.
I'll leave it up to you HOW to assemble your team... it's YOUR team, after all! Build what you're comfortable with and try to have some fun with it. I WILL say that the SkarmCash core I mentioned is always a strong place to start--and a core you'll probably see on many opposing teams--but there are many, many ways you can go with your team. Good luck!
I know I always encourage feedback, but with this more than ever, PLEASE throw any other ideas you have into comments. I do this so all players can benefit, and I welcome a collective "group think" to get all our creative juices going. This list is just my off the cuff thoughts, and I'm just one guy. Let's discuss other options too and learn and prep together!
Until next time, you can always find me on Twitter for near-daily PvP analysis nuggets, or Patreon. And please, feel free to comment here with your own thoughts or questions and I'll try to get back to you!
Thank you for reading, and good hunting this week!
LazyLibrarian, Calibre, Calibre-Web, Booksonic Installation Guide v1.0
If you follow this, please read through the whole thing first. There are some things that should come in a certain order to make life easier. I've tried to call out options where they are available and give some reasoning behind my choices.
I do NOT have all of the answers. And my choices are not always correct for me, let alone for you.
Hopefully coming soon will be some short guides for things you'll encounter after the installation (why won't my audiobooks import, why aren't calibre entries being written, etc.) As well as an inevitable edit of this guide once all of the flaws and shortcomings have been located.
To get started, you need a Linux installation. I'm assuming a plain vanilla install of Debian that you've booted into once, updated packages, and rebooted if necessary. Not sure if it matters, but I'm running it in a VM. Currently giving the system 4GB of RAM, 4 processors, and 70 GB of space, NOT counting space for the library. The RAM only rarely comes into play. The processors almost never come into play. At some point, I'll dial them both down by half or more. The disc space looks kinda ridiculous. In retrospect, 20-30 is probably more than enough, but I'm still figuring our the room for metadata.
(For comparison, I have 28GB of eBooks at the moment, as well as 164 GB of audiobooks. (Note to self: look into that. Database reporting in LazyLibrarian says I only have 624 books and 263 audio. That amount of disk space seems a bit much. Difference between du and df is interesting.))
Information and items to have before you start (* is mandatory, O is optional):
- * -Location of helpers like SABNZB, qbittorrent, etc.
- * -Intended Directory layout. More on this later
- * -IP address and hostname of your library server (this should be statically set, or you may have issues later) (for this document, we are assuming 192.168.1.100 and hostname librarian)
- O -Bot accounts on your favorite IRC servers if you like.
- O -GoodReads account.
- O -Kindle email to device address
Distribution ChoiceI prefer Debian based distros due to simplicity. Usually I go for Ubuntu (because everyone does, it makes it trivial to specific directions). For my library, I went with vanilla Debian. There are some changes in how Ubuntu handles certificates that aren't well documented and that I didn't feel like figuring out. This guide will be based on Debian Buster.
I haven't gotten around yet to playing with Docker. Sometime in the next year, I hope to do that. If you need Docker help, gotta ask someone besides me. This is a guide to putting a library on (virtual) metal.
Required additional packages
- git (For installing/updating.)
- xvfb (Required to do a few things with calibre. Most importantly, this is required if you didn't install a gui on your system)
- python3-pip (Not every python package is prepackaged.)
- libnss, python3-openssl, python3-oauth (Agh, lost my notes as to why we need this.)
- openssh-server (unless you are logging in locally or solely through VNC, which I don't recommend.)
- cifs-utils (if you are using a Samba/SMB share. No, it's not recommended, we're doing it anyway.)
- imagemagick, ghostscript, python3-pythonmagick, python3-wand (for generating covers and the like)
- rename (helps manipulate filenames, because ebook and audiobook naming is awful)
- id3v2 and id3tool (helps manipulate id3 tags because ebook and audiobook tagging is awful. Supposedly id3 v1 is sufficient, but you really need the v2 tool. If you are a super miser on space, skip id3tool)
- unzip (another file/metadata helper)
apt install git xvfb python3-pip libnss python3-openssl python3-oauth openssh-server cifs-utils imagemagick rename id3v2 id3tool unzip ffmpeg
You need to set up a user just to run the services. On this setup and for this guide, our user is 'librarian'. I shouldn't have, but did set it up as a normal user, but with a couple of adjustments.
adduser librarian --system --group
Your screen should give you something like this:
Adding system user `librarian' (UID 109) ... Adding new group `librarian' (GID 116) ... Adding new user `librarian' (UID 109) with group `librarian' ...Take note of the UID and GID numbers. We'll come back to that later.
Directory setupYou will need several directories to exist before you begin the installations.
/home/librarian should already exist. If not, make sure you have a 'librarian' user and group. Then create the directory and assign ownership to your librarian user:
chown -R librarian:librarian /home/librarian
If you don't have the usegroup, try creating them again.
Most of the server stuff I want in /srv. If it doesn't exist, /opt is another choice. And back in the day, /uslocal did the trick. This guide uses /srv.
Almost all of my data lies on network mounts. In my case, I use samba/SMB. Unfortunately, calibre does not deal with this very well due to samba/SMB not handling file locks well. So far it's mostly ok if you follow my steps and mounting options. The 'not mostly' part is that every so often you may need to reboot the system.
Filesystems are automounted. You'll have to edit your /etc/fstab file. This is a typical line for my mounts:
//fileserveebooks /mnt/ebooks cifs uid=109,gid=116,credentials=/root/creds,vers=2.1,auto,x-systemd.automount,_netdev,mfsymlinks,nobrl 0 0Fileserver is the smb name for the fileserver where the data resides.
/ebooks is the name of the share.
/mnt/ebooks is the location that our librarian system goes to in order to find those files.
cifs merely specifies the kind of fileshare we are using
uid and gid must match the numbers from your 'librarian' user and group. This will make that user and group own the mount and be able to do just about anything with the files.
credentials=/root/creds specifies the location of your smb username and password. You could put the info here, but this provides a little extra security. The /root/creds file should look like this:
Username=BigBadLibrarian Password=s00p3rsekr1+Or whatever your credentials are.
vers=2.1 may be unneccessary or may need changing depending on your client and server to get the compatibility right.
The next two sections make the mount happen automatically at startup, after the network comes up.
The last two sections "mfsymlinks,nobrl" are two options that minimize the locking problem earlier. It's not perfect, but it's the best that can be done.
What directories do you need?
- /mnt/ebooks/ebooks is where we will put our ebooks (naturally)
- /mnt/ebooks/audiobooks is for audiobooks
- /mnt/ebooks/comics is for comics (which are beyond the scope of this document)
- /mnt/downloads is where our torrent and nzb downloader will place completed downloads. I strongly suggest you place them all here. You can separate them if you wish, but at some point, it's not worth the extra effort of defining things out too finely.
- /mnt/manual_import is where we will place files that we want to bring in manually. Suppose you copy some files from your ereader or a thumb drive. You drop them into this folder. (In my case, the data is on the file server. I mount it as drive N: on my desktop and as /mnt/manual_import on my librarian. Drop it on the desktop, it appears on the server.)
- /home/librarian/logs is where we will keep our logs. This isn't the best location (should be /valog/librarian or similar) but this will do for now.
- /home/librarian/.config/calibre/ is where we will keep some configuration bits, including the user database.
Install calibre-serverLong story short: follow the directions here: https://calibre-ebook.com/download_linux
A stock install should have the correct tools and dependencies already installed.
Run this on the command line: "sudo -v && wget -nv -O- https://download.calibre-ebook.com/linux-installer.sh | sudo sh /dev/stdin"
This will fetch the calibre installer and run it, placing items in stock locations (/opt/calibre). This is perfectly acceptable.
Now we need a sample file to use to force calibre to create its database. This command will grab the freely available "Hearts of Darkness" from Project Gutenberg. Feel free to grab whatever you like:
sudo wget http://www.gutenberg.org/ebooks/219.epub.noimages -O heart.epub
Take note of where the file 'heart.pub' is located. I will assume it is in /mnt/manual_import. Whatever directory you choose, life is simpler if you have only one sample epub in there. Next, issue the following command:
sudo xvfb-run calibredb add /mnt/manual_import/* --library-path /mnt/ebooks/ebooks
Change the two directories that start with "/mnt" to your location of heart.epub that you just downloaded and the location where you want your calibre database.
Calibre will run just enough to create a database. The computer should take a few seconds and then come back with "Added book ids: 1". If you look in your library folder, there should be a folder labelled 'Joseph Conrad' (or the author of the book you downloaded) as well as a file named metadata.db.
So now we have our basic database. Some people are leaving us now, as that's a key sticking point. Next step is to verify that the server works. Enter the following command: "sudo calibre-server --port=8180 --enable-local-write /mnt/ebooks/ebooks" Then open up a browser and go to "http://192.168.1.100:8180". You should be able to 'browse' around a bit, seeing your massive one author and single book. That's enough. Go back to the screen where you last were at the command prompt, and press control-c to end the task.
We are going to have some logging in our install. Create the log file and set permissions with these commands: "sudo touch /home/librarian/logs/calibre.log && sudo chown -R librarian:librarian /home/librarian/logs/calibre.log"
We will have separate users for our install. It's not strictly necessary now, but might be down the road.
Create the user database and enter your first user by entering this: "sudo calibre-server --userdb /home/librarian/.config/calibre/server-users.sqlite --manage-users"
Create a library user. We assume username "librarian" and password "password" for this example. Don't type the quotation marks. In addition, give this user rights to all libraries in case you added another. Add another user if you like and provide credentials as well as what library you want that user to have access to.
Next we will need a service file to get calibre-server running at every boot. Using your favorite text editor, edit /etc/systemd/system/calibre-server.service.
Mine looks like this (lines that are comments start with an octothorpe '#'. You can leave them or delete the entire line):
[Unit] Description=calibre content server #this can be anything you want After=remote-fs.target #this prevents calibre from starting until after network shares are mounted. If you are storing everything locally, change remote to local [Service] Type=simple User=librarian Group=librarian #previous two lines should reflect the name of the user and group you set above ExecStart=/usbin/calibre-server \ #this should be your calibre executable. You can display it by typing "which calibre-server" at the command prompt. /mnt/ebooks/ebooks/ \ #your library location --enable-auth \ #if you set up authentication as we did. If you REALLY don't want it, delete previous line or comment it out --userdb="/home/librarian/.config/calibre/server-users.sqlite" \ #location of the database we set above --log="/home/librarian/logs/calibre.log" \ #location of the log file we set above --max-log-size=2 #maximum size of the log in megabytes Restart=on-failure #If it crashes or has certain problems, it will try to restart RestartSec=30 #Tunes restarting of the service [Install] WantedBy=multi-user.target #We only want this if we are running services. Not in a single user mode for system. Even if you are the only user, it has nothing to do with this line. Don't touch unless you know what you're doing.Reload your services configuration with "systemctl daemon-reload" and attempt to start the server with "systemctl start calibre-server"
Wait 10-30 seconds (it take a bit to get going) and investigate with "systemctl status calibre-server" or "ps ax | grep calibre" or both. The systemctl method is preferred. The beginning of roughly the third line of output should look like:
Active: active (running)Stop the service with "systemctl stop calibre-server". Check status. It should no longer say 'Running'. Start the service again. Wait a minute or two. At least as much time as it takes to type the next two commands. Check status. At the end of roughly the third line, there should be a time. It should display a time roughly equal to the last time you issued the command with start. A minute or two.
Now restart the service with "systemctl restart calibre-server" and after no more than about five seconds, issue the status command. The time at the end should be roughly five seconds. If it still says a minute or more, wait 10 seconds and try again. If it still shows an odd time, try the stop command, see if it stops, like it did before. Something isn't right.
And now to make it start on every boot, use the command "systemctl enable calibre-server". You can reboot, wait a minute or so, and then issue the status command to see if it started up ok. (I know there's an easier way than a reboot, but I rarely use it with VMs, so I'm not looking it up now.)
You can go read your copy of Hearts of Darkness (a solid book, btw), take a rest, or forge on.
Install calibre-web (optional but recommended)This is completely optional but oh so desireable. As good as what calibre does, the author is not as good at UX as he is at other things. The marketplace of ideas stepped in and provided us with calibre-web. It is simply a different front end to calibre. If you like the basic server, you can skip this section.
Download a copy of the software. Currently located at https://github.com/janeczku/calibre-web/archive/master.zip. easiest way is to change to the /srv/ directory and type "wget https://github.com/janeczku/calibre-web/archive/master.zip" and hit enter. Then 'unzip master.zip'. There is now a directory named "calibre-web-master". Change it to "calibre-web" with "mv calibre-web-master calibre-web". Then assign ownership of this folder to your librarian with "chown -R librarian:librarian calibre-web"
Change into that directory. At this point you can largely follow the instructions here, beginning at step 3: https://github.com/janeczku/calibre-web/wiki/How-To:Install-Calibre-web-(-Python3-)-in-Linux-Mint-20---Linux-Mint-19-in-Linux-Mint-20---Linux-Mint-19).
- 1Install requirements with "sudo python3 -m pip install --system --target vendor -r requirements.txt"
- Run calibre-web with "sudo -u librarian python3 /srv/calibre-web/cps.py"
- Leave it running and do not close the terminal.
- Go to "http://192.168.1.100:8083" in your browser. You login username is admin and password is admin123
At this point you can setup the startup script or you can keep setting up calibre-web. The startup script will be used even if you have to wipe this out and reinstall what you have so far. OTOH, you won't have to bother with the startup script if you decide you hate the interface and don't want it.
Walk through the setup wizard, filling in as much information as you can. If you collected the right information regarding paths and filenames you should have it all above.
A few suggestions:
- Assign at least one other admin user in case you forget the password after changing it from 'admin123'.
- Decide which software is going to take 'lead' for importing books, especially manual imports. I chose LazyLibrarian because it pings calibre which backfills calibre-web. The other options would require more manual intervention from time to time. Not to say that this is free of it. Oh no, the metadata is too bad for that to be possible.
- If you have a Kindle, set up email to Kindle. You'll need to look up the address on Amazon's site. You'll need an email sender. (I use Google, which will require you to setup an application password. Searching "gmail application specific password" should get you to directions for that.
Next we will need a service file to get calibre-web running at every boot. Using your favorite text editor, edit /etc/systemd/system/calibre-web.service.
Mine looks like this (lines that are comments start with an octothorpe '#'. You can leave them or delete the entire line):
[Unit] Description=Calibre-Web #any descriptive name you like After=remote-fs.target #this prevents calibre from starting until after network shares are mounted. If you are storing everything locally, change remote to local [Service] Type=simple User=librarian Group=librarian #previous two lines should reflect the name of the user and group you set above ExecStart=/usbin/python3 /srv/calibre-web/cps.py #determine the 'python' part by typing "which python3" at the command line. The cps.py part will be in the directory where everything is installed for calibre-web WorkingDirectory=/srv/calibre-web/ #can be changed to /home/librarian/calibre-web after creating the directory, but specifying this one makes installation and cleanup very tidy. [Install] WantedBy=multi-user.target #We only want this if we are running services. Not in a single user mode for system. Even if you are the only user, it has nothing to do with this line. Don't touch unless you know what you're doing.One other item of note. If you are keeping calibre-web, you should change your /etc/systemd/system/calibre-server.service file. The line saying "After" should be edited to read "After=calibre-web.service remote-fs.target" for network shares or "After=calibre-web.service local-fs.target" for local data. This makes sure that calibre-web starts firsts, calibre-server second. If it happens the other way around, calibre-web will not be able to access the database.
Reload your services configuration with "systemctl daemon-reload" and attempt to start the server with "systemctl start calibre-web"
Wait 10-30 seconds (it take a bit to get going) and investigate with "systemctl status calibre-web" or "ps ax | grep calibre-web" or both. The systemctl method is preferred. The beginning of roughly the third line of output should look like "Active: active (running)".
Stop the service with "systemctl stop calibre-web". Check status. It should no longer say 'Running'. Start the service again. Wait a minute or two. At least as much time as it takes to type the next two commands. Check status. At the end of roughly the third line, there should be a time. It should display a time roughly equal to the last time you issued the command with start. A minute or two.
Now restart the service with "systemctl restart calibre-web" and after no more than about five seconds, issue the status command. The time at the end should be roughly five seconds. If it still says a minute or more, wait 10 seconds and try again. If it still shows an odd time, try the stop command, see if it stops, like it did before. Something isn't right.
And now to make it start on every boot, use the command "systemctl enable calibre-web". You can reboot, wait a minute or so, and then issue the status command to see if it started up ok. (I know there's an easier way than a reboot, but I rarely use it with VMs, so I'm not looking it up now.)
Again, if you prefer the other interface, this one is optional. You can 'uninstall' it at this point by deleting /srv/calibre-web/ and going on about your life.
You can go read your copy of Hearts of Darkness (a solid book, btw), take a rest, or forge on.
Install lazylibrarianSwitch to /srv or wherever you want your installation executables and configs to go. Get the current source by entering the command: "git clone https://gitlab.com/LazyLibrarian/LazyLibrarian.git". This should create a directory named LazyLibrarian in the /srv directory. Start the program by running "python LazyLibrarian.py -d". If it crashes or provides errors, you probably are missing some required libraries. Double check the list above.
Cancel the program with control-c. Set ownership of the directory with "chown -R librarian:librarian /srv/LazyLibrarian". Start the program again, this time by running "sudo -u librarian python LazyLibrarian.py -d". Open a browser window and go to http://192.168.1.100:5299. Cancel the program with control-c. If you saw something, we need to make it start up automatically. If it didn't start or you have errors, now is the time to fix them.
We will need a service file to get lazylibrarian running at every boot. Using your favorite text editor, edit /etc/systemd/system/lazylibrarian.service.
Mine looks like this (lines that are comments start with an octothorpe '#'. You can leave them or delete the entire line):
[Unit] Description=LazyLibrarian After=network.target [Service] ExecStart=/usbin/python3 /srv/LazyLibrarian/LazyLibrarian.py Type=simple User=librarian Group=librarian Restart=on-failure [Install] WantedBy=multi-user.targetReload your services configuration with "systemctl daemon-reload" and attempt to start the server with "systemctl start lazylibrarian"
Wait 10-30 seconds (it take a bit to get going) and investigate with "systemctl status lazylibrarian" or "ps ax | grep lazylibrarian" or both. The systemctl method is preferred. The beginning of roughly the third line of output should look like "Active: active (running)".
Stop the service with "systemctl stop lazylibrarian". Check status. It should no longer say 'Running'. Start the service again. Wait a minute or two. At least as much time as it takes to type the next two commands. Check status. At the end of roughly the third line, there should be a time. It should display a time roughly equal to the last time you issued the command with start. A minute or two.
Now restart the service with "systemctl restart lazylibrarian" and after no more than about five seconds, issue the status command. The time at the end should be roughly five seconds. If it still says a minute or more, wait 10 seconds and try again. If it still shows an odd time, try the stop command, see if it stops, like it did before. Something isn't right.
And now to make it start on every boot, use the command "systemctl enable lazylibrarian". You can reboot, wait a minute or so, and then issue the status command to see if it started up ok. (I know there's an easier way than a reboot, but I rarely use it with VMs, so I'm not looking it up now.)
Now it's time to configure LazyLibrarian.
Between each tab and subtab on the setup, hit save. It's easy to get lost and forget what you've done, so save often. All that will happen is some errors will get thrown because we won't really have this configured enough to work until 75% done. Similarly, if there's a 'test' button near data you enter, try it. If it throws an error at this stage, it almost certainly won't work for real. Better to fix now than hunt bugs later.
Switch to the config tab in the browser. It's the one with the gear icon. The first subtab is interface. Server details should be blank. Under logs, enter a location for a log file. "/srv/LazyLibrarian/Logs" works well if not already selected. Screenlog should be 500, files set to 10. 99% of people use the bootstrap skin (madeup statistic, but most screenshots online use it.) In the bottom right, untick magazines and comics if you aren't using those features. I'll discuss only ebooks and audiobooks. Most of these settings are personal preference. Set the proxy if your system needs one to reach the internet.
The next subtab is 'Importing'. First column, 'Information Sources'. Easiest source is a GoodReads API key. Go to that site, set it up, and copy the key. (If you don't have one, go to this link https://www.goodreads.com/api/keys provide the required information only, and it will provide the key). Do not enable 'GoodReads Sync' at this time. It's going to require reading and planning. I don't use it because I don't care if GoodReads tracks what I've read. I do care about getting want lists out of GoodReads and we'll do that elsewhere.)
Next is file formats. For each of the three boxes, enter a comma separated list of the file formats you want for a given category. "epub, mobi, pdf" is good for ebooks. The converters and process is most mature. I haven't gotten anything else to work. Maybe some day. Audiobooks works with mp3. I'm trying m4b, but haven't completed my testing with my stack. For now, stick with mp3. Magazines I have no opinion on except that pdfs are common. All of the checkboxes below should be blank for now. After your testing and you are satsified, I suggest adding the checkmarks for the two blacklist options. It will cut down on reloading the same bad files over and over.
Finally, language. Set this for your country. I'm an American English speaker, so I use "en, eng, en-US, en-GB, Unknown". You may not want Unknown unless you are having trouble getting books that should be available in your selected languages. The date display options are personal preference. "$m-$d-$Y" would be typical American date nomenclature. "$Y-$m-$d" probably more popular among Europeans.
Next tab is Downloaders. In this, I'm using SABnzbd+ and qBitTorrent.
For SABnzbd+, setup is straightforward. Enter your SABnzbd+ host's location and port. Credentials for the SABnzbd+ server (not your Usenet provider) and the api key. The API key can be found by clicking the gear icon in SABnzbd+ and then the 'General' tab. Get the api key, not the NZB key. SABnzbd+ should be setup with categories. ebooks should have their own category with a particular location for completed downloads. I have this setup, and the category is 'ebooks' which you enter here. 'Delete from sabnzbd history' is the only ticked box in this column.
For qBitTorrent, setup is pretty similar. Enter your qBitTorrent host's location and port. Enter credentials if needed. Provide category name. The download directory is where the torrent client saves files, but as seen by the lazylibrarian host. If you followed along, this should be '/mnt/downloads'. 'Use Torrent Blackhole' is the only UNticked box in this column.
Providers is the next tab. The content will depend on where you are looking for ebooks.
Priority doesn't have to be set. Use it to favor some providers (they have higher quality books for example) and disfavor others. A provider with a higher score/rating will be used over a lower scored one if the search results are scored at the same value.
Newznab generally provides Usenet searches. Your provider can provide the URL and the key.
Torznab is a way to interface to various torrent search engines using Jackett. Setting that up is beyond the scope of this document. If you've set it up, you should know how to get the data that LazyLibrarian needs here.
RSS/Wishlist feeds are, honestly, an odd little beast. They perform two functions. One is to periodically update a list of torrents available from certain trackers. If you know you need this, enter the rss feed for the url here. Of more interest is the ability to use these as sources for wanted books. If the rss feed is from GoodReads, Amazon, New York Times or Listopia, it will grab that list of books, begin searching, and then download them. I use this for my GoodReads want sync. Find/create a bookshelf on GoodReads. Populate that shelf. Then click on the shelf to show the list. At the bottom of the page, there is a small link labelled 'RSS'. Copy that link. It will be something like: "https://www.goodreads.com/review/list_rss/ANIDENTIFIER?key=AWHOLEBUNCHOFSTUFFTHATCOULDBEUSEDTOIDENTIFYME&shelf=to-read" except the all caps parts will be some identifying code. Paste that link into the RSS URL field in LazyLibrarian. Now, shortly after you add an item to this list in GoodReads, LazyLibrarian will notice and look for the book.
Torrent providers are built in torrent searches. These aren't all always working and or available. Use as needed.
IRC is probably the easiest provider to configure. Most of the time. 'Name' is a simple description. 'Server' is the server hostname, such as 'irc.irchighway.net' or 'irc.undernet.org'. Channel is just that: the name of the channel, including the octothorpe, such as '#ebooks'. The botnick and botpass are fields for servers where you can reserve a bot name. You'll have to look at your irc server and see if this is the case. If so, register the name and password, and enter the credentials here. This isn't universally allowed.
At the bottom of the page is a button marked 'Blocked Providers' There probably are not any right now. As you use LazyLibrarian, if the software encounters issues with a provider, it uses the list here to throttle that connection. If you've fixed something that is paused/throttled/blocked, just come here, open the list, and turn it off. It automatically turns back on if needed.
Install booksonic (optional. Recommended for audiobooks)Booksonic is a fork of airsonic and runs under java. It serves audiobooks. If not interested, skip it. There are a couple of dependencies, a java runtime and ffmpeg. If installing from scratch, the following command will install them: 'apt install openjdk-8-jre ffmpeg'. There have been a few changes to the development of booksonic since inception. At the time of this writing, download links can be found at: https://booksonic.org/download.
Switch to /srv or wherever you want your installation executables and configs to go. Create a directory named 'booksonic'. Set ownership of the directory with "chown -R librarian:librarian /srv/booksonic". Change into that directory. Download the .war file from the link above. Do not get the 'legacy' link. At the time of this writing, the command to do that is "wget https://github.com/popeen/Booksonic-Aireleases/download/v2009.1.0/booksonic.war" You can quickly test your install by running " java -jar booksonic.war -Dserver.port=4040" and visiting "http://192.168.1.100:4040". If it crashes or provides errors, you probably are missing some required libraries. Double check the list above. If everything looks ok, cancel the program with control-c. delete everything in the /srv/booksonic direct except the .war file. If you accidentally deleted everything, just download a new copy.
Next we will need a service file to get calibre-web running at every boot. Using your favorite text editor, edit /etc/systemd/system/booksonic.service.
Mine looks like this (lines that are comments start with an octothorpe '#'. You can leave them or delete the entire line):
[Unit] Description=Booksonic service [Service] WorkingDirectory=/srv/booksonic ExecStart=/usbin/java -jar /srv/booksonic/booksonic.war #There are a multitude of options here for setting memory usage, ports, etc. Using #this, the url you will visit is http://192.168.1.100:8080. User=librarian Group=librarian Type=simple Restart=on-failure RestartSec=10 [Install] WantedBy=multi-user.targetReload your services configuration with "systemctl daemon-reload" and attempt to start the server with "systemctl start booksonic"
Wait 10-30 seconds (it take a bit to get going) and investigate with "systemctl status booksonic" or "ps ax | grep booksonic" or both. The systemctl method is preferred. The beginning of roughly the third line of output should look like "Active: active (running)".
Stop the service with "systemctl stop booksonic". Check status. It should no longer say 'Running'. Start the service again. Wait a minute or two. At least as much time as it takes to type the next two commands. Check status. At the end of roughly the third line, there should be a time. It should display a time roughly equal to the last time you issued the command with start. A minute or two.
Now restart the service with "systemctl restart booksonic" and after no more than about five seconds, issue the status command. The time at the end should be roughly five seconds. If it still says a minute or more, wait 10 seconds and try again. If it still shows an odd time, try the stop command, see if it stops, like it did before. Something isn't right.
And now to make it start on every boot, use the command "systemctl enable booksonic". You can reboot, wait a minute or so, and then issue the status command to see if it started up ok. (I know there's an easier way than a reboot, but I rarely use it with VMs, so I'm not looking it up now.)
ConclusionNow you should have a working install of calibre, calibre-web, lazylibrarian, and booksonic. Go into booksonic, add an author, and add a book. I've found searching for a book using ISBN is the fastest. When you add that book, if the net gods are smiling on you, your system will locate them, download them, and transfer them to calibre. If you chose an audiobook, the same thing should happen except that your book will be available in booksonic.
You will have to determine the legalities moralities of any of this for yourself and your country.
One problem you will encounter is horrible file naming and metadata. Everyone has their own idea about what cataloguing is best, and the files you download may not work well with the programs we've installed. Honestly, their authors have done fantastic work dealing with a very tricky problem. If you find value in this guide and there is interest, I will try to write some shorter guides about how to deal with metadata and other common problem areas encountered with this tool stack.