Scripts (Drupal)
Naar navigatie springen
Naar zoeken springen
Ik werk graag met scripts:
- Herhaalbaarheid & uitbreidbaarheid: Als een procedure eenmaal in een script is vastgelegd, kan het - binnen bepaalde grenzen - moeiteloos herhaald worden, en uitgebreid worden
- Consistentie: Gerelateereed aan herhaalbaarheid: Als eens script het eenmaal doet, kan ik er min-of-meer op vertrouwen dat het de volgende keer op dezelfde manier werkt
- Zelfdocumenterend: Na een kwartiertje muizen weet ik doorgaans al niet meer wat ik precies heb gedaan. Met scripts heb ik dat probleem niet. Als ik vervolgens de discipline kan opbrengen om steeds met bestaande scripten verder te werken, in plaats van elke keer het wiel opnieuw uit te vinden, dan bevat zo'n script in de loop der tijd een enorme hoeveelheid informatie omtrent de oplossing van een bepaald probleem. Dat is trouwens het belangrijkste argument tegen 'rewrite from scratch' zoals in dit bekende artikel wordt uitgelegd.
Momenteel (januari 2016) heb ik zo'n beetje alles voor Drupal 7 in één script staan:
#!/bin/sh # Installatie- & configuratiescript voor Drupal 7 # Strompf - Okt. 2015 - Maart 2016 # echo "*** Drupal installatie- & configuratiescript... **********************" #################################################################### # Switches #################################################################### # # Drupal 7 ########## # # download_drupal_7=true # Regel 80 # installeer_drupal_7=true # Regel 100 modules_7=true # Regel 125 drupalcommerce_7=true # Regel 317 # modules_7_taal=true theme_7=true # Regel 480 blokken=true # Algemeen ########## # # opruimen=true # Regel 508 # bestandsrechten_fixen=true #################################################################### # Variabelen initialiseren #################################################################### # domeinnaam="example.com" # Database # database_naam="example" database_gebruiker="example" database_wachtwoord="example" account_name="Beheerder" account_pass="Beheerder-wachtwoord" account_mail="info@example.com" site_name="Example.com" site_mail="info@example.com" #################################################################### # Constantes initialiseren #################################################################### # wortel="/var/www/"$domeinnaam # Laptop eigenaar="beheerder" timestamp=$(date +'%Y%m%d-%H%M%S') # Voor tijdelijke download-map if [ "$download_drupal_7" = true ]; then #################################################################### # Download Drupal 7 #################################################################### # Bijgewerkt & verbeterd: 11 maart 2016. Werkt als een zonnetje # Download Drupal core naar /tmp/drupal-<timestamp> ################################################### # Géén sudo gebruiken # drush dl -y -v drupal-7 --destination=/tmp --drupal-project-rename=drupal-$timestamp # Kopiëer download naar $wortel muv. de hoofdmap ################################################ # Dit werk ook voor dot-bestanden # cp -r /tmp/drupal-$timestamp/. $wortel fi if [ "$installeer_drupal_7" = true ]; then #################################################################### # Installeer Drupal 7 #################################################################### # # * Variabelen zoals $account_name staan tussen dubbele aanhalingstekens: # Anders worden eventuele spaties niet goed verwerkt # * BELANGRIJK dat de database al bestaat # * Met succes veelvuldig gebruikt sinds dec. 2015 # cd $wortel drush -vy si \ --db-url=mysql://$database_gebruiker:$database_wachtwoord@localhost/$database_naam \ --account-name="$account_name" \ --account-pass="$account_pass" \ --account-mail="$account_mail" \ --site-mail="$site_mail" \ --site-name="$site_name" fi if [ "$modules_7" = true ]; then #################################################################### # Modules Drupal 7 #################################################################### # # Gebruik 'drush pml' om de namen van submodules te achterhalen # cd $wortel # Core ################################################################# # drush dis -vy color # Standaard uit drush dis -vy comment # drush en -vy contact # drush en -vy dblog # Logs and records system events to the database. # drush en -vy help drush dis -vy overlay # Altijd uitzetten drush en -vy path # Allows users to rename URLs # drush dis -vy php # Gebruik ik dat nog? Liever niet drush en -vy search # drush en -vy shortcut # Allows users to manage customizable lists of shortcut links. drush en -vy statistics # Logs access statistics for your site. # drush dis -vy syslog # Logs doorzetten naar systeemlog? Da's vrij exotisch # drush en -vy taxonomy drush dis -vy toolbar # Altijd uit drush en -vy update # Admin Menu ################################################################# # Dit betreft het admin-menu # Admin-taalwissel → Taal # drush en -vy admin_menu drush en -vy admin_menu_toolbar # Backup & Migrate ################################################################# # # Deze kun je vaak direct al installeren: Ivm. migratie van # ontwikkel- naar testomgeving, heb je 'm hopelijk snel nodig # # drush en -vy backup_migrate # Better Exposed Filters ################################################################# # # Biedt meer soorten controls voor faceted search-filters # drush en -vy better_exposed_filters # Context ################################################################# # # * 'Context' is een alternatief op Blocks. # * http://wiki.devliegendebrigade.nl/Context-module_%28Drupal%29 # drush en -vy context drush en -vy context_ui # Delete all ################################################################# # drush en -vy delete_alle # Display Suite ################################################################# # # * Oa. voor aangepaste view modes # * http://wiki.devliegendebrigade.nl/Display_Suite-module_%28Drupal%29 # drush en -vy ds_ui drush en -vy ds drush en -vy ds_extras drush en -vy ds_forms drush en -vy ds_format drush en -vy ds_search drush en -vy ds_devel # Drush Extras ################################################################# # # * Zie http://cgit.drupalcode.org/drush_extras/tree/README.txt?id=HEAD # * Nodig? # # drush en -vy drush_extras # Empty front page ################################################################# # # drush dis -vy empty_front_page # Faceted Search ################################################################# # drush en -vy search_api # Begin hier! drush en -vy search_api_facetapi # De andere basismodule drush en -vy search_api_db # Gebruik de database als search-server drush en -vy search_api_views # ? # Feeds ################################################################# # # Importeren van data # drush en -vy entityreference_feeds # ? drush en -vy feeds drush en -vy feeds_ui drush en -vy commerce_feeds # Drupal Commerce-gerelateerd # Google - Diversen ################################################################# # # drush en -vy google_adwords_remarketing # drush dis -vy google_analytics # drush en -vy adsense # Module Filter ################################################################# # # * Maakt de module-pagina overzichtelijker # en toont de drush-namen van modules # drush en -vy module_filter # Pathauto ################################################################# # # Pathauto maakt een eigen veld aan in product-displays, # en dat vind ik maar een heel slecht idee # # drush dis -vy pathauto # SEO-gerelateerd ################################################################# # # drush en -vy seo_checker # SEO Compliance checker-https://www.drupal.org/project/seo_checker # drush en seo_cheklist # SEO Checklist - https://www.drupal.org/project/seo_checklist # drush en seo_cheklist # SEO Checklist - https://www.drupal.org/project/seo_checklist # drush en page_title # Page Title - https://www.drupal.org/project/page_title # drush en path_redirect # Path redirect - https://www.drupal.org/project/Path_Redirect # drush en global_redirect # Global redirect - https://www.drupal.org/project/globalredirect # drush en metatag # Meta tags - https://www.drupal.org/project/metatag # drush en search404 # Search 404 - https://www.drupal.org/project/search404 # drush en xmlsitemap # XML Sitemap - https://www.drupal.org/project/xmlsitemap # drush en taxonomy_title # Taxonomy title - https://www.drupal.org/project/taxonomy_title # SMTP ################################################################# # Ook voor Drupal 7 heb je de SMTP-module nodig om # fatsoenlijk te kunnen emailen # drush en -vy smtp # Spam-gerelateerd ################################################################# # Voor een site die extern gehost is (bv. VPS), direct activeren: # Het is verbazend hoe snel spam optreedt # # drush en -vy captcha # Captcha # drush en -vy image_captcha # Image-captcha # drush en -vy honeypot # Honeypot # Taxonomy Manager ################################################################# # # drush dis -vy taxonomy_manager # User interface ################################################################# # # drush en ckeditor # drush en -vy compact_forms # ? # Views ################################ # # Deze is module is vrijwel onmisbaar # drush en -vy views drush en -vy views_ui # Webform ################################################################# # # drush en -vy webform fi if [ "$drupalcommerce_7" = true ]; then #################################################################### # Drupal Commerce voor Drupal 7 #################################################################### # cd $wortel # Ondersteunende modules ################################################################# # # * Handig om deze modules eerst expliciet te installeren # * Bron: https://www.drupal.org/project/commerce # * Drush loop-vrij # drush en -vy ctools drush en -vy views drush en -vy views_ui drush en -vy entity drush en -vy rules drush en -vy addressfield drush en -vy inline_entity_form # Product-display-referentie # Eigenlijke modules ################################################################# # # * Onduidelijk welke modules ik precies nodig heb # * Een aantal modules kunnen naderhand uitgeschakeld worden, # wo. enkele ui-modules # * Geen drush-loops # drush en -vy commerce drush en -vy commerce_cart drush en -vy commerce_checkout drush en -vy commerce_customer drush en -vy commerce_customer_ui drush en -vy commerce_line_item drush en -vy commerce_line_item_ui drush en -vy commerce_customer_ui drush en -vy commerce_order drush en -vy commerce_order_ui drush en -vy commerce_payment drush dis -vy commerce_payment_example drush en -vy commerce_payment_ui drush en -vy commerce_price drush en -vy commerce_product drush en -vy commerce_product_pricing drush en -vy commerce_product_pricing_ui drush en -vy commerce_product_reference drush en -vy commerce_product_ui drush en -vy commerce_tax drush en -vy commerce_tax_ui drush en -vy commerce_ui # Contribs - Commerce Backoffice ################################################################# # # Deze modules maken op allerlei manieren werken met Drupal Commerce # een stuk prettiger, wo. # * Bulk-deletion van producten # * Beter navigeren in multi-page content # drush en -vy commerce_backoffice drush en -vy commerce_backoffice_content drush en -vy commerce_backoffice_order drush en -vy commerce_backoffice_product # Contribs - Overig ################################################################# # drush en -vy commerce_bank_transfer drush en -vy commerce_flat_rate drush en -vy commerce_shipping drush dis -vy commerce_shipping_example # Doe maar niet drush en -vy commerce_shipping_ui # # drush en commerce_currency_settings # € vóór geldbedrag # drush en -vy commerce_stock # Basismodule; API. Benodigd # drush dis -vy commerce_sdf # Stock Decial Formatter - Nodig? # drush en -vy commerce_ss # Simple Stock - Nodig? # drush dis -vy commerce_ssr # Simple Stock Rules # drush en -vy commerce_stock_ui # Zonder UI lukt 't niet # drush en -vy commerce_feeds # Drupal Commerce-gerelateerd drush en -vy commerce_search_api fi if [ "$modules_7_taal" = true ]; then #################################################################### # Modules Drupal 7 - Taal #################################################################### # cd $wortel # Taal - Algemeen ################################################################# # drush en -vy locale # Hoofdmodule voor gebruik andere ta(a)l(en) dan EN drush en -vy l10n_update # Language updates voor modules. Superhandig drush en -vy admin_language # Onontbeerlijk voor een niet-NL-site # Internationalization Module (i18n): Voor meertalige sites ################################################################# # drush en -vy i18n # Basis-module 'Internationaliasation' drush en -vy i18n_block # Enables language selector for blocks drush en -vy i18n_contact # Makes contact categories and replies translatable drush en -vy i18n_field # Translate field properties drush en -vy i18n_menu # Supports translatable custom menu items. drush en -vy i18n_node # Extended node options for multilingual content # drush en -vy i18n_forum # Enables multilingual forum, translates names and containers. drush en -vy i18n_select # API module for multilingual content selection drush en -vy i18n_path # Define translations for generic paths drush en -vy i18n_string # Benodigde ondersteunende module drush en -vy i18n_sync # Synchronizes taxonomy and fields drush en -vy i18n_taxonomy # Enables multilingual taxonomy. drush en -vy i18n_redirect # Translation redirect drush en -vy i18n_translation # Ondersteunende module. nodig Soms drush en -vy i18n_user # Translate emails sent from the User module. drush en -vy i18n_variable # Benodigd voor i18n_user # drush en -vy rules_i18n # Rules translation. Aparte module? # Drush_language ################################################################# # # * Verschaft een paar handige commando's # * https://www.drupal.org/project/drush_language # * Deze module heeft last van de drush-loop: # * http://wiki.devliegendebrigade.nl/Drush_vicieuze_circel#Mogelijke_oorzaken # * Apart downloaden & installeren biedt helaas ook geen soulaas # * Daarom overslaan, want niet al te belangrijk # # drush en -vy drush_language # Drush-loop # # drush dl drush_language # Apart downloaden is geen probleem # drush en drush_language # Bij activeren treedt weer de drush-loop op # # drush -y language-add nl # Dit is een drush_language-commando # drush -y language_enable nl # drush -y language_default nl # # drush -y language-add de # Dit is een drush_language-commando # drush -y language_enable de # drush -y language_default de fi if [ "$theme_7" = true ]; then #################################################################### ### Theme Drupal 7 #################################################################### # # * Begin 2016 (Drupal 7): Werkt perfect # # Download & activeer adaptivetheme ##################################################################### cd $wortel drush en -vy adaptivetheme # Nodig voor at_commerce drush en -vy at_commerce # Subtheme van adaptivetheme drush vset theme_default at_commerce drush pm-disable -vy bartik drush pm-disable -vy adaptivetheme drush vset admin_theme -vy seven # Download fresh.css ##################################################################### # # * Standaardbestand 'fresh.css' downloaden vanaf media.devliegendebrigade.nl # * Toepassen op 'Seven' en 'at_commerce' # wget http://media.devliegendebrigade.nl/fresh.css -O $wortel/themes/seven/fresh.css wget http://media.devliegendebrigade.nl/fresh.css -O $wortel/sites/all/themes/at_commerce/css/fresh.css # Verwijzing toevoegen aan seven.info ##################################################################### # if grep -Fq "fresh.css" $wortel/themes/seven/seven.info then echo "Verwijzing fresh.css al toegevoegd aan seven.info"; else echo "stylesheets[screen][] = fresh.css" >> $wortel/themes/seven/seven.info fi # Verwijzing toevoegen aan seven.info ##################################################################### # if grep -Fq "fresh.css" $wortel/sites/all/themes/at_commerce/at_commerce.info then echo "Verwijzing fresh.css al toegevoegd aan at_commerce.info"; else echo "stylesheets[screen][] = css/fresh.css" >> $wortel/sites/all/themes/at_commerce/at_commerce.info fi # Clear cache ##################################################################### # drush cc all fi if [ "$blokken" = true ]; then #################################################################### ### Blocks #################################################################### # # * Uitzetten van blokken, vereist geen additionele Drupal-module # * Zie http://wiki.devliegendebrigade.nl/Drush_block-disable # * Mogelijk identiek voor Drupal 7 & 8 # * Moet deze subroutine twee keer uitgevoerd worden? # cd $wortel drush block-disable -v system powered-by drush block-disable -v user login drush block-disable -v node recent drush block-disable -v comment recent drush block-disable -v node recent drush block-disable -v node syndicate drush block-disable -v user new drush block-disable -v user online fi if [ "$opruimen" = true ]; then #################################################################### # Opruimen #################################################################### # # * Tricky: rm -rf kan verkeerd uitpakken bij configuratiefouten! # * sudo rm alleen toepassen op submappen! # echo "Opruimen..." # Verwijder de database ####################### # i="drop database if exists $database_naam;" mysql -e "$i" # Verwijder alle bestanden in $wortel ##################################### # # Problemen met map 'sites'? Gebruik dan alleen daar 'sudo' # Tricky ivm. recursie! # rm -rf $wortel/* || sudo rm -rf $wortel/sites # Verwijder nu de hele map ########################## # rm -rf $wortel # En maak 'm opnieuw aan ######################## # mkdir $wortel fi if [ "$bestandsrechten_fixen" = true ]; then #################################################################### # Bestandsrechten fixen #################################################################### # # Dit script is geschikt voor Drupal 7 & 8 # # Drupal 8: Er moet iets gefixet worden na 'drush si', want het theme # komt niet uit de verf, en af en toe verschijnt er een foutmelding # zoals: # # The specified file temporary://fileFZanvi could not be copied because # the destination directory is not properly configured. This may be # caused by a problem with file or directory permissions. More # information is available in the system log. # Eigenaar bijwerken ###################################################################### # sudo chown -R $eigenaar $wortel/* sudo chgrp -R $eigenaar $wortel/* sudo chown -R $eigenaar $wortel/.* sudo chgrp -R $eigenaar $wortel/.* # Mappen (algemeen) ###################################################################### # 'Other' moeten mappen kunnen executeren, anders werkt 'cd' niet # # * Eigenaar: mag alles (7) # * Group: mag nix # * Other: Lezen & executeren (x-x - 5) # sudo chmod -R 705 $(find $wortel -type d) # Bestanden (algemeen) ###################################################################### # * Eigenaar: Lezen & schrijven. Uitvoeren niet nodig # * Groep: Mag niets # * Other: Lezen. Niet schrijven of uitvoeren want veiligheidsprobleem # # Dit geldt ook voor .htaccess # # Dit geeft foutmeldingen, omdat chmod niet overweg kan met spaties: # Die belanden op een aparte regel. # Moet ik escapen op een of andere manier # sudo chmod -R 604 $(find $wortel -type f) # Map 'files' ###################################################################### # # Drupal/webserver gebruikt deze map om bestanden te plaatsen # # * Mappen - Other: Lezen, schrijven, executeren → 707 # * Bestanden - Other: Lezen, schrijven → 606 # sudo chmod -R 707 $(find $wortel/sites/default/files -type d) sudo chmod -R 606 $(find $wortel/sites/default/files -type f) # Map 'sites/all/translations' ###################################################################### # # Hier plaatst Drupal gedownloade vertalingen # # * Mappen - Other: Lezen, schrijven, executeren → 707 # * Bestanden - Other: Lezen, schrijven → 606 # sudo chmod -R 707 $(find $wortel/sites/all/translations -type d) sudo chmod -R 606 $(find $wortel/sites/all/translations -type f) # .drush-map fixen ###################################################################### # Om de haverklap wordt deze map niet-schrijfbaar voor Drush, # misschien door gebruik van 'sudo drush'. # sudo chown -R $eigenaar /home/$eigenaar/.drush sudo chgrp -R $eigenaar /home/$eigenaar/.drush sudo chmod -R 705 /home/$eigenaar/.drush fi #################################################################### ### Klaar #################################################################### # echo "...Klaar!"