UpNote Vs Evernote

UpNote or Evernote? The Journey and Decision

This is a sequel to Will UpNote replace Evernote?

I don’t make new year resolutions, and if I did, I wouldn’t pick procrastination as something to work on because I know I would end up putting it off. Like this post, that would have been great to finish right when I thought of it and even better to push out with the flood of New Year’s resolution posts like how to get organized and reduce unnecessary spending, both of which UpNote has helped me with. So, here we go (and I guarantee I will also procrastinate editing before posting).

First off, rather than a big conclusion, that would be much shorter for you and much harder for me (one of my favorite quotes is “I would have written a shorter letter, but did not have the time.”), I am going to share my (mostly) raw notes that I posted on my original blog post as comments to track the journey.

And here is the TL;DR – I made the switch from Evernote to UpNote driven more by my annoyance with Evernote (specifically, Evernote under Bending Spoons) and less by being enamored with UpNote. But, while there are a few features I miss from Evernote, now that UpNote has become part of my daily (almost hourly) life, I do find that most of the user experience is happier (especially now that I have added many keyboard shortcuts to muscle memory), and the support is so incredibly superior as to be no comparison.

June 25, 2024 / 5:50 am

Since no one ever comments here, I feel free to do my addendums in the comments for now (until I break this up into a series?).

While the cheaper side of me really wanted to use a monthly subscription to try out the Evernote to UpNote migration and only commit to the lifetime after trying it out, the time management side of me won out because

“You can switch from a monthly subscription to a lifetime upgrade from the Premium screen (go to Settings ? Premium). The app will first ask you to cancel your existing subscription to avoid being charged twice, and then let you purchase a lifetime upgrade.”

(https://getupnote.com/support.html).

The migration is fairly easy, (though not so much if you want to experiment like I did).

I first imported with the option to turn tags into notebooks. The resulting layout was a flattened hierarchy, which means I have to recreate (and finally reorganize) my tag hierarchy.

I was curious if using tags instead of folders would be more suitable, so I deleted all of the notes to re-import again. This is when I discovered there is no mass delete for notebooks, only their contents. Well, I would use them again anyway, so I wasn’t too annoyed.

After re-importing with the tag-to-tag option, I realized that since I couldn’t bulk delete notebooks, this would leave me with the too-tedious-to-consider process of moving notes to notebooks individually (in Evernote, across 3 notebooks, I currently have ~3k notes).

I thought I would be clever and try re-importing the same notes with the tags-to-notebooks option with the hope that it would recognize that everything was a duplicate and just put them in notebooks. Alas, I just wound up with duplicates of every note, half with tags and half in notebooks.

UpNote, if you are reading this, you should offer an option to create both tags and notebooks (at the same time) when importing!

So, I deleted all the notes again and imported as notebooks. I do like the ability to create my own notebook covers (on Windows 3.1, I had icons on folders because that’s the kind of childish nerd I am). And I really like the ease of finding notebooks to link to notes. It reminds me of how easy Evernote was to use when it was a note organizing app and not an investment vehicle.

June 26, 2024 / 6:13 am

Continuing my transition description, I have only migrated my personal notebook from Evernote, leaving my work notebook for later. The work notebook has more notes (~1400 vs ~850), which partly informed the choice. Another difference is I use my phone more often for personal notes than work notes, so this gives me more opportunities to note how it works across devices. My initial observations is that search is much faster in UpNote, which can be attributed to the smaller amount of content. But the key thing for me is how Evernote change the home screen from what used to be notes with links to other features to a list of the other features where I have to first select notes (the only function I use!) and only then can I start using the app for its primary purpose. In UpNote it opens directly to the notes, and that changes in notebooks and tags do not change the sorted order of last updated (as some recent changes in Evernote do).

June 28, 2024 / 6:28 am

If the visual representation of your current tag hierarchies in Evernote are numerous, complex, and important to you, migration is going to be disappointing. Even if you select for the imported tags to be converted to notebooks and to import into a notebook, the result is that all of the notes are imported in a flat list in the selected notebook and all of the tags become notebooks at the root level without their prior hierarchy.

If I were in a rush to move, this would be a deal breaker for me. Fortunately, I have a little over 3 months for this migration, and the re-creation of my hierarchies and cross tags (notebooks in UpNote) is interesting, even fun at times…so far. A couple thousand notes to go, so we’ll see…

June 29, 2024 / 8:41 am

One features from Evernote that UpNote could benefit from is drag-n-drop for the notebooks. Yes, they are tags in Evernote, but since UpNote doesn’t have a tag hierarchy, UpNote Notebooks are feature parity to Evernote Tags. I do like being able to customize the notebook covers in UpNote (used to do that to folders on a Windows 3.1 desktop), but drag-n-drop is a much more practical feature, especially for those of use migrating. The click, select, select, click process is fine if one doesn’t organize much but gets really tedious with 100’s of folders to re-organize after migrating.

July 7, 2024 / 10:46 am

It took 3 weeks to finish re-organizing my personal notebook and a notebook from a former job in UpNote after importing them from Evernote. I used UpNote for all personal notes during that time as well.

To summarize my thoughts and experiences so far:

  • UpNote notebooks are the equivalent of tags in Evernote based on Evernote tag features, so if you use the tag hierarchy in Evernote have UpNote convert them to notebooks on import.
  • The ability to customize the covers of Notebooks is nice.
  • Many will want to use the colors provided or the pre-loaded images.
  • I created my own, which suits my own way of sorting and provides a great source of procrastination activity.
  • UpNote doesn’t have the feature clutter of Evernote.
  • No calendar and no events.
  • Tasks are integrated into notes (if the note has a checklist it is categorized as a task in UpNote).
  • It is great to be able to go straight to notes again instead of having to click through the cluttered Evernote UI.
  • UpNote doesn’t change the edited date when changing metadata (a recent bug in Evernote that is driving me nuts!)

In the negative column for UpNote:

  • No reminders.
  • No feature to email the contents of a note from within the app.
  • No drag-n-drop for nesting notebooks

However…

  • UpNote lifetime pricing: $39.99
  • Evernote annual pricing: $129.99
  • Monthly options: $1.99 vs $14.99

Click Cancel Evernote

I really will miss the reminders and being able to email notes to myself for follow up through my in-box, and I expect that UpNote will eventually add these features. And I am not looking forward to a month of re-sorting a decade of content when I bring my work notebook in. In fact, if Evernote had stuck to the $49.99 per year, I would have dealt with the mobile UX going down hill to keep the features and save the work. But Evernote went from supporting users to supporting investors, and Bending Spoons just wants users to bend over and pay even more for AI features that are available one window away for free, so I will not be renewing my subscription next year, ending almost 20 years of customer loyalty.

July 15, 2024 / 6:17 am

I still need to turn these comments into the Part of this post. Meanwhile, ran across an interesting read today that leads to the need for a note app, though for the use case given One Note would be sufficient: https://fev.al/posts/work-journal/?utm_source=tldrnewsletter

July 17, 2024 / 6:45 am

Forgot to mention: The idea of importing back into Evernote isn’t supported by either app. Reminds me of portal platforms back in the early 00’s when they were all proprietary to lock customers in, then later in that decade they all started using “open” standards, which resulted having proprietary formats that would fit in those standards. In this case, both will export to HTML or Markdown but the outputs drop all of the organization.

Crossing my fingers that UpNote gets the long ride Evernote has had.

July 20, 2024 / 9:17 am

I reviewed the FAQ page about security. For a non-technical person it can be very confusing. For a technical person it is still confusing. I truly don’t think this is intentional.

To summarize:
There are two key questions whose answers are relevant…
UpNote stores data on the Firebase server (which is a service provided by Google). The Firebase platform is certified to major privacy and security standards and fully supports the EU General Data Protection Regulation (GDPR) and the California Consumer Privacy Act (CCPA). Firebase encrypts your data in transit using HTTPS and encrypts your data at rest. You can learn more at https://firebase.google.com/support/privacy. We also take great care to ensure that your data is secure and only you can access it.

and
End-to-End Encryption (E2EE) is an advanced security method for encrypting and decrypting data and is designed to protect highly confidential information. Due to the complexity of implementation, UpNote currently has no plans to support E2EE. If you wish to store sensitive information such as passwords or credit card numbers, it is recommended that you use a password manager application specifically designed to encrypt sensitive information.

The gist of which is that the data is not encrypted on your devices. This is a bit of nit-picky difference but worthwhile to note that the weak link in the chain is how you manage security on your device. There is also the bit about UpNote developers being able to access your content. They are up front about that, and also up front about storing private data in secure manner, like a password manager.

July 28, 2024 / 10:08 am

In Evernote, tags exist as a flat hierarchy, with the nesting only being at a visual level. For example, if I have a tag Misc and then move it to be under Foo, I cannot create a tag under Bar named Misc. While UpNote also manages tag in a flat hierarchy, Notebooks are truly nested, so I can have a notebook named Misch under Foo and a different notebook under Bar also named Misc. I can then cross reference between notebooks using a tag such as #reference. This is much more how these things work in my head. Your mentalization may vary.

August 1, 2024 / 7:37 am

I love the Collapsible Section feature in UpNote. I often used Evernote for presentation notes. The first annoyance in Evernote was when they added wide margins, making it impossible to have both my notes and a presentation on my desktop at the same time. I would use a tablet or my phone to make up for this problem until I eventually got a 35″ monitor (not for that purpose, but a nice bonus point for the monitor upgrade).

Not only can I size the UpNote window to any width I want, I use the Collapsible Sections to make it easier to scroll through the content based on each slide. The keyboard shortcuts are nice touch, too.
UpNote Collapsible Sections with PowerPoint Presentation

August 24, 2024 / 10:50 am

Finally parting shot at Evernote: In preparation for closing my account I went to delete all of my notes. It would be useful if it gave some error message that the default notebook couldn’t be deleted. I eventually figured it out, created a new notebook, and set it as default. Still, 1000 notes wouldn’t delete when deleting the notebook. Finally I had to delete at the note level, which is limited to 100 at a time. Hey, Bending Spoons, it is all the friction to standard note management tasks that drove me away from 21 years of use. Making the final steps as difficult as possible helps to reinforce my decision.

Oh, and then when I actually cancelled the subscription I first had to confirm again (acceptable), then scroll through a huge list of features that I was losing (annoying but predictable), then give a reason from a list, but only ONE reason (ridiculous) and then was finally offered a discount of 40%, which if they had offered that in response to any of my complaints over the last two years I may have accepted, but having just spent two months migrating to UpNote, wasn’t going to happen.

Epilogue

UpNote has become a seamless part of my computing life. It took me so long to post this follow up to the original article partly because I am more productive with UpNote, and partly because it is so smooth to use that I don’t really think about it…except on those rare occasions when there is an issue with an update, the last of which inspired me to finally write this post because of the quick turn-around for the fix as a new update, without any of the “do [some really annoying work around] until we can get to the issue”, which is pretty much the response I get from most vendors, and extra annoying because I include the work around in my support request.

Oh, and after you get your own license, be sure to follow the great user community at https://www.reddit.com/r/UpNote_App/.

Facebooktwitterredditlinkedinmail
© Scott S. Nelson

Will UpNote replace Evernote?

(Post written in UpNote and feature image generated with Freepik)
I used Evernote free version for over a decade. I finally went to the paid version when I needed it on more than the supported free devices at the time. Later, the number of devices I needed it on went down and I dropped free. Shortly after that, they lowered the number of devices for free and I was forced to go back to premium. Then the price doubled. Then Bending Spoons acquired it and it doubled again. I started looking for an alternative after the first doubling, but wasn’t finding anything that worked for me. I looked even harder after the second doubling, and Obsidian was as close as I could get, but not quite what I want, and the premium version ain’t cheap. But still cheaper than BS (appropriate acronym for them given what they have done to Evernote) and I have had looking into an Obsidian migration in my Evernote To Do list (a feature that was part of the app even before there was a cloud edition). I recently read a good discussion of UpNote on Medium (Don’t Use Obsidian) that prompted me to try it again (I’m 90% positive I looked at it after the BS price hike) . It is very much like Evernote was when it first moved to the cloud.
So far, here are my comparisons:
  • Tags are case sensitive in UpNote.
  • Still will miss nesting them as in Evernote.
  • No reminders in UpNote, but that was a feature I rarely used in Evernote.
  • UpNote only pins notes, not tags.
    • But, Evernote is erratic about that feature, sometimes with sub tags and sometimes not
  • I do like how I can make notes narrow again in UpNote.
  • Evernote reduces the paragraphs spacing in lists, where UpNote provides fine-grained paragraph spacing but doesn’t differentiate with lists.
And here is what I intend to try:
  • Try exporting Evernote into this and then back to Evernote in case UpNote goes under.
If the above works well, I will probably switch. Unfortunately, I have to subscribe to do that. I can see where a monthly subscription to try and then a switch to lifetime might be worth it.
Facebooktwitterredditlinkedinmail
© Scott S. Nelson
Different Browsers for Different Profiles

Chrome Extensions on Edge

In a musing mood this morning, so tldr;

… so I took the 18 seconds to go research and found that all you gotta do is go to the chrome web store and installed it from there. [imagine forehead slap here].

As both a consultant and tech enthusiast, I have multiple profiles that would clash in a single browser. One solution to profile proliferation is using multiple browser, each dedicated the a particular profile (especially useful for profiles based on Microsoft authentication). All of the chrome-based browsers have made this easier as they function generally the same, making it seamless to switch back and forth with the style reminding which context I am in.

A key feature for any browser is tabs, and one behavior I have grown used to is that opening a new tab should switch to that tab immediately. Other than sketchy tracking pages and lazy session tracking I expect the reason for a tab to open is to view the contents. Doubly so when I purposely open to a new tab. To this end, I always install Tabs to the Front. When I started using Edge (v2, once they switched to being chrome-based and worked on the worst of the kinks) the chrome store is where it took you for extensions. At some point, it switched, and removed my extensions. Some I could find in the Edge Add-ons, but many were not there. This became extra annoying to me today when I was setting up a new laptop, so I took the 18 seconds to go research and found that all you gotta do is go to the chrome web store and installed it from there. [imagine forehead slap here].

 

Facebooktwitterredditlinkedinmail
© Scott S. Nelson

Create a Reusable Informatica Cloud Secure Agent Dev Image

I am going to start this article with a confession. As a system integration and automation consultant I am continuously shifting from one product, language and platform to another. The frequent changes strengthen the short-term memory and change the long-term memory to manage concepts more than details. A complex set of steps, processes or systems commands that can be performed without having to refer to Google, Evernote, or vendor documentation today can often fade to nothing more than a clear memory of having done them without recall of the specifics within a few months. Sometimes in mere weeks (or even days) depending on how different the next project is.  So the main reason I write these detailed articles is so that I can repeat a process if ever needed again.  Being able to share these mental breadcrumbs is just a bonus.

Lately I have been working a great deal with Informatica Cloud, an excellent iPaaS solution. Informatica Cloud uses an on-premises application called a Secure Agent to facilitate secure interactions between internal systems and the Cloud. During training and development it is useful to have a Secure Agent running on a developer’s laptop. While the Secure Agent will install on the operating systems of most laptops, it runs better in an environment that is configured to support server operations rather than day-to-day work. There is also a simple way to switch the Informatica Cloud instance (known as an Org), though it can be a hassle for a developer or consultant that needs to interact with multiple Orgs. To make life easier in such circumstances, I have taken a baseline VirtualBox image and added some applications and scripts so that the image can be quickly configured for any Org I have access to. Following are the steps I took to build this image, plus instructions for running the scripts that will make it reusable.

Customize a Linux Image

If you aren’t familiar with VirtualBox, you can download it for free at https://www.virtualbox.org/wiki/Downloads.  Be sure to get the Guest Additions download, too, you will want it later. I don’t have a preference for a specific Linux distribution. This article uses a CentOS 7.0 image available from https://s3-eu-west-1.amazonaws.com/virtualboxes.org/CentOS7-Gnome.ova.torrent, a choice resulting from the first image found that was of recent vintage and provided sufficient support for the task (it also has a graphical desktop, which is useful when you want to share the image with people who may not be comfortable with command-line-only interfaces). That said, support for various installation processes vary widely between distributions and builds, so if you choose a different distro you may need to find alternative methods to some of the steps on your own.

The first step is to import the pre-built appliance you have downloaded.  The screenshots below will help if you have never done this before.

Import Appliance

Select Appliance File

Customize Configuration Values

I change the Name of the appliance to be descriptive of the purpose of the image after I have completed configuring it. I also increase the CPU count and RAM total so that it will not be too slow during development test runs. You may need to adjust these values according to your own machine. I recommend no more than half of your available resources.

Hard Disk Space

One reason I use this particular base image is that it has adequate hard drive space, which many lack.  If you have an appliance image you like but the drive space is too small, see my blog post about Resizing the Root Drive on a Linux VirtualBox Guest Image with a Windows Host for a solution to use it anyway.

One value of a VM is the ability to use Snapshots to go back to a working point.  During the process we will create one to make a reusable appliance.  Create others as you go according to your own sense of adventure or caution. I suggest you delete old snapshots when you know your current state is stable to save disk space. Doing so at the start saves re-importing the appliance if there is a mis-step earlier in the process.

Install the Informatica Cloud Secure Agent

The next thing to do is to install the Secure Agent. If you plan to re-use this image as a starting point, do not initialize the agent after installation, just start it and verify the install as follows (screen shots follow the steps for those unfamiliar with them):

Download the agent from Informatica Cloud

Download the Secure Agent

Select Linux Agent for this set up

Default save location is the user download directory

then:

[centos@localhost ics]$ cd ~/Downloads
[centos@localhost Downloads]$ chmod +x agent64_install.bin
[centos@localhost Downloads]$ ./agent64_install.bin

Default install options

Choosing the default install location is the simplest option.

[centos@localhost Downloads]$ cd ~/infaagent
[centos@localhost infaagent]$ ./infaagent startup
[centos@localhost infaagent]$ cd main/agentcore
[centos@localhost agentcore]$ ./consoleAgentManager.sh getstatus

Finally, add the following to ~/.bash_profile:

cd ~/infaagent/
./infaagent startup

Find your .bash_profile

Planning for Reuse

For this to be reusable, we will want to change the hostname, especially for a shared dev environment as we cannot have everyone using “localhost” as their hostname. The following is a bit of an overkill script that handles setting the hostname for a variety of distributions:

changehostname.sh:

#!/usr/bin/env bash

OLD_HOSTNAME="$( hostname )"
NEW_HOSTNAME="$1"

if [ -z "$NEW_HOSTNAME" ]; then
 echo -n "Please enter new hostname: "
 read NEW_HOSTNAME < /dev/tty
fi

if [ -z "$NEW_HOSTNAME" ]; then
 echo "Error: no hostname entered. Exiting."
 exit 1
fi

hostnamectl set-hostname "$NEW_HOSTNAME"
hostnamectl set-hostname "$NEW_HOSTNAME" --pretty
hostnamectl set-hostname "$NEW_HOSTNAME" --static
hostnamectl set-hostname "$NEW_HOSTNAME" --transient

echo "Changing hostname from $OLD_HOSTNAME to $NEW_HOSTNAME..."

hostname "$NEW_HOSTNAME"

if [ -n "$( grep "$OLD_HOSTNAME" /etc/sysconfig/network )" ]; then
 sed -i "s/HOSTNAME=.*/HOSTNAME=$NEW_HOSTNAME/g" /etc/sysconfig/network
else
 echo -e "HOSTNAME=$NEW_HOSTNAME" >> /etc/sysconfig/network
fi

if [ -n "$( grep "$OLD_HOSTNAME" /etc/hosts )" ]; then
 sed -i "s/$OLD_HOSTNAME/$NEW_HOSTNAME/g" /etc/hosts
else
 echo -e "$( hostname -I | awk '{ print $1 }' )\t$NEW_HOSTNAME" >> /etc/hosts
fi

echo "Re-boot for change to reflect correctly."

This is also a good time to place a readme on the desktop. Here is the one I use:

###### One time set up #######
Open a terminal and execute the folloiwng commands (excluding [examples])

cd ~/infaagent
sudo su
./changehostname.sh PL_USER_ID

[example:./changehostname.sh scott.nelson]

exit

Restart the VM

cd ~/infaagent/main/agentcore
./consoleAgentManager.sh configure USERNAME PASSWORD

[example:./consoleAgentManager.sh configure linux.virtualbox@primitivelogic.com pa55w0rd]


[LEAVE TERMINAL WINDOW OPEN]

Log in to Informatica Cloud with the same credentials registered above, go to Configure > Runtime Environments

Confirm that the PL_USER_ID agent has been created
wait for upgrade to complete (at least 10 minutes)
return to terminal and run:

reboot

Log in and should be good to go.

#################################
If you have questions: theitsolutionist@gmail.com

Useful commands:

cd ~/infaagent
./infaagent shutdown?
./infaagent startup?

cd ~/infaagent/main/agentcore
./consoleAgentManager.sh getstatus

Save the script in ~/infaagent, shut down the virtual machine and create a snapshot. Then start the machine and follow the readme. If all works well, restore the last snapshot and then export the appliance as your base image.

Export the VM Appliance

Select appliance to export

Set location and format

Add Guest Additions

Shared Folders require Guest Additions

I set up a shared folder to easily exchange files between the guest (Virtual Machine) and host (laptop), as well as to have a place to uses as a file location accessible to both while working with Informatica Cloud flat file connections and logs.

In order to access the shared folder (as well as have a shared clipboard), run the Guest Additions set up after logging in to the new VM.

CentOS7 is not all that easy to do that with. There is a good set of instructions at http://lifeofageekadmin.com/how-to-install-virtualbox-5-additions-on-centos-7/. One thing that is not clear in the instructions is that you will want to shut down and re-start the VM after the last yum update before running the Guest Additions installation. You may also have to run it twice to get everything working.

Insert and run the virtual CD

You will probably need to use Right-CTRL+C to release your mouse from the VM until the Guest Additions are installed.

Once the shared folder shows up under /media, add the centos user to the group for access:

sudo usermod -a -G vboxsf centos

Restart for change to take effect.

Installing MySQL

I often find that MySQL is handy to have on the VM. The following steps will work to get it installed on the CentOS 7.0 image available from https://s3-eu-west-1.amazonaws.com/virtualboxes.org/CentOS7-Gnome.ova.torrent.

First, remove the old install with

sudo yum -y remove mariadb-libs

Then download the latest install from https://dev.mysql.com/downloads/repo/yum/.

The Red Hat Enterprise Linux 7 version seems to work on Centos 7. Save the download rather than opening it, then go to your downloads folder and run the following commands:

sudo yum -y localinstall platform-and-version-specific-package-name.rpm
sudo yum -y install mysql-community-server
sudo service mysqld start

When done, verify with

sudo service mysqld status

Finally, find and update the database admin password and (optionally) install Workbench using:

grep 'temporary password' /var/log/mysqld.log
...
mysql_secure_installation
...
sudo yum -y install mysql-workbench-community

Be sure to add the new password to your readme.

Facebooktwitterredditlinkedinmail
© Scott S. Nelson

A Simplified Oracle 11g Database Command Line Linux Basic Install

I have always struggled with setting up a fresh Oracle 11g Database install. I have made copious notes over the years on the steps to take each time I tackle the process, and when I go back to the notes they only serves as clues to the mystery. This time I had to do the whole thing on a Linux both without the use of the GUI installers and I have captured and scripted the process once and for all.

Of course, most new installs these days will be 12c and should be performed by someone with deep database skills. This article is intended for those that simply need a database for a proof-of-concept or development environment where 11g will suffice.

Acknowledgements

Before I get into the details, I want to point out that there are three key blog posts that I found most useful in this process. They are:

Step-By-Step

These steps are based on using the scripts in this article. Feel free to adjust to fit your own needs, which is how this process came about.

As a side note, while putting the process together and again while documenting it, I used a VM and took a snapshot at the completion of each step to save time if some issue arose in a particular step. You will probably benefit from this as well, since small differences can prevent fully using these steps exactly as described.

Downloads

The Database installs can be found at http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html. If you have access to MOS, you can get a slightly newer version, and you will only need to first two files.

Environment Variables

The values need to be set in the environment. You can place them in a bash script under /etc/profile.d for all users, or in the oracle user home directory if necessary. In the /etc/profile.d folder, be sure to chmod 644 to ensure it will run properly.

export DB_USER=oracle
export DB_PASS=welcome1
export DB_USER_HOME=/home/${DB_USER}
export ORACLE_HOSTNAME=${HOSTNAME}
export ORACLE_UNQNAME=MY11GDB
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1
export ORACLE_SID=MY11GDB
export LD_LIBRARY_PATH=${ORACLE_HOME}/lib:/lib:/usr/lib;
export TMP=/tmp
export APP_DIR=/u01/app
export PATH=/usr/sbin:/sbin:/bin:/usr/sbin:/usr/bin:${ORACLE_HOME}/bin
export CLASSPATH=${ORACLE_HOME}/jlib:${ORACLE_HOME}/rdbms/jlib;
export SOFTWARE_HOME=/media/sf_software
export SCRIPT_HOME=/media/sf_scripts

Regardless of where you place these values, be sure they are set before continuing and placed where they will always be set when administering to the database in the future. This may require either sourcing the file, or rebooting.

Script Variables

db_installprep.sh will set all variables except for the name of the install zip files as those can change over time. Update as necessary in install_11gDB.sh.

Install Prep Script

The script below performs the following tasks:

Creates User and Groups

The _create_groups function takes an inelegant approach to create the oracle user and groups. For those of you better versed in Linux administration, feel free to create your own script. Please share if you do.

Creates ORACLE_HOME path and Update SELinux

For reasons I can’t fathom, the installer will not create the ORACLE_HOME path, so it must be created before installing. Once installed, SELinux enforcement can cause problems with getting the listeners running. Since I only use the database behind a firewall, turning it off works best for me. I would not take that approach with a production server, though.

Dependency Installs

As noted in the Acknowledgements, there is a useful script for making sure the dependencies are in place.

Set Response File Variables

If you use the response files provided in the Downloads section, this will update the values to match your Environment Variables. If you are using your own or from a different source, comment out the _create_rsp_files function.

db_installprep.sh

#!/bin/bash
# Script based on instructions at http://dbaora.com/install-oracle-in-silent-mode-11g-release-2-11-2/
export INSTALL_DATE=`/bin/date "+%Y%m%d-%H-%M"`

function_logcomment()
{
 echo "#########################################################################################"
 echo -e "$(date +"%I:%M:%S"): $1"
 echo "#########################################################################################"
}

_check_user() {
# "Borrowed from" https://danielwestermann.com/2013/08/11/a-simple-script-to-automate-the-oracle-12c-setup/
    if [ $(id -un) != "${1}" ]; then
        _log "you must run this as ${1}"
        exit 0
    fi
}

_create_groups(){
	groupNames=( oinstall dba oper asmdba asmoper asmadmin )
	groupIds=( 54321 54322 54323 54327 54328 54329 )
	
	for index in "${!groupNames[@]}"
	do
		function_logcomment "adding group ${groupNames[index]}"
		groupadd ${groupNames[index]} -f -g ${groupIds[index]}
	done
#NOT THE MOST ELEGANT APPROACH...
	echo "Check for $DB_USER user"
	if [ ! id -u $DB_USER > /dev/null 2>&1 ]; then
	echo "Adding $DB_USER user"
		useradd -u 500 $DB_USER
		echo $DB_PASS | passwd $DB_USER --stdin
	fi

	for index in "${!groupNames[@]}"
	do
		echo "Adding $DB_USER user ${groupNames[index]} group"
		usermod -aG ${groupNames[index]} $DB_USER 
	done
}

_pre_env_settings() {
	mkdir -p $ORACLE_HOME
	chown oracle:oinstall -R /u01
	sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config
}

_package_updates(){
	cd /etc/yum.repos.d
#	cp $SCRIPT_HOME/build/database/public-yum-ol6.repo .
	wget http://public-yum.oracle.com/public-yum-ol6.repo
	wait $!
	yum -y install oracle-rdbms-server-11gR2-preinstall
}

_create_rsp_files(){
	cd $SCRIPT_HOME/build/database
	filenames=( db_install.rsp dbca.rsp )

	for index in "${!filenames[@]}"
	do
		sed 's#@ORACLE_BASE@#'"$ORACLE_BASE"'#g ; s#@ORACLE_HOME@#'"$ORACLE_HOME"'#g ; s#@ORACLE_SID@#'"$ORACLE_SID"'#g ; s#@DB_PASS@#'"$DB_PASS"'#g' ${filenames[index]}.template > ${filenames[index]}
	done
}

_check_user "root"
wait $!
_create_groups 2>&1 | tee ${APP_DIR}/db11g_install.log
wait $!
_pre_env_settings 2>&1 | tee ${APP_DIR}/db11g_install.log
wait $!
_create_rsp_files
wait $!
_package_updates 2>&1 | tee ${APP_DIR}/db11g_install.log
echo "DB Install Prep Complete"
#wait $!
#https://danielwestermann.com/2013/08/11/a-simple-script-to-automate-the-oracle-12c-setup/
#suggests the following firewall changes but have been successful so far without
#systemctl stop firewalld
#systemctl disable firewalld

Install the Database

As noted earlier, be sure that the install zip file names are correct in install_11gDB.sh. install_11gDB.sh will perform the following:

  1. Unzip the install files
  2. Perform a silent install of the database application
  3. Create a default listener
  4. Create a default database

install_11gDB.sh

#!/bin/bash
# Script based on instructions at http://dbaora.com/install-oracle-in-silent-mode-11g-release-2-11-2/
export INSTALL_DATE=`/bin/date "+%Y%m%d-%H-%M"`

function_logcomment()
{
 echo "#########################################################################################"
 echo -e "$(date +"%I:%M:%S"): $1"
 echo "#########################################################################################"
}

# check for the current os user
# "Borrowed from" https://danielwestermann.com/2013/08/11/a-simple-script-to-automate-the-oracle-12c-setup/
_check_user() {
    if [ $(id -un) != "${1}" ]; then
        _log "you must run this as ${1}"
        exit 0
    fi
}

_unzip_installs(){
	cd $DB_USER_HOME
	unzip -q $SOFTWARE_HOME/p13390677_112040_Linux-x86-64_1of7.zip
	unzip -q $SOFTWARE_HOME/p13390677_112040_Linux-x86-64_2of7.zip
}

_install_binaries(){
	cd $DB_USER_HOME/database
	./runInstaller -silent -responseFile $SCRIPT_HOME/build/database/db_install.rsp
}

_create_db(){
	mkdir $ORACLE_BASE/oradata
	mkdir $ORACLE_BASE/flash_recovery_area
}
_check_user $DB_USER
source ${DB_USER_HOME}/.bash_profile
_unzip_installs 2>&1 | tee ${APP_DIR}/db11g_install.log
wait $!
_install_binaries 2>&1 | tee ${APP_DIR}/db11g_install.log
wait $!
netca -silent -responseFile $SCRIPT_HOME/build/database/netca.rsp 2>&1 | tee ${APP_DIR}/db11g_install.log
wait $!
dbca -silent -responseFile $SCRIPT_HOME/build/database/dbca.rsp 2>&1 | tee ${APP_DIR}/db11g_install.log

Post Install Steps

After the installation, there are two scripts that are provided by Oracle that need to be run as root. Then there are some steps to perform so that the database is started every time the server is, because I have not had a case where this wasn’t what I needed. As noted in the Acknowledgements, How I Enable Autostarting of Oracle Database for Demonstrations and Development (by Christopher Jones) was my reference for this process and taken almost completely from that blog entry.

Once the above is completed, the install files are no longer necessary, so they are removed.

db_post_install.sh

#!/bin/bash

#script Distilled from https://blogs.oracle.com/opal/entry/how_i_enable_autostarting_of1

_check_user() {
# "Borrowed from" https://danielwestermann.com/2013/08/11/a-simple-script-to-automate-the-oracle-12c-setup/
    if [ $(id -un) != "${1}" ]; then
        echo "You must run this as ${1}!"
        exit 0
    fi
}
_update_oratab(){
	sed -i 's#'"$ORACLE_HOME"':N#'"$ORACLE_HOME"':Y#g' /etc/oratab 2>&1 | tee ${APP_DIR}/db11g_install.log
	#if above fails...
	grep -q -F ${ORACLE_SID}:${ORACLE_HOME}:Y /etc/oratab || echo ${ORACLE_SID}:${ORACLE_HOME}:Y >> /etc/oratab
}
_create_dbora(){
	cp $SCRIPT_HOME/build/database/dbora /etc/init.d/dbora
	sed -i 's#@ORACLE_HOME@#'"${ORACLE_HOME}"'#g' /etc/init.d/dbora
}
_update_dbora(){
	chgrp dba /etc/init.d/dbora
	chmod 750 /etc/init.d/dbora
	chkconfig --add /etc/init.d/dbora
	chkconfig dbora on
}
_check_user "root"
${ORACLE_BASE}/oraInventory/orainstRoot.sh
wait $!
${ORACLE_BASE}/product/11.2.0/db_1/root.sh
wait $!
_update_oratab
wait $!
_create_dbora
wait $!
_update_dbora
wait $!
rm -rf $DB_USER_HOME/database
echo "db_post_install.sh complete"

Verify the Installation

After running db_post_install.sh, you will either need to log out and log back in again as oracle, or simply reboot the server. First test with lsnrctl status, which should yield the following:

lsnctrl_success

On occasion, this may not work properly. Before sending me an email reminding me of my imperfections, you may first want to try:

sqlplus / as sysdba

startup

exit

And then either log out and back in or (preferably) reboot the server and try again. This generally fixed it for me while coming up with these steps.

Downloads

The scripts described here are available at https://drive.google.com/folderview?id=0B1L4vdibbjSXeUJ5Q0pURExfbXc&usp=sharing

One More Thing

I found installing sqldeveloper to be a great way to do more through testing. At the time of this writing it can be found at http://www.oracle.com/technetwork/developer-tools/sql-developer/downloads/index.html.

Facebooktwitterredditlinkedinmail
© Scott S. Nelson