text:
Talk:User and Group Management
the Discussion page contains a much more ambitious proposal that I decided was too complex to tackle all at once. It is being split into bite-sized portions (Phases) on the main page.
User and Group Dependencies
Exheres defines a dependency-based mechanism for ebuilds to specify their user and group dependencies, which is an appropriate mechanism for specifying dependencies. The specific syntax used is user/foo to specify a dependency on user foo, and group/bar to specify a dependency on group bar existing. Dependencies can be build-time or run-time, as required.
Using dependencies for this purpose allows Portage to create these users and groups at exactly the right time -- prior to build or prior to install, as necessary, and will work just fine with binary packages, with some potential caveats (noted later in the document.) It also allows user and group creation to be affected by USE variable settings.
This document suggests following the Exheres syntax:
DEPEND="user/lighttpd group/web-server" RDEPEND="user/lighttpd group/web-server"
All this tells Portage is that "This ebuild needs a lighttpd user and web-server group." But it does not tell Portage what UID it should be, nor does it provide other necessary settings for the user. This data is defined within the Portage tree, and the mechanism for defining this data is described below.
Profile Settings
The user or group dependency will just tell Portage that this particular package requires a particular user or group, but any detailed information related to this user or group, such as suggested UID/GID, shell, etc, is stored in the Portage tree itself, and specifically in the Portage profile. The mechanism for defining this information is described below:
Core Portage Trees
For "core" Portage trees (not overlays,) specific user and group settings are defined using Portage's cascading profile functionality. Portage would be enhanced to recognize accounts/users and accounts/groups directories inside profile directories. Users and groups would be defined in these directories, with one user or group per file, and the filename specifying the name of the user or group. Cascading functionality would be enabled so that the full set of user and group data could be a collection of all users and groups defined in parent profiles. This would provide a handy mechanism to share user and group definitions across different operating systems, while allowing for local variations when needed. It makes sense to leverage cascading profiles as much as possible.
The approach described above does not work for overlays -- how are they to extend user and group settings automatically, as required by the ebuilds contained in the overlay?
The proposed solution is to allow overlays to add users and groups via the OVERLAY_DIR/profiles/accounts/groups and PORTDIR/profiles/accounts/users directories. These directories will always be searched for user and group data for all active overlays, and merged into the set defined by the profiles. This provides an automatic mechanism for overlays to inject user and group data that they require, without requiring any manual configuration on behalf of the Gentoo/Funtoo Linux user.
This way, Portage can have elegant overlay support inherent in the Exheres "global repository of user/group data" design, while still having an extensible mechanism to define users and groups using cascading profiles. In my opinion, this is the best of both worlds.
Account Resolution
See the following pseudo-code for how resolution of cascading profiles and overlays should work together to resolve user settings. One important thing to note is that user and group resolution cascades through the profiles to create a master list of users, groups and defaults. This master list is extended by any overlays that are active. Then, when user or group data is requested, the resolved user, group and defaults lists are used to generate the resultant data.
Users pseudo-code, with Groups being implemented identically:
class Profile: def __init__(self,path): self.path = path self._processed_user_defaults = False self._required_user_fields = [] self._alternate_user_fields = {} self.parents = [] # sample code to recursively create Parent profiles: if os.path.exists("%s/parents" % self.path): a=open("%s/parents" % self.path,"r") for line in a: self.parents.append(Profile(self.resolve_path(line))) a.close() @property def users(self): """ returns a dictionary mapping user names to the files on disk defining each user (cascading) """ users = {} for parent in self.parents: users.update(self.parent.users) for userfile in glob.glob("accounts/users/*"): users[os.path.dirname(userfile)] = os.path.abspath(userfile) for overlay in self.overlays: users.update(self.overlay.users) return users def userData(self,user): """ returns a dictionary of key/value pairs defining the variables for specified user. Note: * alternative key names are mapped to primary key names * an exception is thrown if required fields are missing """ out = {} if user in self.users: user_data = grabFile(self.users[user]) out = grabFile(self.defaults["user"]) required = [] alternatives = {} if "required" in out: for req_key in out["required"].split(','): alts = req_key.split('|') required.append(alts[0]) if len(alts) > 1: for alt_key in alts[1:]: alternatives[alt_key] = alts[0] if "parent" in user_data: # note, this next line requires a grabFile() implementation that supports alternatives, and # will use this dict to map any alternative names to the primary name in the return data: out.update(grabFile(self.defaults[user_data["parent"]],alternatives=alternatives)) out.update(user_data,alternatives=alternatives) for req_key in required: if not req_key in out: raise RequiredKeyError(user,req_key) return out @property def defaults(self): """ returns a dictionary mapping defaults names to the files on disk defining each default (cascading) """ defaults = {} for parent in self.parents: defaults.update(self.parent.defaults) for defaultsfile in glob.glob("accounts/defaults/*"): defaults[os.path.dirname(defaultsfile)] = os.path.abspath(defaultsfile) for overlay in self.overlays: defaults.update(overlay.user_defaults) return defaults profile = Profile("/etc/make.profile") my_user = profile.userData("nginx") print my_user["desc"]
User and Group Data Format
In a given profile directory, accounts/users/myuser will define settings for a user with the name of myuser. The file format used to define users is very similar to and compatible with Exheres, using standard make.conf-style key=value syntax, with quoting required for values with whitespace. The following field names are suggested to be used for the initial users implementation. Note that this file format is extensible -- Portage must not complain about any additional fields in the users, groups or defaults files that are not specified above. This allows these formats to be easily extended for alternate operating systems or other distributions without requiring patches to Portage.
|Alternate Name
|login shell
|home directory
|primary group
|other group memberships
|comma-delimited list
|preferred user ID (not guaranteed)
|Will be bound by SYS_UID_MIN and SYS_UID_MAX defined in /etc/login.defs?
|Description/GECOS field
|"An account for fun"
|parent default file
Example file accounts/users/foo:
shell=/bin/bash home=/dev/null group=foo extra_groups="foo bar oni" uid=37 desc="The cool account"
- accounts/groups/mygroup will define settings a group with the name of mygroup.
The UID/GID management framework supports the ability to explicitly define default values for all users and groups, or a subset of users and groups. In addition, these default values can be overridden by child profiles. This functionality allows default values to be overridden, and also provides a mechanism for profiles to specify which fields are required for that profile. This allows alternate platforms to have different required values, and also allows different Gentoo-based distributions to have different policies regarding required fields. This allows policy to be defined per distribution rather than being hard-coded into Portage itself.
Defaults can be defined inside the accounts/defaults directory inside each profile directory. The file accounts/defaults/user, if it exists, will be used to define any default settings for user accounts. The file accounts/defaults/group, if it exists, will be used to define any default settings for group accounts. These files are typically defined in one location for an entire set of cascading profiles, such as profiles/base.
Defaults files consist of key=value pairs, identical to user and group files. Note that the parent keyword is not valid in defaults files. A new keyword required specifies the required fields for any child users or groups, and may only be specified in the master defaults file 'user' or 'group':
|Required fields
|comma-delimited list, with "|" used to specify alternate names
Alternate Defaults
In addition, other files in defaults can be created, and these files may be used to specify alternate default settings for users and groups, which can be overridden by child profiles. For example, an accounts/users/foo file that contains a parent=user-server would use the file accounts/defaults/user-server for its inherited default settings. The suggested convention for defaults values is to prefix user defaults with "user-" and group defaults with "group-", but this convention must not be enforced by Portage.
Any defaults files can be overridden by child profiles, which will result in the respective default settings changing for all users and groups that use those defaults.
Defaults Parsing Rules
Note that all alternate defaults files (such as user-server) always inherit (and optionally override) the global defaults defined in user and group. This means that a required setting defined in user will be inherited by user-server automatically. This allows the required field for users to be set globally in user, and makes it possible to override it easily, by simply providing a new user file in a child profile.
- A default setting defined in user or group can be unset by setting it to a value of "".
- Non-required fields that have not been explicitly defined have a default value of "" (the empty string).
- Required fields that are unset or have a value of "" should not be allowed and should be flagged as invalid by Portage.
User and Group Creation
The commands actually used by Portage to create users and groups need to be able to be customizable, as they vary by operating system.
Here are some possible mechanisms to implement this functionality, listed in order of personal preference:
- Add a plugins directory to profiles and create user-add and group-add scripts within these directories. This allows the user-add and group-add scripts to be different between MacOS X and Linux, for example, while allowing common platforms to re-use existing scripts. Users could override the user-creation behavior by creating /etc/portage/plugins/user-add script.
- Add virtual/user-manager to every system profile which would install user-add and group-add commands to a Portage plug-in directory. These commands would be used for creating all users and groups on the system, would have a defined command-line API, and could vary based on OS by tweaking the virtual in the system profile.
- Add internal logic to Portage for adding groups and users to various operating systems. I think this solution would be sub-optimal as it is less "tweakable". User and group creation is something that can be useful to tweak in various circumstances, especially by power users.
What remains to be defined is how to transition from enewgroup and enewuser that are currently being called from pkg_setup. The new implementation should be backwards-compatible with the old system to ease transition.
- call pkg_setup during dependency generation and use enewgroup and enewuser wrappers to inject dependency info into the metadata, and emit a deprecation warning. Pass only the user/group name to the new system, which would provide its own UID/GID info. This may not be feasible.
- brute-force - grep the ebuild for legacy commands during metadata generation. Integrate new-style dependencies into metadata. This is possibly the least elegant solution but may be the simplest approach.
- fallback - tweak the legacy commands to call the new framework. This means that older ebuilds would not be able to have their users and groups created at the same time as new-style ebuilds (dependency fulfillment time.) However, this may be the most elegant solution and also the least hackish.
The last option seems best.
Here are the various architectural layers of the implementation:
- Portage internals to handle "user/" and "group/" as special words. Would be treated almost identically to ebuilds up until actual merge time. Version specifiers, as well as USE flags, would not be allowed.
- Python-based code to parse user and group data in the profiles, and determine proper UID/GID to use on the system. This is the parsing and policy framework, and can be controlled by variables defined in make.conf/make.defaults. This would all be written in Python and integrated into the Portage core.
- "Core" Portage trees would use cascading profiles to define users and groups. This would allow variations based on architecture (Portage on MacOS X vs. Linux, for example.)
- Overlays would use OVERLAY_DIR/profiles/users and OVERLAY_DIR/profiles/groups to define user and group information required for the overlay. This way, overlays could extend users and groups.
- Python-based backwards-compatibility code (implementation to be determined)
- Profile-based plugin architecture, again python-based.
- user-add and group-add scripts, implemented as stand-alone executables (likely written as a shell script.) This is the only part not in python and these scripts do not do any kind of high-level policy decisions. They simply create the user or group and report success or failure.
Possible Changes and Unresolved Issues
Disable User/Group Creation
FEATURES="-auto-accounts" (auto-accounts would be enabled by default)
This is a change from GLEP 27 to get rid of ugly "no" prefix and to follow naming conventions for existing FEATURES settings.
With auto-accounts disabled, Portage will do an initial check using libc (respecting /etc/nsswitch.conf) to see if all depended-upon users and groups exist. If they exist, the user/group dependency will be satisfied and ebuild can continue. If the dependencies are not satisfied, then the ebuild will abort with unsatisfied dependencies and display the users and groups that need to be created, and what their associated settings should be.
Allow User/Group Names to Be Specified At Build Time
Some users may want an nginx user, while others may want a generic www user to be used.
Not Elegant for Specific Users/Groups
This implementation looks cool but is potentially annoying for specific users and groups. For example, for an nginx ebuild that needs an nginx user, it would need to be added to the system profile. We probably need to implement ebuild-local user/groups as well.
Specify Required Users and Groups for Profile
Some users and groups must be part of the system and should be in the system set. It would be nice to move some of this out of baselayout and into the profiles directly. Maybe a good solution is to have baselayout RDEPEND on these users and groups.
Dependency Prefix
One possible area of improvement is with the user/ and group/ syntax itself, which could be changed slightly to indicate that we are depending on something other than a package. But this is not absolutely necessary and "user" and "group" could be treated as reserved names that cannot be used for categories, since they have a special meaning.
.tbz2 support
In general, the design proposed above will work well for binary packages, as long as the users and groups required by the .tbz2 can be found in the local Portage tree and overlays. If not, then Portage will not have any metadata relating to the user(s) or group(s) that need to be created for the .tbz2 and will not be able to create them, resulting in an install failure, which of course is not optimal.
Therefore, it may be necessary to embed user and group metadata within the .tbz2 and have Portage use this data only if local user/group metadata for the requested users and groups is not available. In addition, this user/group metadata may need to be cached persistently inside /var/db/pkg or another location to ensure that it is continually available to the Portage UID/GID code. This could add a bit more complexity to the implementation but should solve the .tbz2 failure problem. This would create three layers of user/group data:
- Core user/group metadata defined in /usr/portage.
- Overlay user/group metadata defined in OVERLAY_DIR/profiles/{users,groups}
- Package user/group metadata
Using pseudo-code, we could imagine resolution of user and group metadata at .tbz2 install time to look like this:
all_ug_metadata = profile_ug_metadata + overlay_ug_metadata if (user_or_group in (all_ug_metadata)): return all_ug_metadata[user_or_group] else: return binary_package_ug_metadata[user_or_group]
Compatibility with other distributions
If our goal is to ensure a sane method of creating UID/GID's in packages, we should also look at making them compatible with the wider world. The LSB http://refspecs.freestandards.org/LSB_3.0.0/LSB-Core-generic/LSB-Core-generic/usernames.html specifies very lax standards for system accounts. Seemingly there are no hard standards for system/daemon UID/GID's, and no real desire in the community from anyone I discussed this issue with to standardize. There is one important issue to note, and that is the lowest user account number.
- Fedora/RHEL: Presently RHEL starts assigning UID/GID's to users of the system at 500 and moves up, this will changehttp://lists.fedoraproject.org/pipermail/devel/2011-May/151663.html to number after 1000
- Debian/Ubuntu: Presently Debian starts assigning UID/GID's to users of the system at 1000, and moves up. This appears to be the standard distributions are moving towards
- Gentoo/Funtoo: Presently Funtoo and Gentoo are both compliant with Debian, and after Fedora 16, and the subsequent RHEL, this will be a standard across most major linux distributions.


text:
Calvary Chapel Enters HistoryPosted by Calvary Chapel, Nov 6 2006, 12:08 PM
Chuck Smith - Calvary Chapel Revival
These short excerpts have been taken from HARVEST to best describe the Calvary Chapel Revival. HARVEST is written by Chuck Smith and Tal Brooke. For a complete description of this awesome revival of the church of God in our modern times be sure to order HARVEST for yourself. You can order online at: http://www.thewordfortoday.org , then click on "Pastor Chuck Smith's Materials", then "Books", then "General books and pamphlets" and scroll down until you come to the title of "HARVEST."]
for info about Calvary Chapel in Australia.. visit http://calvarychapel.net.au
Chapter 1
Calvary Chapel Enters History
As I describe to you the explosion of church growth that happened in the Calvary Chapel movement, I speak as a spectator. If there is any credit to be given, it belongs to God alone. If you understand this perspective, then when I describe to you my difficult years, my desert years, you will know why I stand in awe at what God has done. And you will celebrate with me the awesome symmetry of God's design. It leaves us all stunned and amazed.
Those pictures in Look, Life, Time, and Newsweek magazines of our massive Calvary Chapel baptisms in the Pacific Ocean resemble a human harvest field. Literally thousands of people can be seen crowding the shores waiting to be baptized. Images like these illustrate that this is a colossal phenomenon as far as churches go. Professors such as Peter Wagner at Fuller Seminary and Ron Enroth at Westmount College state in their books that there may be nothing like it in American history.
It has been estimated that in a two-year period in the mid-70's, Calvary Chapel of Costa Mesa had performed well over eight thousand baptisms. During that same period, we were instrumental in 20,000 conversions to the Christian faith. Our decadal growth rate had been calculated by church growth experts to be near the ten thousand percent level.
Perhaps more staggering still is that when we first came to Calvary Chapel church in Costa Mesa in 1965, we had twenty five people our first Sunday morning.
Now put this in perspective. Not only has that church of twenty-five members established more than five hundred affiliate Calvary Chapels across the world, but that one fellowship in Costa Mesa has growth until the number of people who consider it their home church is more than thirty-five thousand!...I have heard critics try to dismiss the impact of Calvary Chapel by calling it "production line religion."...Other critics, who belong to churches that have not grown in years (which was exactly my situation for well over a decade) often adopt a stance of spiritual elitism. To them, smallness proves spirituality, faithfulness, or an unwillingness to compromise. Perhaps they feel that "quantity" diminishes the "quality" of spirituality.
Christ talked about the man who buried his talents and wound up with nothing, because even what he had was taken away. But He also spoke positively about the servant who magnified his talents a thousandfold. So to say that Christ purposefully limits the size and impact of a ministry is unfounded. The explosive force of a ministry can equally be taken as a sign that God is genuinely at work. Who can forget the day of Pentecost when three thousand turned to Christ on the streets of Jerusalem? "And the Lord added to their number daily those who were being saved" (Acts 2:47).
Just as the Jews soon discovered that they were not to keep the Good News among themselves, but were to include the "despised" Gentiles, so there was an interesting shifting of gears at Calvary Chapel. Our fellowship began with twenty-five members who represented mainline, traditional America. Yet God called us to share with the youth from the counterculture. This outreach took a miracle of love and acceptance. But as each group accepted the other, both sides grew in number. There was a vital sense of God stepping into the picture and as lives changed before our eyes. The sense of being in the middle of a miracle kept feeding itself like a bonfire. When some hopeless heroin addict throws away the needle and goes to the beach to convert three people to Christ in an afternoon, it's a pretty strong boost to the faith of everyone involved!
Another remarkable pattern kept repeating itself. As soon as we moved into a new building, our fellowship would already be too big for the facilities. We seemed to grow like a Chinese checker jumping across the board. In two years we moved from our original building (one of the first church buildings in Costa Mesa) to a rented Lutheran church overlooking the Pacific. Soon thereafter we decided to do something unprecedented at the time and move the church to a school that we had bought. The building did not match up to code so we tore it down and built another, hippies and straights working and smiling side by side. It was such a sight that cars on the highway would slow down and gawk at us.
I had always felt that the ideal church size was about 275 and so we built accordingly. But by the time the sanctuary of 330 seats was completed in 1969, we were already forced to go to two services, and eventually had to use the outside courtyard for 500 more seats. This was all fine in good weather.
But by 1971 the large crowds and the winter rains forced us to move again. We bought a ten-acre tract of land on the Costa Mesa/Santa Ana border. Orange County was quickly changing and the once-famous orange orchards were making way for the exploding population of Los Angeles. Soon after buying the land, we again did the unprecedented and erected a giant circus tent that could seat 1,600 at a stretch. This was soon enlarged to hold 2,000 seats. Meanwhile we began building an enormous sanctuary adjacent to this site.
This was all amazing to me and a bit frightening. I would sit at the signal across the street looking at the bare lot that we had obligated ourselves to purchase, and start to panic. It would take a tremendous amount of money to develop the property. Was I being foolish to obligate these people to that kind of project? Why not be satisfied where you are? The bills are all paid. You've got money in the bank. This is going to take such a great outlay. But then, as I sat there, the Lord spoke to my heart: Whose church is it? I replied out loud, "It's Your church, Lord." Then why are you worried about bankruptcy?
When an incredible relief. A sense of frantic worry just rolled off my shoulders. The finances were not my responsibility. They were His. This was an extremely important lesson for me to learn. It is not my church. It's His church. And God was the one who had created the problem! He was the one who brought so many people in that we couldn't house them.
God continued to bring people in. By the time Calvary Chapel fellowship had celebrated opening day in 1973 moving into the vast new sanctuary of 2,200 seats, the building was already too small to contain the numbers turning out. We held three Sunday morning services and had more than 4,000 people at each one. Many had to sit on the carpeted floor. A large portion of floor space was left without pews so as to provide that option...
Calvary Chapel also ministers over the airwaves, and this must account for many of those who travel long distances to fellowship here. A Nielsen survey indicated that our Sunday morning Calvary Chapel service is the most listened-to program in the area during the entire week. As of 1987, Calvary's outreach has included numerous radio programs, television broadcasts, and the production and distribution of tapes and records. The missions outreach is considerable. Calvary Chapel not only supports Wycliffe Bible Translators, Campus Crusade [For Christ International], Missionary Aviation Fellowship, and other groups, but we donate to Third World needs. At what I felt was a leading from the Lord, we built a radio station in San Salvador and gave it to the local pastors there. We also gave money to Open Doors to purchase the ship that, in tandem with a barge, delivered one million Bibles to mainland China. Our financial commitment to missions exceeds the local expense budget by over 50%.
Calvary Chapel of Costa Mesa often averages two hundred conversions a week...As part of the course new believers can attend numerous evening Bible studies and classes taught during the week. Along with the Sunday morning and evening services, I also teach an in-depth midweek Bible study. On other nights of the week, thousands attend the wide variety of Bible studies and fellowship groups.
Calvary Chapel never asks for money. We avoid pressuring our members for "faith pledges" and no appeal for funds is ever made over our radio or television outreaches. Our feeling is that begging for money would bring discredit to God. Financial integrity is central to this ministry. So much so that all of the staff salaries are considered low by usual standards. I limit myself and my family to a simple lifestyle while my ministry has enabled me to oversee millions of dollars. I want to be responsible to God for this money, for it is His money, not mine. I am merely a steward. This is important to me because I know that nonbelievers will be watching, and we are responsible for the way we witness to them...
I believe God has blessed us at Calvary Chapel with an exceptionally loving and open fellowship. Christ told us that the world will know we are His by our love for one another. This is our predominant emphasis. And how I pray that we can consistently show the world this standard. Certainly our Lord told us that our identification marks as Christians should not only involve love, but also purity and integrity of character of the highest order...
Let me say that in the Calvary Chapel phenomenon, I did not just walk into a church the size of an aircraft carrier and become an admiral. The church was not handed over to me, like an industrial magnate bequeathing an unworthy son some multinational enterprise. Instead, as I will share with you, I had to work from scratch and obey every new call that came from God, even when those calls seemed irrational. Behind it was blood, sweat and tears, as well as a number of unforgettable lessons.
One of the secrets of my preparation for this work, I am convinced, was my desert years, those years of struggle. It was in this crucible that God prepared my character for the coming work. God so often makes mockery of outward circumstances. He repudiates the impossible if we will only but believe. And believe me, my situation looked absolutely impossible at times!
Chapter 2
The Drought Before The Harvest
"I am not your hireling. God has called me to be a shepherd of His Church. You had better find a replacement for me."
These thoughts marked the major turning point in my life. I felt God clearly speaking to my heart. And after more than seventeen years of personal drought, seventeen years of failure in the traditional forms of Christian ministry, I knew that this era of confinement was coming to an end. I had come to a place where I could no longer digest the stifling restrictive role I was required to play. Where was the room for the Holy Spirit to work creatively among us? In my heart, I resigned, then and there, though I held my silence for the moment as I sat before the board of elders of the church.
That very night the Sunday evening church service had been unusually joyous and positive. I stepped out and took a chance. I departed from traditional procedure and tried something that involved everyone.
We decided to change the format from the traditional song service, announcements, prayer, and sermon to a more informal kind of a gathering. We were holding services in the local American Legion Hall. So having arrived early, my wife and I gathered the chairs in a circle rather than in a row. Rather than using a hymnal, we worshipped the Lord in singing choruses. Then we went into a time of prayer. And many people who had been bound were able to open up and pray. It was a very special experience for them. And then of course I shared in a more informal way from the Word of God, sitting there and teaching, more as I would within an intimate home fellowship rather than the traditional church setting.
It was electric. A lot of people got excited. But the board members had difficulty with the change of format. They were so upset they called a board meeting immediately after the service. The irony was that I had started this church. Yet the incorporating officers had not even made me an officer on the board. I was put more in the role of a hireling. Since they all had strong denominational backgrounds, they made sure that the church constitution and rules of order were virtually the same as those of a denominational church. So after seeing God move in this exciting service, they informed me that they did not want this to continue.
It seemed that our church, like so many churches, was artificially bound by extra-biblical rules and formalities, and run by men who acted as employers rather than brethren bonded together in the love of Christ. Elders were often voted into their positions because they were successful in the secular world. They had prestige or money. And so the leadership of the church was chosen by worldly standards. If they had succeeded pragmatically in business then why couldn't they help the church? It was a worldly formulation of success and had little to do with the standards of eternity. In fact, these very people can be the most inept when it comes to spiritual values and commitment because they have rooted their lives in outward success. If asked to sacrifice some of their affluence for the sake of Christ, I imagine that, like the rich young ruler, many of them would shake their heads and walk away. In our day, the Madison Avenue approach to church procedure has been sanctified.
Thus, the elders on the board used their rules of procedure to shape and confine the church to their own image. Little wonder it lacked the explosive dynamism, relevance, and love of the early Church as reported in the New Testament. It seemed that we had lost something on the way as these past twenty centuries went by. This, unfortunately, even applies to doctrinally conservative and "safe" churches. They so often follow a codified form of godliness but do not evidence the true power thereof.
As I sat before the church board that evening I kept my composure and, rather than stir up dissent, acquiesced to their request, not even seeking to defend what I had done. But in my heart burned a quiet certainty that God had called me to be a shepherd, not a hireling, or a ministerial employee on the payroll of businessmen.
I realized at that moment that this was not going to be my permanent place of ministry. It was the final move that solidified my decision to leave that rapidly growing fellowship and start all over again with the Bible study class I had in the Newport area. And the tiny fellowship at Calvary Chapel was already pressing me to come down and start my ministry with them. What was attractive in this was the opportunity to establish bylaws and articles allowing me freedom to be the shepherd responsible before God that I was called to be. I vowed in my heart that I would never again be a hireling of men.
Still, I faced uncertainty. If leaving this church was my decision alone, this costly choice would not have been nearly so nerve wracking. But naturally it involved my wife as well. I knew my decision would jolt her like an earthquake. Seventeen times she had to follow me and move to a different location. For seventeen years she had seen me work to supplement my ministry income. I had anything but a track record that would bring confidence and hope into the heart of a wife. Finally, I had worked up to a respectably sized church that was growing monthly. Only recently had we been able to purchase a beautiful new home that she loved. Now, after seventeen years of wilderness wandering, this brief oasis would once again be snatched away from her and replaced with an uncertain future. It was almost cruel. But the critical factor for me was that I was certain that God had ordained my decision to move. I had no choice but to tell her.
As usual in the churches I pastored, including the most recent, Kay formed deep emotional bonds with the people. She could not understand how I could consider leaving this blossoming fellowship that we had started, that loved us so deeply, in order to go to a small struggling church that was floundering and considering closing up shop. Not only that but officially I would be associate pastor. I wouldn't even be the senior pastor.
"Are you sure this is the will of the Lord?" she asked me in emotional disbelief. Finally after a great deal of prayer, Kay looked me in the face. Her eyes shone like Abraham's Sarah, for she was willing to follow me anywhere [What a woman of faith! Praise her!!!]. God used her to break my heart before him. This had to work. I pleaded before God with passion, though I knew God's leading was too strong for something not to be in the wind. By outward standards my move was insanity. How true that is when faith is required.

subset: commoncrawl


text:
Paint Color Names Reach Dangerous New Heights of Absurdity
It's not exactly news that a lot of house paint colors have wacky names. But they have apparently become even more wacky as paint companies become increasingly desperate to sell to a U.S. homeowner population so behind on their mortgage payments they're papering their walls with free subway newspapers.
To give you an example of how out-of-control paint names have become: What color do you think "Hey There!" is? Maybe a bright orange or something? That's a real color name by Ace Paint. Thing is, that name is enough to make us steer clear of the paint, because, no matter how nice it looks, whenever you have guests over and they ask what color your walls are you're going to have to say, "Hey There!" And then some annoying "Who's On First?"-style hijinks will ensure.
GUEST: "Wow, I really like the the new kitchen paint job! What color is it?"
YOU: "Hey there!"
GUEST: "Huh…? I'm right here?"
YOU: "No, Hey there!"
GUEST 2: "You talkin' to me?"
There is also a color called "Tornado," which seems even more likely to cause tragic misunderstandings.
GUEST: "Wow, what color is your living room?"
YOU: "Tornado!"
GUEST: "Dear God, we're all going to die! Everyone into the basement!"
[Two minutes later, in the basement]
GUEST: "I really like your basement. What color are the walls?
YOU: "Flash Flood."
GUEST: "Dear God, we're all going to die! Everyone back into the living room!"
[Repeat until everyone collapses from exhaustion]
So, yeah, we'll stick to the primary colors, thank you very much. The bedroom will be red, the kitchen, yellow, the bathroom blue, like a goddamn Roy Lichtenstein painting. [NYT, image via Shutterstock]


text:
Have you heard about makeover? No! Don't you want to rejuvenate your personality? Yes, Great! Top Hairdressers in Parkmore there are numerous beauty salons established in Miami to take care of individuals' appearances. Best Black Hair Stylist some of these are sophisticated and high-quality. Beauty salons are now going out of their ways to focus on customized solutions to enhance individuals' looks.
You want to rejuvenate your personality? If your answer is yes then here is a list of Top 10 of Beauty Salons in Austin TX. African American Stylist this list will guide you to find the best Beauty Salons in Austin TX compiled on the basis that how frequently the Beauty Salons are used by beauty conscious customers. The No.1 Beauty Salons on this list has been stored the most amount of times by Austin, TX area. Generally, people only store a business' information in their address books if they are satisfied with the provider's service and wish to engage in repeat business.
Top 10 Hair Dying Mistakes
Since makeup is about renovating your own personality, find the best Beauty Salon to rejuvenate your personality. This Top 10 List will help you finding the best quality Beauty Salon of Austin, TX. So, visit the best beauty salon in your neighborhood in Austin, TX, the unexpected change in your look as well as personality!
Top Hairdressers in Parkmore?
Hair extensions might seem like a new invention but in reality hair additions have been around as far back as the Egyptian times when both men and women work wigs. Since then hair pieces have been in and out of fashion ever since.
In 1800 fake hair was frowned upon and women left their hair to be natural until the Romantic era was in full swing when women wore elaborate Apollo knots. Come the mid Victorian era and hair pieces were used a lot more extensively. Then strangely in the early 20th century Edwardian women wore false hair additions to create the pompadour hairstyle which looked like a woman was wearing a teapot on her head. How that became fashionable I don't really know!
Around the 1920's less hair was the big thing so hair pieces took a dive around that time and it wasn't until the 1940s when long hair came back into fashion and women starting indulging again. Then in the 1960's big hair was back with a vengeance. Coils were the in thing or the updo as better known to us were seen of many women, this was created by very extravagant human hair pieces. Wigs made from real or fake hair were commonly worn around this time too and carried on into the early 70's. Come the 80's and big hair was in but only natural hair. Famous singers wore wigs but that was about it.
The clip-on hair extensions come in a variety of different colours and lengths are the best option for non permanent hair pieces. They are very easy to use and as long as you get the right hair colour and texture of hair, no one will know your hair is fake. In fact I have sat next to a work colleague for months not realising that her long hair was in fact clip on hair pieces. It was only whilst getting ready for our Christmas works do that she pulled her hair off! I was shocked to say the least as her natural hair was just shoulder length and I had no idea.
Top 10 Hair Dying Mistakes
Whether you are a hair salon employee, a hair salon owner, or a regular hair salon client, sanitation and cleanliness of the hair salon should always be important to you. This is because bacteria, viruses and various other types of microscopic organisms could be breeding and thriving in the various implements, tools of the trade and in the premises of the hair salon itself without your being aware of it.
How simple is it to contract something when you visit a hair salon for a trim? The comb that is used to smoothen out tangles in your hair could have just been used on another customer who has lice, yet the hairstylist may not have had the comb washed and disinfected. The rollers that the staff may use to roll up your hair preparatory to setting so that you wind up with bouncy curls could have been used beforehand on someone with a catching scalp condition like psoriasis. And the towels they use to wrap your head after washing may have been used on another client - which is just plain disgusting.
o Sneeze that hair out
You could also look at the hair accumulating on the floor - is it regularly swept up? Or do they let around five clients get haircuts first before they start sweeping the mess into a dustpan for disposal?
o Quality Check your hairstylist
Take a good look at your hairstylist too. Are his/her nails kept clean and tidy? Or are they long and kind of dirty? A hairstylist with dirty fingernails might have something catching living under those nails which could be passed on to you so if you spot that type of detail, say good bye politely and never return.
There are hair salons from hell and there are hair salons which are very diligent about practicing sound sanitation and cleanliness habits. Your best choice? The latter as your health depends on it.


text:
Winnipeg Jets Pregame: Cleared for Takeoff!
Eric Fehr, Mark Stuart, Nik Antropov, and Andrew Ladd (Photo credit: John Woods)
The Pre Game: OK, who among us is not looking forward to smearing turkey gravy over fresh rolls with sage stuffing and a slab of dark meat on top with tart cranberry sauce dripping from the side? Maybe everyone who also has to travel home for the annual 'Parental Maintenance' festival. Or those who just aren't in a position to lay a feast on their table.
Don't ever dare quote us as saying this, but this is a great time of year to be nice to people. Even those you don't know. Not just Thanksgiving Day, but the coming months of cold, and dark, and at times hunger. Be nice, people.
We don't handle "being nice" well, at least publicly, so this Thanksgiving preview we've handed over to two honest, sweet-natured souls from the Upper Midwest. (*whisper God'sCountry whisper*) "Puck Buddy Bunny" and "Dave E" write for PuckBuddys, and occasionally hoist a drink to the great hockey teams of the midwest, such as the Fightin' Souix, the Duluth Bulldogs, or (when they must) the Wings.
Either of them have more hockey knowledge at a hat drop than both PuckBuddys on a sober night, and they've offered their thoughts on our second tangle with the Winnipeg Jets. We advise you sit up straight, pay attention, then go back to fiddling with your bird.
By Doug Johnson 9 years ago


text:
DES MOINES, Iowa -- Iowa farmers are close to wrapping up this year's harvest as they work to get drought-damage crops out of the fields as cooler weather arrives.
The U.S. Department of Agriculture says 76 percent of the corn has been harvested, which is a month ahead of normal. Eighty percent of the soybeans are in from the fields, which is two weeks ahead of normal.
The USDA says in Tuesday's report that the corn condition is 47 percent poor or very poor, 33 percent fair and 20 percent in good or excellent shape. Soybeans are 31 percent poor or very poor, 37 percent fair and 32 percent in good or excellent condition.
The statewide average rainfall was .05 inches. It's the 20th week of the past 22 with below normal precipitation.