<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Jeff Cook</title>
    <description>Welcome to jeffcook.info
</description>
    <link>//</link>
    <atom:link href="//feed.xml" rel="self" type="application/rss+xml"/>
    <pubDate>Sat, 11 Apr 2026 05:02:09 -0500</pubDate>
    <lastBuildDate>Sat, 11 Apr 2026 05:02:09 -0500</lastBuildDate>
    <generator>Jekyll v4.2.2</generator>
    
      <item>
        <title>Gitlab and local dev</title>
        <description>&lt;h1 id=&quot;gitlab-knowledge&quot;&gt;GitLab Knowledge&lt;/h1&gt;

&lt;p&gt;Each team member should have a basic understanding of git and GitLab.&lt;/p&gt;

&lt;h2 id=&quot;git-features&quot;&gt;Git features&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;https://docs.gitlab.com/ee/topics/git/index.html&quot;&gt;https://docs.gitlab.com/ee/topics/git/index.html&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Commits&lt;/li&gt;
  &lt;li&gt;Branches&lt;/li&gt;
  &lt;li&gt;Tags&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;gitlab-features&quot;&gt;GitLab Features&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;https://docs.gitlab.com/ee/gitlab-basics/index.html&quot;&gt;https://docs.gitlab.com/ee/gitlab-basics/index.html&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Issues &lt;a href=&quot;https://docs.gitlab.com/ce/user/project/issues/&quot;&gt;https://docs.gitlab.com/ce/user/project/issues/&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Merge requests(GitLab) / pull requests(GitHub)
&lt;a href=&quot;https://gitlab.com/help/#merge-requests&quot;&gt;https://gitlab.com/help/#merge-requests&lt;/a&gt;
&lt;a href=&quot;https://docs.gitlab.com/ce/user/project/merge_requests/&quot;&gt;https://docs.gitlab.com/ce/user/project/merge_requests/&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;CI/CD Pipelines&lt;/li&gt;
  &lt;li&gt;Artifacts&lt;/li&gt;
  &lt;li&gt;Releases&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;markdown&quot;&gt;Markdown&lt;/h2&gt;

&lt;p&gt;GitLab uses markdown within a lot of the features.
Every user should have a good understanding of how to read and write markdown.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;README.md&lt;/code&gt; files and other documentation inside the repositories&lt;/li&gt;
  &lt;li&gt;Issue and merge request descriptions and comments&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Learn markdown.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://docs.gitlab.com/ee/user/markdown.html&quot;&gt;https://docs.gitlab.com/ee/user/markdown.html&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.markdownguide.org/cheat-sheet/&quot;&gt;https://www.markdownguide.org/cheat-sheet/&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://docs.gitlab.com/ee/user/markdown.html#differences-between-gitlab-flavored-markdown-and-standard-markdown&quot;&gt;https://docs.gitlab.com/ee/user/markdown.html#differences-between-gitlab-flavored-markdown-and-standard-markdown&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;setup-development-workstation&quot;&gt;Setup development workstation&lt;/h2&gt;

&lt;h3 id=&quot;workstation-installs&quot;&gt;Workstation Installs&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Visual Studio Code (VS Code)
    &lt;ul&gt;
      &lt;li&gt;https://code.visualstudio.com/download&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Git
    &lt;ul&gt;
      &lt;li&gt;https://git-scm.com/downloads&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;configuration&quot;&gt;Configuration&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Secure Shell access for GitLab
    &lt;ul&gt;
      &lt;li&gt;https://docs.gitlab.com/ee/user/ssh.html&lt;/li&gt;
      &lt;li&gt;https://medium.com/devops-with-valentine/2021-how-to-your-ssh-key-for-gitlab-on-windows-10-587579192be0&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Mon, 04 Apr 2022 02:00:00 -0500</pubDate>
        <link>//gitlab/2022/04/04/gitlab.html</link>
        <guid isPermaLink="true">//gitlab/2022/04/04/gitlab.html</guid>
        
        
        <category>GitLab</category>
        
      </item>
    
      <item>
        <title>Reading about Docker and modern system design</title>
        <description>&lt;p&gt;This post is a referance to the sources I read and learn from.&lt;/p&gt;

&lt;h2 id=&quot;general&quot;&gt;General&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://12factor.net/&quot;&gt;The Twelve Factor App&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://roadmap.sh/devops&quot;&gt;DevOps Roadmap&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.conventionalcommits.org/&quot;&gt;Conventional Commits&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://semver.org/&quot;&gt;Semantic Versioning&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=FedQ2NlgxMI&quot;&gt;BOB MARTIN PRESENTS: The Future of Agile&lt;/a&gt;
An amazing talk about teh programing proffession!&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;devops&quot;&gt;DevOps&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://theagileadmin.com/what-is-devops/&quot;&gt;The agile admin - What is devops?&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://newrelic.com/devops/what-is-devops&quot;&gt;New Relic - What is devops?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;docker&quot;&gt;Docker&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://docs.docker.com/get-started/&quot;&gt;Quick Start (1-3)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://docs.docker.com/engine/reference/builder/&quot;&gt;Dockerfile reference&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://docs.docker.com/develop/develop-images/dockerfile_best-practices/&quot;&gt;Best Practiced for writing Dockerfiles&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;docker-tools&quot;&gt;Docker Tools&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/hadolint/hadolint&quot;&gt;Hadolint&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;scrum&quot;&gt;Scrum&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.scrumguides.org/scrum-guide.html&quot;&gt;The Scrum Guide&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Mon, 19 Oct 2020 02:00:00 -0500</pubDate>
        <link>//docker/reading/2020/10/19/reading.html</link>
        <guid isPermaLink="true">//docker/reading/2020/10/19/reading.html</guid>
        
        
        <category>Docker</category>
        
        <category>Reading</category>
        
      </item>
    
      <item>
        <title>Facebook Page</title>
        <description>&lt;p&gt;I have added a Facebook page for this website.
&lt;a href=&quot;https://www.facebook.com/jeffcook.info/&quot;&gt;https://www.facebook.com/jeffcook.info/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I have also setup a automatic post to Facebook when this site is updated.
This post was setup using a &lt;a href=&quot;https://en.wikipedia.org/wiki/RSS&quot;&gt;RSS feed&lt;/a&gt;, and a flow in Microsoft Power Automate.&lt;/p&gt;
</description>
        <pubDate>Sat, 07 Mar 2020 01:00:00 -0600</pubDate>
        <link>//facebook/2020/03/07/facebook.html</link>
        <guid isPermaLink="true">//facebook/2020/03/07/facebook.html</guid>
        
        
        <category>Facebook</category>
        
      </item>
    
      <item>
        <title>Regex 101</title>
        <description>&lt;p&gt;A coworker recommended &lt;a href=&quot;https://regex101.com/&quot;&gt;https://regex101.com/&lt;/a&gt; to me. 
I have used other regex helpers in the past, but wow this is really good. 
It also has a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Code Genterator&lt;/code&gt; tool that will show you how to escape the regex for any different languages.&lt;/p&gt;

&lt;p&gt;Highly recommended.&lt;/p&gt;
</description>
        <pubDate>Thu, 05 Mar 2020 01:00:00 -0600</pubDate>
        <link>//regex/tool/2020/03/05/regex101.html</link>
        <guid isPermaLink="true">//regex/tool/2020/03/05/regex101.html</guid>
        
        
        <category>Regex</category>
        
        <category>Tool</category>
        
      </item>
    
      <item>
        <title>Docker image for OpenConnect</title>
        <description>&lt;p&gt;I have been working on building my normal tool set as Docker containers.
This would allow me to replace my workstation as needed, and be able to share my tools with my team.&lt;/p&gt;

&lt;p&gt;While I was working on this, one of the first tools I needed to look at was how I VPN into private environments.
Cisco AnyConnect is a common corporate solution.
It doesn’t allow public downloads of the client.
Nor does it have an auto-update feature to keep it up to date.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.infradead.org/openconnect/index.html&quot;&gt;OpenConnect&lt;/a&gt; client is an open source replacement for Cisco AnyConnect Client.
Yum, APT, brew and chocolatey all have OpenConnect packages.
There are Docker images on docker hub for OpenConnect&lt;/p&gt;

&lt;p&gt;After trying the public Docker images I was disappointed in the Dockerness of the working ones.
I decided to create my own.
&lt;a href=&quot;https://gitlab.com/jeffcook/openconnect&quot;&gt;jeffcook/openconnect&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The main issue with creating a Docker container for a VPN with a tunnel interface os the privilege required to make it work.
It requires both privileged access for the container and root access for the user.
The first round is not super secure.
Which is fine for my current use.&lt;/p&gt;

&lt;p&gt;I am working on utilizing &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ocproxy&lt;/code&gt; as a way to avoid these security issues.
ocproxy is a SOCK5 proxy and would not use a tunnel interface for OpenConnect.
This would work with most tools including web browser, SSH and anything else that supports SOCKS proxy.
This covers most tools used over a VPN.
For any this that doesn’t support SOCKS proxy there is always the option to create the tunnel interface.&lt;/p&gt;
</description>
        <pubDate>Thu, 26 Sep 2019 02:00:00 -0500</pubDate>
        <link>//openconnect/docker/gitlab/projects/2019/09/26/openconnect_docker.html</link>
        <guid isPermaLink="true">//openconnect/docker/gitlab/projects/2019/09/26/openconnect_docker.html</guid>
        
        
        <category>OpenConnect</category>
        
        <category>Docker</category>
        
        <category>GitLab</category>
        
        <category>projects</category>
        
      </item>
    
      <item>
        <title>JeffCook.info</title>
        <description>&lt;p&gt;Today I started a new project. Build and manage  (as much as possible) a website and domain from a git pipeline.&lt;/p&gt;

&lt;h2 id=&quot;manual-steps&quot;&gt;Manual steps&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Setup new Google account&lt;/li&gt;
  &lt;li&gt;Get a domain name from Google&lt;/li&gt;
  &lt;li&gt;Setup a &lt;a href=&quot;https://cloudflare.com/&quot;&gt;Cloudflare&lt;/a&gt; account and attach the domain&lt;/li&gt;
  &lt;li&gt;Point the registrar to Cloudflare for DNS.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;automated-tasks&quot;&gt;Automated tasks&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://jekyllrb.com/&quot;&gt;Jekyll&lt;/a&gt; to create the website static pages.&lt;/li&gt;
  &lt;li&gt;GitLab CI/CD to use a Jekyll Docker image to build the push the content to &lt;a href=&quot;https://docs.gitlab.com/ee/user/project/pages/&quot;&gt;GitLab Pages&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://stackexchange.github.io/dnscontrol/&quot;&gt;DNSControl&lt;/a&gt; to configure Cloudflare DNS for the domain.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;project-constraints&quot;&gt;Project constraints&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;All tasks performed without any tools other than a web browser.&lt;/li&gt;
  &lt;li&gt;The costs of the project needed to be zero or minimal.
    &lt;ul&gt;
      &lt;li&gt;The costs include…
        &lt;ul&gt;
          &lt;li&gt;the domain name&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Keeping small businesses or non-profits in mind for functionality.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;tools&quot;&gt;Tools&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://stackexchange.github.io/dnscontrol/&quot;&gt;DNSControl&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://cloudflare.com/&quot;&gt;Cloudflare&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://docs.gitlab.com/runner/&quot;&gt;GitLab Runner&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://jekyllrb.com/&quot;&gt;Jekyll&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://docs.gitlab.com/ee/user/project/pages/&quot;&gt;GitLab Pages&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Sun, 23 Jun 2019 19:00:00 -0500</pubDate>
        <link>//jekyll/cloudflare/dnscontrol/gitlab/projects/2019/06/23/jeffcook_info.html</link>
        <guid isPermaLink="true">//jekyll/cloudflare/dnscontrol/gitlab/projects/2019/06/23/jeffcook_info.html</guid>
        
        
        <category>Jekyll</category>
        
        <category>Cloudflare</category>
        
        <category>DNSControl</category>
        
        <category>gitlab</category>
        
        <category>projects</category>
        
      </item>
    
      <item>
        <title>Secure your system administrative passwords - Microsoft Local Administrator Password Solution (LAPS)</title>
        <description>&lt;p&gt;As system administrators, we know how vulnerable passwords are.
We require our users to change their passwords on a regular basis.
We request they use different passwords for different systems, to limit exposure caused by the loss of a single password.
Then we set the administrator password to be the same on all our systems.
Then we never change them.
The result is one compromised system means every other one can be compromised.&lt;/p&gt;

&lt;!-- textlint-disable no-exclamation-question-mark --&gt;
&lt;p&gt;Why do we do this?
&lt;!-- textlint-enable no-exclamation-question-mark --&gt;
Because managing the password on every system is a major task in keeping documentation up to date.
Over the years I have tried to make this easier.
It did not work out because it still had too much manual work.
Now Microsoft has created Local Administrator Password Solution (LAPS) great solution that is self-maintaining, easy and free to manage local admin passwords.&lt;/p&gt;

&lt;h2 id=&quot;i-recommend-the-following-to-make-this-easy-and-secure&quot;&gt;I recommend the following to make this easy and secure&lt;/h2&gt;

&lt;p&gt;Create a new domain user account for all your system admins.
This is their admin account to use when they need to elevate their permissions.
This means when surfing the web and opening email they do not have elevated permissions that could ruin their day if they open the wrong attachment.
Require these admin accounts to have a strong and unique password.&lt;/p&gt;

&lt;p&gt;Add those users to a new group and use group policy to add that group to the local “Administrators” group.
You now have individual accountability of who is doing what on each system.&lt;/p&gt;

&lt;p&gt;Download and configure LAPS.
Use a group policy with LAPS to create a new user with the LAPS passwords.
This keeps the of a well-known username and stops the reuse of a SID if the systems were cloned from each other.
Allow this new group of user to read the LAPS passwords.&lt;/p&gt;

&lt;p&gt;Delete the existing/default administrator account via group policy.&lt;/p&gt;

&lt;p&gt;Now the staff who need to run processes as a local admin can with their own account and password they can remember.
They can the LAPS password from Active Directory when the system can’t authenticate to AD for some reason, such as the system was removed from the network.
The great part is if any system is compromised, they don’t have the local admin password and use it on every other system on your network.&lt;/p&gt;

&lt;h2 id=&quot;further-reading&quot;&gt;Further reading&lt;/h2&gt;

&lt;!-- textlint-disable spelling --&gt;
&lt;p&gt;&lt;a href=&quot;https://technet.microsoft.com/en-us/library/security/3062591.aspx&quot;&gt;https://technet.microsoft.com/en-us/library/security/3062591.aspx&lt;/a&gt;
&lt;!-- textlint-enable spelling --&gt;&lt;/p&gt;
</description>
        <pubDate>Sat, 25 Feb 2017 18:12:00 -0600</pubDate>
        <link>//laps/microsoft/2017/02/25/local_admin_password_solution.html</link>
        <guid isPermaLink="true">//laps/microsoft/2017/02/25/local_admin_password_solution.html</guid>
        
        
        <category>LAPS</category>
        
        <category>Microsoft</category>
        
      </item>
    
  </channel>
</rss>
